From a6c8ee5231230947c928bbe1c6a39eb6e1bb9c5b Mon Sep 17 00:00:00 2001 From: Eric Joldasov Date: Wed, 14 Jun 2023 20:27:03 +0600 Subject: [PATCH 1/3] compiler: rename "@XToY" to "@YFromX", zig fmt: rewrite them Signed-off-by: Eric Joldasov --- lib/std/zig/render.zig | 20 +++++++++++ src/Air.zig | 32 ++++++++--------- src/AstGen.zig | 38 ++++++++++---------- src/Autodoc.zig | 18 +++++----- src/BuiltinFn.zig | 54 ++++++++++++++-------------- src/Liveness.zig | 20 +++++------ src/Liveness/Verify.zig | 10 +++--- src/Sema.zig | 52 +++++++++++++-------------- src/Zir.zig | 70 ++++++++++++++++++------------------ src/arch/aarch64/CodeGen.zig | 22 ++++++------ src/arch/arm/CodeGen.zig | 22 ++++++------ src/arch/riscv64/CodeGen.zig | 22 ++++++------ src/arch/sparc64/CodeGen.zig | 22 ++++++------ src/arch/wasm/CodeGen.zig | 18 +++++----- src/arch/x86_64/CodeGen.zig | 26 +++++++------- src/codegen/c.zig | 14 ++++---- src/codegen/llvm.zig | 18 +++++----- src/codegen/spirv.zig | 12 +++---- src/print_air.zig | 10 +++--- src/print_zir.zig | 18 +++++----- src/translate_c.zig | 70 ++++++++++++++++++------------------ src/translate_c/ast.zig | 70 ++++++++++++++++++------------------ 22 files changed, 339 insertions(+), 319 deletions(-) diff --git a/lib/std/zig/render.zig b/lib/std/zig/render.zig index 3930c9714a..70c9d7209c 100644 --- a/lib/std/zig/render.zig +++ b/lib/std/zig/render.zig @@ -1396,6 +1396,26 @@ fn renderBuiltinCall( try ais.writer().writeAll("@max"); } else if (mem.eql(u8, slice, "@minimum")) { try ais.writer().writeAll("@min"); + } + // + else if (mem.eql(u8, slice, "@boolToInt")) { + try ais.writer().writeAll("@intFromBool"); + } else if (mem.eql(u8, slice, "@enumToInt")) { + try ais.writer().writeAll("@intFromEnum"); + } else if (mem.eql(u8, slice, "@errorToInt")) { + try ais.writer().writeAll("@intFromError"); + } else if (mem.eql(u8, slice, "@floatToInt")) { + try ais.writer().writeAll("@intFromFloat"); + } else if (mem.eql(u8, slice, "@intToEnum")) { + try ais.writer().writeAll("@enumFromInt"); + } else if (mem.eql(u8, slice, "@intToError")) { + try ais.writer().writeAll("@errorFromInt"); + } else if (mem.eql(u8, slice, "@intToFloat")) { + try ais.writer().writeAll("@floatFromInt"); + } else if (mem.eql(u8, slice, "@intToPtr")) { + try ais.writer().writeAll("@ptrFromInt"); + } else if (mem.eql(u8, slice, "@ptrToInt")) { + try ais.writer().writeAll("@intFromPtr"); } else { try renderToken(ais, tree, builtin_token, .none); // @name } diff --git a/src/Air.zig b/src/Air.zig index b179a3c024..91e8d0da4d 100644 --- a/src/Air.zig +++ b/src/Air.zig @@ -478,11 +478,11 @@ pub const Inst = struct { /// Converts a pointer to its address. Result type is always `usize`. /// Pointer type size may be any, including slice. /// Uses the `un_op` field. - ptrtoint, + int_from_ptr, /// Given a boolean, returns 0 or 1. /// Result type is always `u1`. /// Uses the `un_op` field. - bool_to_int, + int_from_bool, /// Return a value from a function. /// Result type is always noreturn; no instructions in a block follow this one. /// Uses the `un_op` field. @@ -629,12 +629,12 @@ pub const Inst = struct { array_to_slice, /// Given a float operand, return the integer with the closest mathematical meaning. /// Uses the `ty_op` field. - float_to_int, - /// Same as `float_to_int` with optimized float mode. - float_to_int_optimized, + int_from_float, + /// Same as `int_from_float` with optimized float mode. + int_from_float_optimized, /// Given an integer operand, return the float with the closest mathematical meaning. /// Uses the `ty_op` field. - int_to_float, + float_from_int, /// Transforms a vector into a scalar value by performing a sequential /// horizontal reduction of its elements using the specified operator. @@ -1337,9 +1337,9 @@ pub fn typeOfIndex(air: Air, inst: Air.Inst.Index, ip: *const InternPool) Type { .struct_field_ptr_index_2, .struct_field_ptr_index_3, .array_to_slice, - .float_to_int, - .float_to_int_optimized, - .int_to_float, + .int_from_float, + .int_from_float_optimized, + .float_from_int, .splat, .get_union_tag, .clz, @@ -1387,7 +1387,7 @@ pub fn typeOfIndex(air: Air, inst: Air.Inst.Index, ip: *const InternPool) Type { .c_va_end, => return Type.void, - .ptrtoint, + .int_from_ptr, .slice_len, .ret_addr, .frame_addr, @@ -1397,7 +1397,7 @@ pub fn typeOfIndex(air: Air, inst: Air.Inst.Index, ip: *const InternPool) Type { .wasm_memory_grow => return Type.i32, .wasm_memory_size => return Type.u32, - .bool_to_int => return Type.u1, + .int_from_bool => return Type.u1, .tag_name, .error_name => return Type.slice_const_u8_sentinel_0, @@ -1687,8 +1687,8 @@ pub fn mustLower(air: Air, inst: Air.Inst.Index, ip: *const InternPool) bool { .is_non_err_ptr, .bool_and, .bool_or, - .ptrtoint, - .bool_to_int, + .int_from_ptr, + .int_from_bool, .fptrunc, .fpext, .intcast, @@ -1718,9 +1718,9 @@ pub fn mustLower(air: Air, inst: Air.Inst.Index, ip: *const InternPool) bool { .slice_elem_ptr, .ptr_elem_ptr, .array_to_slice, - .float_to_int, - .float_to_int_optimized, - .int_to_float, + .int_from_float, + .int_from_float_optimized, + .float_from_int, .reduce, .reduce_optimized, .splat, diff --git a/src/AstGen.zig b/src/AstGen.zig index 86bd0fd4f4..0508704269 100644 --- a/src/AstGen.zig +++ b/src/AstGen.zig @@ -2626,15 +2626,15 @@ fn addEnsureResult(gz: *GenZir, maybe_unused_result: Zir.Inst.Ref, statement: As .error_set_decl, .error_set_decl_anon, .error_set_decl_func, - .int_to_enum, - .enum_to_int, + .enum_from_int, + .int_from_enum, .type_info, .size_of, .bit_size_of, .typeof_log2_int_type, - .ptr_to_int, + .int_from_ptr, .align_of, - .bool_to_int, + .int_from_bool, .embed_file, .error_name, .sqrt, @@ -2655,9 +2655,9 @@ fn addEnsureResult(gz: *GenZir, maybe_unused_result: Zir.Inst.Ref, statement: As .type_name, .frame_type, .frame_size, - .float_to_int, - .int_to_float, - .int_to_ptr, + .int_from_float, + .float_from_int, + .ptr_from_int, .float_cast, .int_cast, .ptr_cast, @@ -8281,11 +8281,11 @@ fn builtinCall( .bit_size_of => return simpleUnOpType(gz, scope, ri, node, params[0], .bit_size_of), .align_of => return simpleUnOpType(gz, scope, ri, node, params[0], .align_of), - .ptr_to_int => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .ptr_to_int), + .int_from_ptr => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .int_from_ptr), .compile_error => return simpleUnOp(gz, scope, ri, node, .{ .rl = .{ .ty = .slice_const_u8_type } }, params[0], .compile_error), .set_eval_branch_quota => return simpleUnOp(gz, scope, ri, node, .{ .rl = .{ .coerced_ty = .u32_type } }, params[0], .set_eval_branch_quota), - .enum_to_int => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .enum_to_int), - .bool_to_int => return simpleUnOp(gz, scope, ri, node, bool_ri, params[0], .bool_to_int), + .int_from_enum => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .int_from_enum), + .int_from_bool => return simpleUnOp(gz, scope, ri, node, bool_ri, params[0], .int_from_bool), .embed_file => return simpleUnOp(gz, scope, ri, node, .{ .rl = .{ .ty = .slice_const_u8_type } }, params[0], .embed_file), .error_name => return simpleUnOp(gz, scope, ri, node, .{ .rl = .{ .ty = .anyerror_type } }, params[0], .error_name), .set_runtime_safety => return simpleUnOp(gz, scope, ri, node, bool_ri, params[0], .set_runtime_safety), @@ -8308,10 +8308,10 @@ fn builtinCall( .Frame => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .frame_type), .frame_size => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .frame_size), - .float_to_int => return typeCast(gz, scope, ri, node, params[0], params[1], .float_to_int), - .int_to_float => return typeCast(gz, scope, ri, node, params[0], params[1], .int_to_float), - .int_to_ptr => return typeCast(gz, scope, ri, node, params[0], params[1], .int_to_ptr), - .int_to_enum => return typeCast(gz, scope, ri, node, params[0], params[1], .int_to_enum), + .int_from_float => return typeCast(gz, scope, ri, node, params[0], params[1], .int_from_float), + .float_from_int => return typeCast(gz, scope, ri, node, params[0], params[1], .float_from_int), + .ptr_from_int => return typeCast(gz, scope, ri, node, params[0], params[1], .ptr_from_int), + .enum_from_int => return typeCast(gz, scope, ri, node, params[0], params[1], .enum_from_int), .float_cast => return typeCast(gz, scope, ri, node, params[0], params[1], .float_cast), .int_cast => return typeCast(gz, scope, ri, node, params[0], params[1], .int_cast), .ptr_cast => return typeCast(gz, scope, ri, node, params[0], params[1], .ptr_cast), @@ -8352,17 +8352,17 @@ fn builtinCall( _ = try gz.addNode(.trap, node); return rvalue(gz, ri, .unreachable_value, node); }, - .error_to_int => { + .int_from_error => { const operand = try expr(gz, scope, .{ .rl = .none }, params[0]); - const result = try gz.addExtendedPayload(.error_to_int, Zir.Inst.UnNode{ + const result = try gz.addExtendedPayload(.int_from_error, Zir.Inst.UnNode{ .node = gz.nodeIndexToRelative(node), .operand = operand, }); return rvalue(gz, ri, result, node); }, - .int_to_error => { + .error_from_int => { const operand = try expr(gz, scope, .{ .rl = .{ .coerced_ty = .u16_type } }, params[0]); - const result = try gz.addExtendedPayload(.int_to_error, Zir.Inst.UnNode{ + const result = try gz.addExtendedPayload(.error_from_int, Zir.Inst.UnNode{ .node = gz.nodeIndexToRelative(node), .operand = operand, }); @@ -8769,7 +8769,7 @@ fn simpleUnOp( else try expr(gz, scope, operand_ri, operand_node); switch (tag) { - .tag_name, .error_name, .ptr_to_int => try emitDbgStmt(gz, cursor), + .tag_name, .error_name, .int_from_ptr => try emitDbgStmt(gz, cursor), else => {}, } const result = try gz.addUnNode(tag, operand, node); diff --git a/src/Autodoc.zig b/src/Autodoc.zig index ce4665f1ea..e3580483fb 100644 --- a/src/Autodoc.zig +++ b/src/Autodoc.zig @@ -1473,7 +1473,7 @@ fn walkInstruction( // builtin functions .align_of, - .bool_to_int, + .int_from_bool, .embed_file, .error_name, .panic, @@ -1496,7 +1496,7 @@ fn walkInstruction( .type_name, .frame_type, .frame_size, - .ptr_to_int, + .int_from_ptr, .bit_not, // @check .clz, @@ -1521,10 +1521,10 @@ fn walkInstruction( }; }, - .float_to_int, - .int_to_float, - .int_to_ptr, - .int_to_enum, + .int_from_float, + .float_from_int, + .ptr_from_int, + .enum_from_int, .float_cast, .int_cast, .ptr_cast, @@ -1936,7 +1936,7 @@ fn walkInstruction( .expr = .{ .bitSizeOf = operand_index }, }; }, - .enum_to_int => { + .int_from_enum => { // not working correctly with `align()` const un_node = data[inst_index].un_node; const operand = try self.walkRef( @@ -3021,8 +3021,8 @@ fn walkInstruction( }, }; }, - .error_to_int, - .int_to_error, + .int_from_error, + .error_from_int, .reify, .const_cast, .volatile_cast, diff --git a/src/BuiltinFn.zig b/src/BuiltinFn.zig index 426939afdf..27b963f528 100644 --- a/src/BuiltinFn.zig +++ b/src/BuiltinFn.zig @@ -12,7 +12,7 @@ pub const Tag = enum { atomic_store, bit_cast, bit_offset_of, - bool_to_int, + int_from_bool, bit_size_of, breakpoint, mul_add, @@ -39,10 +39,10 @@ pub const Tag = enum { div_floor, div_trunc, embed_file, - enum_to_int, + int_from_enum, error_name, error_return_trace, - error_to_int, + int_from_error, err_set_cast, @"export", @"extern", @@ -50,7 +50,7 @@ pub const Tag = enum { field, field_parent_ptr, float_cast, - float_to_int, + int_from_float, frame, Frame, frame_address, @@ -60,10 +60,10 @@ pub const Tag = enum { import, in_comptime, int_cast, - int_to_enum, - int_to_error, - int_to_float, - int_to_ptr, + enum_from_int, + error_from_int, + float_from_int, + ptr_from_int, max, memcpy, memset, @@ -76,7 +76,7 @@ pub const Tag = enum { pop_count, prefetch, ptr_cast, - ptr_to_int, + int_from_ptr, rem, return_address, select, @@ -238,9 +238,9 @@ pub const list = list: { }, }, .{ - "@boolToInt", + "@intFromBool", .{ - .tag = .bool_to_int, + .tag = .int_from_bool, .param_count = 1, }, }, @@ -425,9 +425,9 @@ pub const list = list: { }, }, .{ - "@enumToInt", + "@intFromEnum", .{ - .tag = .enum_to_int, + .tag = .int_from_enum, .param_count = 1, }, }, @@ -446,9 +446,9 @@ pub const list = list: { }, }, .{ - "@errorToInt", + "@intFromError", .{ - .tag = .error_to_int, + .tag = .int_from_error, .param_count = 1, }, }, @@ -506,9 +506,9 @@ pub const list = list: { }, }, .{ - "@floatToInt", + "@intFromFloat", .{ - .tag = .float_to_int, + .tag = .int_from_float, .param_count = 2, }, }, @@ -576,31 +576,31 @@ pub const list = list: { }, }, .{ - "@intToEnum", + "@enumFromInt", .{ - .tag = .int_to_enum, + .tag = .enum_from_int, .param_count = 2, }, }, .{ - "@intToError", + "@errorFromInt", .{ - .tag = .int_to_error, + .tag = .error_from_int, .eval_to_error = .always, .param_count = 1, }, }, .{ - "@intToFloat", + "@floatFromInt", .{ - .tag = .int_to_float, + .tag = .float_from_int, .param_count = 2, }, }, .{ - "@intToPtr", + "@ptrFromInt", .{ - .tag = .int_to_ptr, + .tag = .ptr_from_int, .param_count = 2, }, }, @@ -689,9 +689,9 @@ pub const list = list: { }, }, .{ - "@ptrToInt", + "@intFromPtr", .{ - .tag = .ptr_to_int, + .tag = .int_from_ptr, .param_count = 1, }, }, diff --git a/src/Liveness.zig b/src/Liveness.zig index b12b638208..ea922b1a8d 100644 --- a/src/Liveness.zig +++ b/src/Liveness.zig @@ -371,9 +371,9 @@ pub fn categorizeOperand( .struct_field_ptr_index_2, .struct_field_ptr_index_3, .array_to_slice, - .float_to_int, - .float_to_int_optimized, - .int_to_float, + .int_from_float, + .int_from_float_optimized, + .float_from_int, .get_union_tag, .clz, .ctz, @@ -407,8 +407,8 @@ pub fn categorizeOperand( .is_non_err, .is_err_ptr, .is_non_err_ptr, - .ptrtoint, - .bool_to_int, + .int_from_ptr, + .int_from_bool, .is_named_enum_value, .tag_name, .error_name, @@ -1007,9 +1007,9 @@ fn analyzeInst( .struct_field_ptr_index_2, .struct_field_ptr_index_3, .array_to_slice, - .float_to_int, - .float_to_int_optimized, - .int_to_float, + .int_from_float, + .int_from_float_optimized, + .float_from_int, .get_union_tag, .clz, .ctz, @@ -1034,8 +1034,8 @@ fn analyzeInst( .is_non_err, .is_err_ptr, .is_non_err_ptr, - .ptrtoint, - .bool_to_int, + .int_from_ptr, + .int_from_bool, .is_named_enum_value, .tag_name, .error_name, diff --git a/src/Liveness/Verify.zig b/src/Liveness/Verify.zig index a5fc592894..904e380073 100644 --- a/src/Liveness/Verify.zig +++ b/src/Liveness/Verify.zig @@ -97,9 +97,9 @@ fn verifyBody(self: *Verify, body: []const Air.Inst.Index) Error!void { .struct_field_ptr_index_2, .struct_field_ptr_index_3, .array_to_slice, - .float_to_int, - .float_to_int_optimized, - .int_to_float, + .int_from_float, + .int_from_float_optimized, + .float_from_int, .get_union_tag, .clz, .ctz, @@ -123,8 +123,8 @@ fn verifyBody(self: *Verify, body: []const Air.Inst.Index) Error!void { .is_non_err, .is_err_ptr, .is_non_err_ptr, - .ptrtoint, - .bool_to_int, + .int_from_ptr, + .int_from_bool, .is_named_enum_value, .tag_name, .error_name, diff --git a/src/Sema.zig b/src/Sema.zig index 36fe5a6ee8..c7115409e6 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -961,8 +961,8 @@ fn analyzeBodyInner( .elem_val_node => try sema.zirElemValNode(block, inst), .elem_type_index => try sema.zirElemTypeIndex(block, inst), .enum_literal => try sema.zirEnumLiteral(block, inst), - .enum_to_int => try sema.zirEnumToInt(block, inst), - .int_to_enum => try sema.zirIntToEnum(block, inst), + .int_from_enum => try sema.zirIntFromEnum(block, inst), + .enum_from_int => try sema.zirEnumFromInt(block, inst), .err_union_code => try sema.zirErrUnionCode(block, inst), .err_union_code_ptr => try sema.zirErrUnionCodePtr(block, inst), .err_union_payload_unsafe => try sema.zirErrUnionPayload(block, inst), @@ -1028,18 +1028,18 @@ fn analyzeBodyInner( .union_init => try sema.zirUnionInit(block, inst), .field_type => try sema.zirFieldType(block, inst), .field_type_ref => try sema.zirFieldTypeRef(block, inst), - .ptr_to_int => try sema.zirPtrToInt(block, inst), + .int_from_ptr => try sema.zirIntFromPtr(block, inst), .align_of => try sema.zirAlignOf(block, inst), - .bool_to_int => try sema.zirBoolToInt(block, inst), + .int_from_bool => try sema.zirIntFromBool(block, inst), .embed_file => try sema.zirEmbedFile(block, inst), .error_name => try sema.zirErrorName(block, inst), .tag_name => try sema.zirTagName(block, inst), .type_name => try sema.zirTypeName(block, inst), .frame_type => try sema.zirFrameType(block, inst), .frame_size => try sema.zirFrameSize(block, inst), - .float_to_int => try sema.zirFloatToInt(block, inst), - .int_to_float => try sema.zirIntToFloat(block, inst), - .int_to_ptr => try sema.zirIntToPtr(block, inst), + .int_from_float => try sema.zirIntFromFloat(block, inst), + .float_from_int => try sema.zirFloatFromInt(block, inst), + .ptr_from_int => try sema.zirPtrFromInt(block, inst), .float_cast => try sema.zirFloatCast(block, inst), .int_cast => try sema.zirIntCast(block, inst), .ptr_cast => try sema.zirPtrCast(block, inst), @@ -1167,8 +1167,8 @@ fn analyzeBodyInner( .err_set_cast => try sema.zirErrSetCast( block, extended), .await_nosuspend => try sema.zirAwaitNosuspend( block, extended), .select => try sema.zirSelect( block, extended), - .error_to_int => try sema.zirErrorToInt( block, extended), - .int_to_error => try sema.zirIntToError( block, extended), + .int_from_error => try sema.zirIntFromError( block, extended), + .error_from_int => try sema.zirErrorFromInt( block, extended), .reify => try sema.zirReify( block, extended, inst), .builtin_async_call => try sema.zirBuiltinAsyncCall( block, extended), .cmpxchg => try sema.zirCmpxchg( block, extended), @@ -8116,7 +8116,7 @@ fn zirErrorValue(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError! } })).toValue()); } -fn zirErrorToInt(sema: *Sema, block: *Block, extended: Zir.Inst.Extended.InstData) CompileError!Air.Inst.Ref { +fn zirIntFromError(sema: *Sema, block: *Block, extended: Zir.Inst.Extended.InstData) CompileError!Air.Inst.Ref { const tracy = trace(@src()); defer tracy.end(); @@ -8156,7 +8156,7 @@ fn zirErrorToInt(sema: *Sema, block: *Block, extended: Zir.Inst.Extended.InstDat return block.addBitCast(Type.err_int, operand); } -fn zirIntToError(sema: *Sema, block: *Block, extended: Zir.Inst.Extended.InstData) CompileError!Air.Inst.Ref { +fn zirErrorFromInt(sema: *Sema, block: *Block, extended: Zir.Inst.Extended.InstData) CompileError!Air.Inst.Ref { const tracy = trace(@src()); defer tracy.end(); @@ -8258,7 +8258,7 @@ fn zirEnumLiteral(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError })).toValue()); } -fn zirEnumToInt(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref { +fn zirIntFromEnum(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref { const mod = sema.mod; const inst_data = sema.code.instructions.items(.data)[inst].un_node; const src = inst_data.src(); @@ -8303,7 +8303,7 @@ fn zirEnumToInt(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!A return block.addBitCast(int_tag_ty, enum_tag); } -fn zirIntToEnum(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref { +fn zirEnumFromInt(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref { const mod = sema.mod; const inst_data = sema.code.instructions.items(.data)[inst].pl_node; const extra = sema.code.extraData(Zir.Inst.Bin, inst_data.payload_index).data; @@ -9518,7 +9518,7 @@ fn analyzeAs( }; } -fn zirPtrToInt(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref { +fn zirIntFromPtr(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref { const tracy = trace(@src()); defer tracy.end(); @@ -9537,7 +9537,7 @@ fn zirPtrToInt(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai ); } try sema.requireRuntimeBlock(block, inst_data.src(), ptr_src); - return block.addUnOp(.ptrtoint, ptr); + return block.addUnOp(.int_from_ptr, ptr); } fn zirFieldVal(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref { @@ -19426,7 +19426,7 @@ fn zirAlignOf(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air return sema.addConstant(Type.comptime_int, val); } -fn zirBoolToInt(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref { +fn zirIntFromBool(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref { const mod = sema.mod; const inst_data = sema.code.instructions.items(.data)[inst].un_node; const operand = try sema.resolveInst(inst_data.operand); @@ -19435,7 +19435,7 @@ fn zirBoolToInt(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!A if (val.toBool()) return sema.addConstant(Type.u1, try mod.intValue(Type.u1, 1)); return sema.addConstant(Type.u1, try mod.intValue(Type.u1, 0)); } - return block.addUnOp(.bool_to_int, operand); + return block.addUnOp(.int_from_bool, operand); } fn zirErrorName(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref { @@ -20748,7 +20748,7 @@ fn zirFrameSize(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!A return sema.failWithUseOfAsync(block, src); } -fn zirFloatToInt(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref { +fn zirIntFromFloat(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref { const mod = sema.mod; const inst_data = sema.code.instructions.items(.data)[inst].pl_node; const extra = sema.code.extraData(Zir.Inst.Bin, inst_data.payload_index).data; @@ -20776,9 +20776,9 @@ fn zirFloatToInt(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError! } return sema.addConstant(dest_ty, try mod.intValue(dest_ty, 0)); } - const result = try block.addTyOp(if (block.float_mode == .Optimized) .float_to_int_optimized else .float_to_int, dest_ty, operand); + const result = try block.addTyOp(if (block.float_mode == .Optimized) .int_from_float_optimized else .int_from_float, dest_ty, operand); if (block.wantSafety()) { - const back = try block.addTyOp(.int_to_float, operand_ty, result); + const back = try block.addTyOp(.float_from_int, operand_ty, result); const diff = try block.addBinOp(.sub, operand, back); const ok_pos = try block.addBinOp(if (block.float_mode == .Optimized) .cmp_lt_optimized else .cmp_lt, diff, try sema.addConstant(operand_ty, try mod.floatValue(operand_ty, 1.0))); const ok_neg = try block.addBinOp(if (block.float_mode == .Optimized) .cmp_gt_optimized else .cmp_gt, diff, try sema.addConstant(operand_ty, try mod.floatValue(operand_ty, -1.0))); @@ -20788,7 +20788,7 @@ fn zirFloatToInt(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError! return result; } -fn zirIntToFloat(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref { +fn zirFloatFromInt(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref { const mod = sema.mod; const inst_data = sema.code.instructions.items(.data)[inst].pl_node; const extra = sema.code.extraData(Zir.Inst.Bin, inst_data.payload_index).data; @@ -20809,10 +20809,10 @@ fn zirIntToFloat(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError! } try sema.requireRuntimeBlock(block, inst_data.src(), operand_src); - return block.addTyOp(.int_to_float, dest_ty, operand); + return block.addTyOp(.float_from_int, dest_ty, operand); } -fn zirIntToPtr(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref { +fn zirPtrFromInt(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref { const mod = sema.mod; const inst_data = sema.code.instructions.items(.data)[inst].pl_node; const src = inst_data.src(); @@ -21084,7 +21084,7 @@ fn zirPtrCast(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air if (block.wantSafety() and operand_ty.ptrAllowsZero(mod) and !dest_ty.ptrAllowsZero(mod) and (try sema.typeHasRuntimeBits(dest_ty.elemType2(mod)) or dest_ty.elemType2(mod).zigTypeTag(mod) == .Fn)) { - const ptr_int = try block.addUnOp(.ptrtoint, ptr); + const ptr_int = try block.addUnOp(.int_from_ptr, ptr); const is_non_zero = try block.addBinOp(.cmp_neq, ptr_int, .zero_usize); const ok = if (operand_is_slice) ok: { const len = try sema.analyzeSliceLen(block, operand_src, operand); @@ -21265,7 +21265,7 @@ fn zirAlignCast(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!A try sema.analyzeSlicePtr(block, ptr_src, ptr, ptr_ty) else ptr; - const ptr_int = try block.addUnOp(.ptrtoint, actual_ptr); + const ptr_int = try block.addUnOp(.int_from_ptr, actual_ptr); const remainder = try block.addBinOp(.bit_and, ptr_int, align_minus_1); const is_aligned = try block.addBinOp(.cmp_eq, remainder, .zero_usize); const ok = if (ptr_ty.isSlice(mod)) ok: { @@ -29504,7 +29504,7 @@ fn coerceCompatiblePtrs( try sema.analyzeSlicePtr(block, inst_src, inst, inst_ty) else inst; - const ptr_int = try block.addUnOp(.ptrtoint, actual_ptr); + const ptr_int = try block.addUnOp(.int_from_ptr, actual_ptr); const is_non_zero = try block.addBinOp(.cmp_neq, ptr_int, .zero_usize); const ok = if (inst_ty.isSlice(mod)) ok: { const len = try sema.analyzeSliceLen(block, inst_src, inst); diff --git a/src/Zir.zig b/src/Zir.zig index 81b02bb469..5b00dc22aa 100644 --- a/src/Zir.zig +++ b/src/Zir.zig @@ -749,9 +749,9 @@ pub const Inst = struct { /// Implements the `@bitSizeOf` builtin. Uses `un_node`. bit_size_of, - /// Implement builtin `@ptrToInt`. Uses `un_node`. + /// Implement builtin `@intFromPtr`. Uses `un_node`. /// Convert a pointer to a `usize` integer. - ptr_to_int, + int_from_ptr, /// Emit an error message and fail compilation. /// Uses the `un_node` field. compile_error, @@ -761,11 +761,11 @@ pub const Inst = struct { set_eval_branch_quota, /// Converts an enum value into an integer. Resulting type will be the tag type /// of the enum. Uses `un_node`. - enum_to_int, + int_from_enum, /// Implement builtin `@alignOf`. Uses `un_node`. align_of, - /// Implement builtin `@boolToInt`. Uses `un_node`. - bool_to_int, + /// Implement builtin `@intFromBool`. Uses `un_node`. + int_from_bool, /// Implement builtin `@embedFile`. Uses `un_node`. embed_file, /// Implement builtin `@errorName`. Uses `un_node`. @@ -814,18 +814,18 @@ pub const Inst = struct { /// Implement builtin `@frameSize`. Uses `un_node`. frame_size, - /// Implements the `@floatToInt` builtin. + /// Implements the `@intFromFloat` builtin. /// Uses `pl_node` with payload `Bin`. `lhs` is dest type, `rhs` is operand. - float_to_int, - /// Implements the `@intToFloat` builtin. + int_from_float, + /// Implements the `@floatFromInt` builtin. /// Uses `pl_node` with payload `Bin`. `lhs` is dest type, `rhs` is operand. - int_to_float, - /// Implements the `@intToPtr` builtin. + float_from_int, + /// Implements the `@ptrFromInt` builtin. /// Uses `pl_node` with payload `Bin`. `lhs` is dest type, `rhs` is operand. - int_to_ptr, + ptr_from_int, /// Converts an integer into an enum value. /// Uses `pl_node` with payload `Bin`. `lhs` is dest type, `rhs` is operand. - int_to_enum, + enum_from_int, /// Convert a larger float type to any other float type, possibly causing /// a loss of precision. /// Uses the `pl_node` field. AST is the `@floatCast` syntax. @@ -1136,14 +1136,14 @@ pub const Inst = struct { .union_init, .field_type, .field_type_ref, - .int_to_enum, - .enum_to_int, + .enum_from_int, + .int_from_enum, .type_info, .size_of, .bit_size_of, - .ptr_to_int, + .int_from_ptr, .align_of, - .bool_to_int, + .int_from_bool, .embed_file, .error_name, .set_runtime_safety, @@ -1165,9 +1165,9 @@ pub const Inst = struct { .type_name, .frame_type, .frame_size, - .float_to_int, - .int_to_float, - .int_to_ptr, + .int_from_float, + .float_from_int, + .ptr_from_int, .float_cast, .int_cast, .ptr_cast, @@ -1419,14 +1419,14 @@ pub const Inst = struct { .union_init, .field_type, .field_type_ref, - .int_to_enum, - .enum_to_int, + .enum_from_int, + .int_from_enum, .type_info, .size_of, .bit_size_of, - .ptr_to_int, + .int_from_ptr, .align_of, - .bool_to_int, + .int_from_bool, .embed_file, .error_name, .sqrt, @@ -1447,9 +1447,9 @@ pub const Inst = struct { .type_name, .frame_type, .frame_size, - .float_to_int, - .int_to_float, - .int_to_ptr, + .int_from_float, + .float_from_int, + .ptr_from_int, .float_cast, .int_cast, .ptr_cast, @@ -1679,12 +1679,12 @@ pub const Inst = struct { .size_of = .un_node, .bit_size_of = .un_node, - .ptr_to_int = .un_node, + .int_from_ptr = .un_node, .compile_error = .un_node, .set_eval_branch_quota = .un_node, - .enum_to_int = .un_node, + .int_from_enum = .un_node, .align_of = .un_node, - .bool_to_int = .un_node, + .int_from_bool = .un_node, .embed_file = .un_node, .error_name = .un_node, .panic = .un_node, @@ -1709,10 +1709,10 @@ pub const Inst = struct { .frame_type = .un_node, .frame_size = .un_node, - .float_to_int = .pl_node, - .int_to_float = .pl_node, - .int_to_ptr = .pl_node, - .int_to_enum = .pl_node, + .int_from_float = .pl_node, + .float_from_int = .pl_node, + .ptr_from_int = .pl_node, + .enum_from_int = .pl_node, .float_cast = .pl_node, .int_cast = .pl_node, .ptr_cast = .pl_node, @@ -1933,10 +1933,10 @@ pub const Inst = struct { select, /// Implement builtin `@errToInt`. /// `operand` is payload index to `UnNode`. - error_to_int, + int_from_error, /// Implement builtin `@intToError`. /// `operand` is payload index to `UnNode`. - int_to_error, + error_from_int, /// Implement builtin `@Type`. /// `operand` is payload index to `UnNode`. /// `small` contains `NameStrategy`. diff --git a/src/arch/aarch64/CodeGen.zig b/src/arch/aarch64/CodeGen.zig index 1355f96231..b93b9b212a 100644 --- a/src/arch/aarch64/CodeGen.zig +++ b/src/arch/aarch64/CodeGen.zig @@ -752,7 +752,7 @@ fn genBody(self: *Self, body: []const Air.Inst.Index) InnerError!void { .fpext => try self.airFpext(inst), .intcast => try self.airIntCast(inst), .trunc => try self.airTrunc(inst), - .bool_to_int => try self.airBoolToInt(inst), + .int_from_bool => try self.airIntFromBool(inst), .is_non_null => try self.airIsNonNull(inst), .is_non_null_ptr => try self.airIsNonNullPtr(inst), .is_null => try self.airIsNull(inst), @@ -764,7 +764,7 @@ fn genBody(self: *Self, body: []const Air.Inst.Index) InnerError!void { .load => try self.airLoad(inst), .loop => try self.airLoop(inst), .not => try self.airNot(inst), - .ptrtoint => try self.airPtrToInt(inst), + .int_from_ptr => try self.airIntFromPtr(inst), .ret => try self.airRet(inst), .ret_load => try self.airRetLoad(inst), .store => try self.airStore(inst, false), @@ -772,8 +772,8 @@ fn genBody(self: *Self, body: []const Air.Inst.Index) InnerError!void { .struct_field_ptr=> try self.airStructFieldPtr(inst), .struct_field_val=> try self.airStructFieldVal(inst), .array_to_slice => try self.airArrayToSlice(inst), - .int_to_float => try self.airIntToFloat(inst), - .float_to_int => try self.airFloatToInt(inst), + .float_from_int => try self.airFloatFromInt(inst), + .int_from_float => try self.airIntFromFloat(inst), .cmpxchg_strong => try self.airCmpxchg(inst), .cmpxchg_weak => try self.airCmpxchg(inst), .atomic_rmw => try self.airAtomicRmw(inst), @@ -885,7 +885,7 @@ fn genBody(self: *Self, body: []const Air.Inst.Index) InnerError!void { .cmp_neq_optimized, .cmp_vector_optimized, .reduce_optimized, - .float_to_int_optimized, + .int_from_float_optimized, => return self.fail("TODO implement optimized float mode", .{}), .is_named_enum_value => return self.fail("TODO implement is_named_enum_value", .{}), @@ -1310,7 +1310,7 @@ fn airTrunc(self: *Self, inst: Air.Inst.Index) !void { return self.finishAir(inst, result, .{ ty_op.operand, .none, .none }); } -fn airBoolToInt(self: *Self, inst: Air.Inst.Index) !void { +fn airIntFromBool(self: *Self, inst: Air.Inst.Index) !void { const un_op = self.air.instructions.items(.data)[inst].un_op; const operand = try self.resolveInst(un_op); const result: MCValue = if (self.liveness.isUnused(inst)) .dead else operand; @@ -5903,7 +5903,7 @@ fn genSetStackArgument(self: *Self, ty: Type, stack_offset: u32, mcv: MCValue) I } } -fn airPtrToInt(self: *Self, inst: Air.Inst.Index) !void { +fn airIntFromPtr(self: *Self, inst: Air.Inst.Index) !void { const un_op = self.air.instructions.items(.data)[inst].un_op; const result = try self.resolveInst(un_op); return self.finishAir(inst, result, .{ un_op, .none, .none }); @@ -5950,17 +5950,17 @@ fn airArrayToSlice(self: *Self, inst: Air.Inst.Index) !void { return self.finishAir(inst, result, .{ ty_op.operand, .none, .none }); } -fn airIntToFloat(self: *Self, inst: Air.Inst.Index) !void { +fn airFloatFromInt(self: *Self, inst: Air.Inst.Index) !void { const ty_op = self.air.instructions.items(.data)[inst].ty_op; - const result: MCValue = if (self.liveness.isUnused(inst)) .dead else return self.fail("TODO implement airIntToFloat for {}", .{ + const result: MCValue = if (self.liveness.isUnused(inst)) .dead else return self.fail("TODO implement airFloatFromInt for {}", .{ self.target.cpu.arch, }); return self.finishAir(inst, result, .{ ty_op.operand, .none, .none }); } -fn airFloatToInt(self: *Self, inst: Air.Inst.Index) !void { +fn airIntFromFloat(self: *Self, inst: Air.Inst.Index) !void { const ty_op = self.air.instructions.items(.data)[inst].ty_op; - const result: MCValue = if (self.liveness.isUnused(inst)) .dead else return self.fail("TODO implement airFloatToInt for {}", .{ + const result: MCValue = if (self.liveness.isUnused(inst)) .dead else return self.fail("TODO implement airIntFromFloat for {}", .{ self.target.cpu.arch, }); return self.finishAir(inst, result, .{ ty_op.operand, .none, .none }); diff --git a/src/arch/arm/CodeGen.zig b/src/arch/arm/CodeGen.zig index a2a5a3d4d3..2ad9a8775c 100644 --- a/src/arch/arm/CodeGen.zig +++ b/src/arch/arm/CodeGen.zig @@ -736,7 +736,7 @@ fn genBody(self: *Self, body: []const Air.Inst.Index) InnerError!void { .fpext => try self.airFpext(inst), .intcast => try self.airIntCast(inst), .trunc => try self.airTrunc(inst), - .bool_to_int => try self.airBoolToInt(inst), + .int_from_bool => try self.airIntFromBool(inst), .is_non_null => try self.airIsNonNull(inst), .is_non_null_ptr => try self.airIsNonNullPtr(inst), .is_null => try self.airIsNull(inst), @@ -748,7 +748,7 @@ fn genBody(self: *Self, body: []const Air.Inst.Index) InnerError!void { .load => try self.airLoad(inst), .loop => try self.airLoop(inst), .not => try self.airNot(inst), - .ptrtoint => try self.airPtrToInt(inst), + .int_from_ptr => try self.airIntFromPtr(inst), .ret => try self.airRet(inst), .ret_load => try self.airRetLoad(inst), .store => try self.airStore(inst, false), @@ -756,8 +756,8 @@ fn genBody(self: *Self, body: []const Air.Inst.Index) InnerError!void { .struct_field_ptr=> try self.airStructFieldPtr(inst), .struct_field_val=> try self.airStructFieldVal(inst), .array_to_slice => try self.airArrayToSlice(inst), - .int_to_float => try self.airIntToFloat(inst), - .float_to_int => try self.airFloatToInt(inst), + .float_from_int => try self.airFloatFromInt(inst), + .int_from_float => try self.airIntFromFloat(inst), .cmpxchg_strong => try self.airCmpxchg(inst), .cmpxchg_weak => try self.airCmpxchg(inst), .atomic_rmw => try self.airAtomicRmw(inst), @@ -869,7 +869,7 @@ fn genBody(self: *Self, body: []const Air.Inst.Index) InnerError!void { .cmp_neq_optimized, .cmp_vector_optimized, .reduce_optimized, - .float_to_int_optimized, + .int_from_float_optimized, => return self.fail("TODO implement optimized float mode", .{}), .is_named_enum_value => return self.fail("TODO implement is_named_enum_value", .{}), @@ -1269,7 +1269,7 @@ fn airTrunc(self: *Self, inst: Air.Inst.Index) !void { return self.finishAir(inst, result, .{ ty_op.operand, .none, .none }); } -fn airBoolToInt(self: *Self, inst: Air.Inst.Index) !void { +fn airIntFromBool(self: *Self, inst: Air.Inst.Index) !void { const un_op = self.air.instructions.items(.data)[inst].un_op; const operand = try self.resolveInst(un_op); const result: MCValue = if (self.liveness.isUnused(inst)) .dead else operand; @@ -5857,7 +5857,7 @@ fn genSetStackArgument(self: *Self, ty: Type, stack_offset: u32, mcv: MCValue) I } } -fn airPtrToInt(self: *Self, inst: Air.Inst.Index) !void { +fn airIntFromPtr(self: *Self, inst: Air.Inst.Index) !void { const un_op = self.air.instructions.items(.data)[inst].un_op; const result = try self.resolveInst(un_op); return self.finishAir(inst, result, .{ un_op, .none, .none }); @@ -5903,17 +5903,17 @@ fn airArrayToSlice(self: *Self, inst: Air.Inst.Index) !void { return self.finishAir(inst, result, .{ ty_op.operand, .none, .none }); } -fn airIntToFloat(self: *Self, inst: Air.Inst.Index) !void { +fn airFloatFromInt(self: *Self, inst: Air.Inst.Index) !void { const ty_op = self.air.instructions.items(.data)[inst].ty_op; - const result: MCValue = if (self.liveness.isUnused(inst)) .dead else return self.fail("TODO implement airIntToFloat for {}", .{ + const result: MCValue = if (self.liveness.isUnused(inst)) .dead else return self.fail("TODO implement airFloatFromInt for {}", .{ self.target.cpu.arch, }); return self.finishAir(inst, result, .{ ty_op.operand, .none, .none }); } -fn airFloatToInt(self: *Self, inst: Air.Inst.Index) !void { +fn airIntFromFloat(self: *Self, inst: Air.Inst.Index) !void { const ty_op = self.air.instructions.items(.data)[inst].ty_op; - const result: MCValue = if (self.liveness.isUnused(inst)) .dead else return self.fail("TODO implement airFloatToInt for {}", .{ + const result: MCValue = if (self.liveness.isUnused(inst)) .dead else return self.fail("TODO implement airIntFromFloat for {}", .{ self.target.cpu.arch, }); return self.finishAir(inst, result, .{ ty_op.operand, .none, .none }); diff --git a/src/arch/riscv64/CodeGen.zig b/src/arch/riscv64/CodeGen.zig index c6ac3255c6..57383b3043 100644 --- a/src/arch/riscv64/CodeGen.zig +++ b/src/arch/riscv64/CodeGen.zig @@ -566,7 +566,7 @@ fn genBody(self: *Self, body: []const Air.Inst.Index) InnerError!void { .fpext => try self.airFpext(inst), .intcast => try self.airIntCast(inst), .trunc => try self.airTrunc(inst), - .bool_to_int => try self.airBoolToInt(inst), + .int_from_bool => try self.airIntFromBool(inst), .is_non_null => try self.airIsNonNull(inst), .is_non_null_ptr => try self.airIsNonNullPtr(inst), .is_null => try self.airIsNull(inst), @@ -578,7 +578,7 @@ fn genBody(self: *Self, body: []const Air.Inst.Index) InnerError!void { .load => try self.airLoad(inst), .loop => try self.airLoop(inst), .not => try self.airNot(inst), - .ptrtoint => try self.airPtrToInt(inst), + .int_from_ptr => try self.airIntFromPtr(inst), .ret => try self.airRet(inst), .ret_load => try self.airRetLoad(inst), .store => try self.airStore(inst, false), @@ -586,8 +586,8 @@ fn genBody(self: *Self, body: []const Air.Inst.Index) InnerError!void { .struct_field_ptr=> try self.airStructFieldPtr(inst), .struct_field_val=> try self.airStructFieldVal(inst), .array_to_slice => try self.airArrayToSlice(inst), - .int_to_float => try self.airIntToFloat(inst), - .float_to_int => try self.airFloatToInt(inst), + .float_from_int => try self.airFloatFromInt(inst), + .int_from_float => try self.airIntFromFloat(inst), .cmpxchg_strong => try self.airCmpxchg(inst), .cmpxchg_weak => try self.airCmpxchg(inst), .atomic_rmw => try self.airAtomicRmw(inst), @@ -699,7 +699,7 @@ fn genBody(self: *Self, body: []const Air.Inst.Index) InnerError!void { .cmp_neq_optimized, .cmp_vector_optimized, .reduce_optimized, - .float_to_int_optimized, + .int_from_float_optimized, => return self.fail("TODO implement optimized float mode", .{}), .is_named_enum_value => return self.fail("TODO implement is_named_enum_value", .{}), @@ -920,7 +920,7 @@ fn airTrunc(self: *Self, inst: Air.Inst.Index) !void { // return self.finishAir(inst, result, .{ ty_op.operand, .none, .none }); } -fn airBoolToInt(self: *Self, inst: Air.Inst.Index) !void { +fn airIntFromBool(self: *Self, inst: Air.Inst.Index) !void { const un_op = self.air.instructions.items(.data)[inst].un_op; const operand = try self.resolveInst(un_op); const result: MCValue = if (self.liveness.isUnused(inst)) .dead else operand; @@ -2361,7 +2361,7 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void } } -fn airPtrToInt(self: *Self, inst: Air.Inst.Index) !void { +fn airIntFromPtr(self: *Self, inst: Air.Inst.Index) !void { const un_op = self.air.instructions.items(.data)[inst].un_op; const result = try self.resolveInst(un_op); return self.finishAir(inst, result, .{ un_op, .none, .none }); @@ -2394,17 +2394,17 @@ fn airArrayToSlice(self: *Self, inst: Air.Inst.Index) !void { return self.finishAir(inst, result, .{ ty_op.operand, .none, .none }); } -fn airIntToFloat(self: *Self, inst: Air.Inst.Index) !void { +fn airFloatFromInt(self: *Self, inst: Air.Inst.Index) !void { const ty_op = self.air.instructions.items(.data)[inst].ty_op; - const result: MCValue = if (self.liveness.isUnused(inst)) .dead else return self.fail("TODO implement airIntToFloat for {}", .{ + const result: MCValue = if (self.liveness.isUnused(inst)) .dead else return self.fail("TODO implement airFloatFromInt for {}", .{ self.target.cpu.arch, }); return self.finishAir(inst, result, .{ ty_op.operand, .none, .none }); } -fn airFloatToInt(self: *Self, inst: Air.Inst.Index) !void { +fn airIntFromFloat(self: *Self, inst: Air.Inst.Index) !void { const ty_op = self.air.instructions.items(.data)[inst].ty_op; - const result: MCValue = if (self.liveness.isUnused(inst)) .dead else return self.fail("TODO implement airFloatToInt for {}", .{ + const result: MCValue = if (self.liveness.isUnused(inst)) .dead else return self.fail("TODO implement airIntFromFloat for {}", .{ self.target.cpu.arch, }); return self.finishAir(inst, result, .{ ty_op.operand, .none, .none }); diff --git a/src/arch/sparc64/CodeGen.zig b/src/arch/sparc64/CodeGen.zig index e339794fd4..97bb2f8ab1 100644 --- a/src/arch/sparc64/CodeGen.zig +++ b/src/arch/sparc64/CodeGen.zig @@ -583,7 +583,7 @@ fn genBody(self: *Self, body: []const Air.Inst.Index) InnerError!void { .fpext => @panic("TODO try self.airFpext(inst)"), .intcast => try self.airIntCast(inst), .trunc => try self.airTrunc(inst), - .bool_to_int => try self.airBoolToInt(inst), + .int_from_bool => try self.airIntFromBool(inst), .is_non_null => try self.airIsNonNull(inst), .is_non_null_ptr => @panic("TODO try self.airIsNonNullPtr(inst)"), .is_null => try self.airIsNull(inst), @@ -595,7 +595,7 @@ fn genBody(self: *Self, body: []const Air.Inst.Index) InnerError!void { .load => try self.airLoad(inst), .loop => try self.airLoop(inst), .not => try self.airNot(inst), - .ptrtoint => try self.airPtrToInt(inst), + .int_from_ptr => try self.airIntFromPtr(inst), .ret => try self.airRet(inst), .ret_load => try self.airRetLoad(inst), .store => try self.airStore(inst, false), @@ -603,8 +603,8 @@ fn genBody(self: *Self, body: []const Air.Inst.Index) InnerError!void { .struct_field_ptr=> try self.airStructFieldPtr(inst), .struct_field_val=> try self.airStructFieldVal(inst), .array_to_slice => try self.airArrayToSlice(inst), - .int_to_float => try self.airIntToFloat(inst), - .float_to_int => try self.airFloatToInt(inst), + .float_from_int => try self.airFloatFromInt(inst), + .int_from_float => try self.airIntFromFloat(inst), .cmpxchg_strong, .cmpxchg_weak, => try self.airCmpxchg(inst), @@ -717,7 +717,7 @@ fn genBody(self: *Self, body: []const Air.Inst.Index) InnerError!void { .cmp_neq_optimized, .cmp_vector_optimized, .reduce_optimized, - .float_to_int_optimized, + .int_from_float_optimized, => @panic("TODO implement optimized float mode"), .is_named_enum_value => @panic("TODO implement is_named_enum_value"), @@ -1078,7 +1078,7 @@ fn airBinOp(self: *Self, inst: Air.Inst.Index, tag: Air.Inst.Tag) !void { return self.finishAir(inst, result, .{ bin_op.lhs, bin_op.rhs, .none }); } -fn airBoolToInt(self: *Self, inst: Air.Inst.Index) !void { +fn airIntFromBool(self: *Self, inst: Air.Inst.Index) !void { const un_op = self.air.instructions.items(.data)[inst].un_op; const operand = try self.resolveInst(un_op); const result: MCValue = if (self.liveness.isUnused(inst)) .dead else operand; @@ -1736,9 +1736,9 @@ fn airFence(self: *Self, inst: Air.Inst.Index) !void { return self.finishAir(inst, .dead, .{ .none, .none, .none }); } -fn airFloatToInt(self: *Self, inst: Air.Inst.Index) !void { +fn airIntFromFloat(self: *Self, inst: Air.Inst.Index) !void { const ty_op = self.air.instructions.items(.data)[inst].ty_op; - const result: MCValue = if (self.liveness.isUnused(inst)) .dead else return self.fail("TODO implement airFloatToInt for {}", .{ + const result: MCValue = if (self.liveness.isUnused(inst)) .dead else return self.fail("TODO implement airIntFromFloat for {}", .{ self.target.cpu.arch, }); return self.finishAir(inst, result, .{ ty_op.operand, .none, .none }); @@ -1769,9 +1769,9 @@ fn airIntCast(self: *Self, inst: Air.Inst.Index) !void { return self.fail("TODO implement intCast for {}", .{self.target.cpu.arch}); } -fn airIntToFloat(self: *Self, inst: Air.Inst.Index) !void { +fn airFloatFromInt(self: *Self, inst: Air.Inst.Index) !void { const ty_op = self.air.instructions.items(.data)[inst].ty_op; - const result: MCValue = if (self.liveness.isUnused(inst)) .dead else return self.fail("TODO implement airIntToFloat for {}", .{ + const result: MCValue = if (self.liveness.isUnused(inst)) .dead else return self.fail("TODO implement airFloatFromInt for {}", .{ self.target.cpu.arch, }); return self.finishAir(inst, result, .{ ty_op.operand, .none, .none }); @@ -2276,7 +2276,7 @@ fn airPtrSlicePtrPtr(self: *Self, inst: Air.Inst.Index) !void { return self.finishAir(inst, result, .{ ty_op.operand, .none, .none }); } -fn airPtrToInt(self: *Self, inst: Air.Inst.Index) !void { +fn airIntFromPtr(self: *Self, inst: Air.Inst.Index) !void { const un_op = self.air.instructions.items(.data)[inst].un_op; const result = try self.resolveInst(un_op); return self.finishAir(inst, result, .{ un_op, .none, .none }); diff --git a/src/arch/wasm/CodeGen.zig b/src/arch/wasm/CodeGen.zig index 495ca7f6dd..4c92b093ae 100644 --- a/src/arch/wasm/CodeGen.zig +++ b/src/arch/wasm/CodeGen.zig @@ -1902,13 +1902,13 @@ fn genInst(func: *CodeGen, inst: Air.Inst.Index) InnerError!void { .trap => func.airTrap(inst), .breakpoint => func.airBreakpoint(inst), .br => func.airBr(inst), - .bool_to_int => func.airBoolToInt(inst), + .int_from_bool => func.airIntFromBool(inst), .cond_br => func.airCondBr(inst), .intcast => func.airIntcast(inst), .fptrunc => func.airFptrunc(inst), .fpext => func.airFpext(inst), - .float_to_int => func.airFloatToInt(inst), - .int_to_float => func.airIntToFloat(inst), + .int_from_float => func.airIntFromFloat(inst), + .float_from_int => func.airFloatFromInt(inst), .get_union_tag => func.airGetUnionTag(inst), .@"try" => func.airTry(inst), @@ -1951,7 +1951,7 @@ fn genInst(func: *CodeGen, inst: Air.Inst.Index) InnerError!void { .ptr_sub => func.airPtrBinOp(inst, .sub), .ptr_elem_ptr => func.airPtrElemPtr(inst), .ptr_elem_val => func.airPtrElemVal(inst), - .ptrtoint => func.airPtrToInt(inst), + .int_from_ptr => func.airIntFromPtr(inst), .ret => func.airRet(inst), .ret_ptr => func.airRetPtr(inst), .ret_load => func.airRetLoad(inst), @@ -2061,7 +2061,7 @@ fn genInst(func: *CodeGen, inst: Air.Inst.Index) InnerError!void { .cmp_neq_optimized, .cmp_vector_optimized, .reduce_optimized, - .float_to_int_optimized, + .int_from_float_optimized, => return func.fail("TODO implement optimized float mode", .{}), .work_item_id, @@ -4480,7 +4480,7 @@ fn trunc(func: *CodeGen, operand: WValue, wanted_ty: Type, given_ty: Type) Inner return result; } -fn airBoolToInt(func: *CodeGen, inst: Air.Inst.Index) InnerError!void { +fn airIntFromBool(func: *CodeGen, inst: Air.Inst.Index) InnerError!void { const un_op = func.air.instructions.items(.data)[inst].un_op; const operand = try func.resolveInst(un_op); const result = func.reuseOperand(un_op, operand); @@ -4511,7 +4511,7 @@ fn airArrayToSlice(func: *CodeGen, inst: Air.Inst.Index) InnerError!void { func.finishAir(inst, slice_local, &.{ty_op.operand}); } -fn airPtrToInt(func: *CodeGen, inst: Air.Inst.Index) InnerError!void { +fn airIntFromPtr(func: *CodeGen, inst: Air.Inst.Index) InnerError!void { const mod = func.bin_file.base.options.module.?; const un_op = func.air.instructions.items(.data)[inst].un_op; const operand = try func.resolveInst(un_op); @@ -4812,7 +4812,7 @@ fn airArrayElemVal(func: *CodeGen, inst: Air.Inst.Index) InnerError!void { func.finishAir(inst, elem_result, &.{ bin_op.lhs, bin_op.rhs }); } -fn airFloatToInt(func: *CodeGen, inst: Air.Inst.Index) InnerError!void { +fn airIntFromFloat(func: *CodeGen, inst: Air.Inst.Index) InnerError!void { const mod = func.bin_file.base.options.module.?; const ty_op = func.air.instructions.items(.data)[inst].ty_op; @@ -4837,7 +4837,7 @@ fn airFloatToInt(func: *CodeGen, inst: Air.Inst.Index) InnerError!void { func.finishAir(inst, result, &.{ty_op.operand}); } -fn airIntToFloat(func: *CodeGen, inst: Air.Inst.Index) InnerError!void { +fn airFloatFromInt(func: *CodeGen, inst: Air.Inst.Index) InnerError!void { const mod = func.bin_file.base.options.module.?; const ty_op = func.air.instructions.items(.data)[inst].ty_op; diff --git a/src/arch/x86_64/CodeGen.zig b/src/arch/x86_64/CodeGen.zig index a33faecca3..375b72bad5 100644 --- a/src/arch/x86_64/CodeGen.zig +++ b/src/arch/x86_64/CodeGen.zig @@ -1835,7 +1835,7 @@ fn genBody(self: *Self, body: []const Air.Inst.Index) InnerError!void { .fpext => try self.airFpext(inst), .intcast => try self.airIntCast(inst), .trunc => try self.airTrunc(inst), - .bool_to_int => try self.airBoolToInt(inst), + .int_from_bool => try self.airIntFromBool(inst), .is_non_null => try self.airIsNonNull(inst), .is_non_null_ptr => try self.airIsNonNullPtr(inst), .is_null => try self.airIsNull(inst), @@ -1846,7 +1846,7 @@ fn genBody(self: *Self, body: []const Air.Inst.Index) InnerError!void { .is_err_ptr => try self.airIsErrPtr(inst), .load => try self.airLoad(inst), .loop => try self.airLoop(inst), - .ptrtoint => try self.airPtrToInt(inst), + .int_from_ptr => try self.airIntFromPtr(inst), .ret => try self.airRet(inst), .ret_load => try self.airRetLoad(inst), .store => try self.airStore(inst, false), @@ -1854,8 +1854,8 @@ fn genBody(self: *Self, body: []const Air.Inst.Index) InnerError!void { .struct_field_ptr=> try self.airStructFieldPtr(inst), .struct_field_val=> try self.airStructFieldVal(inst), .array_to_slice => try self.airArrayToSlice(inst), - .int_to_float => try self.airIntToFloat(inst), - .float_to_int => try self.airFloatToInt(inst), + .float_from_int => try self.airFloatFromInt(inst), + .int_from_float => try self.airIntFromFloat(inst), .cmpxchg_strong => try self.airCmpxchg(inst), .cmpxchg_weak => try self.airCmpxchg(inst), .atomic_rmw => try self.airAtomicRmw(inst), @@ -1967,7 +1967,7 @@ fn genBody(self: *Self, body: []const Air.Inst.Index) InnerError!void { .cmp_neq_optimized, .cmp_vector_optimized, .reduce_optimized, - .float_to_int_optimized, + .int_from_float_optimized, => return self.fail("TODO implement optimized float mode", .{}), .is_named_enum_value => return self.fail("TODO implement is_named_enum_value", .{}), @@ -2806,7 +2806,7 @@ fn airTrunc(self: *Self, inst: Air.Inst.Index) !void { return self.finishAir(inst, result, .{ ty_op.operand, .none, .none }); } -fn airBoolToInt(self: *Self, inst: Air.Inst.Index) !void { +fn airIntFromBool(self: *Self, inst: Air.Inst.Index) !void { const un_op = self.air.instructions.items(.data)[inst].un_op; const ty = self.typeOfIndex(inst); @@ -10147,7 +10147,7 @@ fn genLazySymbolRef( } } -fn airPtrToInt(self: *Self, inst: Air.Inst.Index) !void { +fn airIntFromPtr(self: *Self, inst: Air.Inst.Index) !void { const un_op = self.air.instructions.items(.data)[inst].un_op; const result = result: { // TODO: handle case where the operand is a slice not a raw pointer @@ -10246,7 +10246,7 @@ fn airArrayToSlice(self: *Self, inst: Air.Inst.Index) !void { return self.finishAir(inst, result, .{ ty_op.operand, .none, .none }); } -fn airIntToFloat(self: *Self, inst: Air.Inst.Index) !void { +fn airFloatFromInt(self: *Self, inst: Air.Inst.Index) !void { const mod = self.bin_file.options.module.?; const ty_op = self.air.instructions.items(.data)[inst].ty_op; @@ -10260,7 +10260,7 @@ fn airIntToFloat(self: *Self, inst: Air.Inst.Index) !void { .signed => src_bits, .unsigned => src_bits + 1, }, 32), 8) catch unreachable; - if (src_size > 8) return self.fail("TODO implement airIntToFloat from {} to {}", .{ + if (src_size > 8) return self.fail("TODO implement airFloatFromInt from {} to {}", .{ src_ty.fmt(mod), dst_ty.fmt(mod), }); @@ -10287,7 +10287,7 @@ fn airIntToFloat(self: *Self, inst: Air.Inst.Index) !void { else => unreachable, }, else => null, - })) |tag| tag else return self.fail("TODO implement airIntToFloat from {} to {}", .{ + })) |tag| tag else return self.fail("TODO implement airFloatFromInt from {} to {}", .{ src_ty.fmt(mod), dst_ty.fmt(mod), }); const dst_alias = dst_reg.to128(); @@ -10300,7 +10300,7 @@ fn airIntToFloat(self: *Self, inst: Air.Inst.Index) !void { return self.finishAir(inst, dst_mcv, .{ ty_op.operand, .none, .none }); } -fn airFloatToInt(self: *Self, inst: Air.Inst.Index) !void { +fn airIntFromFloat(self: *Self, inst: Air.Inst.Index) !void { const mod = self.bin_file.options.module.?; const ty_op = self.air.instructions.items(.data)[inst].ty_op; @@ -10314,7 +10314,7 @@ fn airFloatToInt(self: *Self, inst: Air.Inst.Index) !void { .signed => dst_bits, .unsigned => dst_bits + 1, }, 32), 8) catch unreachable; - if (dst_size > 8) return self.fail("TODO implement airFloatToInt from {} to {}", .{ + if (dst_size > 8) return self.fail("TODO implement airIntFromFloat from {} to {}", .{ src_ty.fmt(self.bin_file.options.module.?), dst_ty.fmt(self.bin_file.options.module.?), }); @@ -10340,7 +10340,7 @@ fn airFloatToInt(self: *Self, inst: Air.Inst.Index) !void { else => unreachable, }, else => null, - })) |tag| tag else return self.fail("TODO implement airFloatToInt from {} to {}", .{ + })) |tag| tag else return self.fail("TODO implement airIntFromFloat from {} to {}", .{ src_ty.fmt(self.bin_file.options.module.?), dst_ty.fmt(self.bin_file.options.module.?), }), registerAlias(dst_reg, dst_size), diff --git a/src/codegen/c.zig b/src/codegen/c.zig index d06f01c2c3..a5110a34b0 100644 --- a/src/codegen/c.zig +++ b/src/codegen/c.zig @@ -2943,7 +2943,7 @@ fn genBodyInner(f: *Function, body: []const Air.Inst.Index) error{ AnalysisFail, .dbg_stmt => try airDbgStmt(f, inst), .intcast => try airIntCast(f, inst), .trunc => try airTrunc(f, inst), - .bool_to_int => try airBoolToInt(f, inst), + .int_from_bool => try airIntFromBool(f, inst), .load => try airLoad(f, inst), .ret => try airRet(f, inst, false), .ret_load => try airRet(f, inst, true), @@ -3000,13 +3000,13 @@ fn genBodyInner(f: *Function, body: []const Air.Inst.Index) error{ AnalysisFail, .call_never_tail => try airCall(f, inst, .never_tail), .call_never_inline => try airCall(f, inst, .never_inline), - .int_to_float, - .float_to_int, + .float_from_int, + .int_from_float, .fptrunc, .fpext, => try airFloatCast(f, inst), - .ptrtoint => try airPtrToInt(f, inst), + .int_from_ptr => try airIntFromPtr(f, inst), .atomic_store_unordered => try airAtomicStore(f, inst, toMemoryOrder(.Unordered)), .atomic_store_monotonic => try airAtomicStore(f, inst, toMemoryOrder(.Monotonic)), @@ -3068,7 +3068,7 @@ fn genBodyInner(f: *Function, body: []const Air.Inst.Index) error{ AnalysisFail, .cmp_neq_optimized, .cmp_vector_optimized, .reduce_optimized, - .float_to_int_optimized, + .int_from_float_optimized, => return f.fail("TODO implement optimized float mode", .{}), .is_named_enum_value => return f.fail("TODO: C backend: implement is_named_enum_value", .{}), @@ -3562,7 +3562,7 @@ fn airTrunc(f: *Function, inst: Air.Inst.Index) !CValue { return local; } -fn airBoolToInt(f: *Function, inst: Air.Inst.Index) !CValue { +fn airIntFromBool(f: *Function, inst: Air.Inst.Index) !CValue { const un_op = f.air.instructions.items(.data)[inst].un_op; const operand = try f.resolveInst(un_op); try reap(f, inst, &.{un_op}); @@ -5834,7 +5834,7 @@ fn airFloatCast(f: *Function, inst: Air.Inst.Index) !CValue { return local; } -fn airPtrToInt(f: *Function, inst: Air.Inst.Index) !CValue { +fn airIntFromPtr(f: *Function, inst: Air.Inst.Index) !CValue { const mod = f.object.dg.module; const un_op = f.air.instructions.items(.data)[inst].un_op; diff --git a/src/codegen/llvm.zig b/src/codegen/llvm.zig index 11cd752000..1868298edb 100644 --- a/src/codegen/llvm.zig +++ b/src/codegen/llvm.zig @@ -4417,7 +4417,7 @@ pub const FuncGen = struct { .ret_ptr => try self.airRetPtr(inst), .arg => try self.airArg(inst), .bitcast => try self.airBitCast(inst), - .bool_to_int => try self.airBoolToInt(inst), + .int_from_bool => try self.airIntFromBool(inst), .block => try self.airBlock(inst), .br => try self.airBr(inst), .switch_br => try self.airSwitchBr(inst), @@ -4432,7 +4432,7 @@ pub const FuncGen = struct { .trunc => try self.airTrunc(inst), .fptrunc => try self.airFptrunc(inst), .fpext => try self.airFpext(inst), - .ptrtoint => try self.airPtrToInt(inst), + .int_from_ptr => try self.airIntFromPtr(inst), .load => try self.airLoad(body[i..]), .loop => try self.airLoop(inst), .not => try self.airNot(inst), @@ -4452,11 +4452,11 @@ pub const FuncGen = struct { .ptr_slice_ptr_ptr => try self.airPtrSliceFieldPtr(inst, 0), .ptr_slice_len_ptr => try self.airPtrSliceFieldPtr(inst, 1), - .float_to_int => try self.airFloatToInt(inst, false), - .float_to_int_optimized => try self.airFloatToInt(inst, true), + .int_from_float => try self.airIntFromFloat(inst, false), + .int_from_float_optimized => try self.airIntFromFloat(inst, true), .array_to_slice => try self.airArrayToSlice(inst), - .int_to_float => try self.airIntToFloat(inst), + .float_from_int => try self.airFloatFromInt(inst), .cmpxchg_weak => try self.airCmpxchg(inst, true), .cmpxchg_strong => try self.airCmpxchg(inst, false), .fence => try self.airFence(inst), @@ -5456,7 +5456,7 @@ pub const FuncGen = struct { return self.builder.buildInsertValue(partial, len, 1, ""); } - fn airIntToFloat(self: *FuncGen, inst: Air.Inst.Index) !?*llvm.Value { + fn airFloatFromInt(self: *FuncGen, inst: Air.Inst.Index) !?*llvm.Value { const mod = self.dg.module; const ty_op = self.air.instructions.items(.data)[inst].ty_op; @@ -5513,7 +5513,7 @@ pub const FuncGen = struct { return self.builder.buildCall(libc_fn.globalGetValueType(), libc_fn, ¶ms, params.len, .C, .Auto, ""); } - fn airFloatToInt(self: *FuncGen, inst: Air.Inst.Index, want_fast_math: bool) !?*llvm.Value { + fn airIntFromFloat(self: *FuncGen, inst: Air.Inst.Index, want_fast_math: bool) !?*llvm.Value { self.builder.setFastMath(want_fast_math); const mod = self.dg.module; @@ -7788,7 +7788,7 @@ pub const FuncGen = struct { } } - fn airPtrToInt(self: *FuncGen, inst: Air.Inst.Index) !?*llvm.Value { + fn airIntFromPtr(self: *FuncGen, inst: Air.Inst.Index) !?*llvm.Value { const un_op = self.air.instructions.items(.data)[inst].un_op; const operand = try self.resolveInst(un_op); const ptr_ty = self.typeOf(un_op); @@ -7922,7 +7922,7 @@ pub const FuncGen = struct { return self.builder.buildBitCast(operand, llvm_dest_ty, ""); } - fn airBoolToInt(self: *FuncGen, inst: Air.Inst.Index) !?*llvm.Value { + fn airIntFromBool(self: *FuncGen, inst: Air.Inst.Index) !?*llvm.Value { const un_op = self.air.instructions.items(.data)[inst].un_op; const operand = try self.resolveInst(un_op); return operand; diff --git a/src/codegen/spirv.zig b/src/codegen/spirv.zig index dc1f23dad4..2e614d90d1 100644 --- a/src/codegen/spirv.zig +++ b/src/codegen/spirv.zig @@ -1721,9 +1721,9 @@ pub const DeclGen = struct { .bitcast => try self.airBitCast(inst), .intcast, .trunc => try self.airIntCast(inst), - .ptrtoint => try self.airPtrToInt(inst), - .int_to_float => try self.airIntToFloat(inst), - .float_to_int => try self.airFloatToInt(inst), + .int_from_ptr => try self.airIntFromPtr(inst), + .float_from_int => try self.airFloatFromInt(inst), + .int_from_float => try self.airIntFromFloat(inst), .not => try self.airNot(inst), .slice_ptr => try self.airSliceField(inst, 0), @@ -2329,7 +2329,7 @@ pub const DeclGen = struct { return result_id; } - fn airPtrToInt(self: *DeclGen, inst: Air.Inst.Index) !?IdRef { + fn airIntFromPtr(self: *DeclGen, inst: Air.Inst.Index) !?IdRef { if (self.liveness.isUnused(inst)) return null; const un_op = self.air.instructions.items(.data)[inst].un_op; @@ -2345,7 +2345,7 @@ pub const DeclGen = struct { return result_id; } - fn airIntToFloat(self: *DeclGen, inst: Air.Inst.Index) !?IdRef { + fn airFloatFromInt(self: *DeclGen, inst: Air.Inst.Index) !?IdRef { if (self.liveness.isUnused(inst)) return null; const ty_op = self.air.instructions.items(.data)[inst].ty_op; @@ -2371,7 +2371,7 @@ pub const DeclGen = struct { return result_id; } - fn airFloatToInt(self: *DeclGen, inst: Air.Inst.Index) !?IdRef { + fn airIntFromFloat(self: *DeclGen, inst: Air.Inst.Index) !?IdRef { if (self.liveness.isUnused(inst)) return null; const ty_op = self.air.instructions.items(.data)[inst].ty_op; diff --git a/src/print_air.zig b/src/print_air.zig index f963ecdd95..ddb63ac17c 100644 --- a/src/print_air.zig +++ b/src/print_air.zig @@ -183,8 +183,8 @@ const Writer = struct { .is_non_err, .is_err_ptr, .is_non_err_ptr, - .ptrtoint, - .bool_to_int, + .int_from_ptr, + .int_from_bool, .ret, .ret_load, .is_named_enum_value, @@ -254,10 +254,10 @@ const Writer = struct { .struct_field_ptr_index_2, .struct_field_ptr_index_3, .array_to_slice, - .int_to_float, + .float_from_int, .splat, - .float_to_int, - .float_to_int_optimized, + .int_from_float, + .int_from_float_optimized, .get_union_tag, .clz, .ctz, diff --git a/src/print_zir.zig b/src/print_zir.zig index 35050f1728..b3359e2e31 100644 --- a/src/print_zir.zig +++ b/src/print_zir.zig @@ -187,12 +187,12 @@ const Writer = struct { .size_of, .bit_size_of, .typeof_log2_int_type, - .ptr_to_int, + .int_from_ptr, .compile_error, .set_eval_branch_quota, - .enum_to_int, + .int_from_enum, .align_of, - .bool_to_int, + .int_from_bool, .embed_file, .error_name, .panic, @@ -321,10 +321,10 @@ const Writer = struct { .merge_error_sets, .bit_and, .bit_or, - .float_to_int, - .int_to_float, - .int_to_ptr, - .int_to_enum, + .int_from_float, + .float_from_int, + .ptr_from_int, + .enum_from_int, .float_cast, .int_cast, .ptr_cast, @@ -502,8 +502,8 @@ const Writer = struct { .set_align_stack, .set_cold, .wasm_memory_size, - .error_to_int, - .int_to_error, + .int_from_error, + .error_from_int, .reify, .c_va_copy, .c_va_end, diff --git a/src/translate_c.zig b/src/translate_c.zig index 67176ff74b..3771795062 100644 --- a/src/translate_c.zig +++ b/src/translate_c.zig @@ -845,7 +845,7 @@ fn visitVarDecl(c: *Context, var_decl: *const clang.VarDecl, mangled_name: ?[]co error.OutOfMemory => |e| return e, }; if (!qualTypeIsBoolean(qual_type) and isBoolRes(init_node.?)) { - init_node = try Tag.bool_to_int.create(c.arena, init_node.?); + init_node = try Tag.int_from_bool.create(c.arena, init_node.?); } else if (init_node.?.tag() == .string_literal and qualTypeIsCharStar(qual_type)) { init_node = try stringLiteralToCharStar(c, init_node.?); } @@ -1753,16 +1753,16 @@ fn transBinaryOperator( const rhs_uncasted = try transExpr(c, scope, stmt.getRHS(), .used); const lhs = if (isBoolRes(lhs_uncasted)) - try Tag.bool_to_int.create(c.arena, lhs_uncasted) + try Tag.int_from_bool.create(c.arena, lhs_uncasted) else if (isPointerDiffExpr) - try Tag.ptr_to_int.create(c.arena, lhs_uncasted) + try Tag.int_from_ptr.create(c.arena, lhs_uncasted) else lhs_uncasted; const rhs = if (isBoolRes(rhs_uncasted)) - try Tag.bool_to_int.create(c.arena, rhs_uncasted) + try Tag.int_from_bool.create(c.arena, rhs_uncasted) else if (isPointerDiffExpr) - try Tag.ptr_to_int.create(c.arena, rhs_uncasted) + try Tag.int_from_ptr.create(c.arena, rhs_uncasted) else rhs_uncasted; @@ -1944,7 +1944,7 @@ fn transDeclStmtOne( else Tag.undefined_literal.init(); if (!qualTypeIsBoolean(qual_type) and isBoolRes(init_node)) { - init_node = try Tag.bool_to_int.create(c.arena, init_node); + init_node = try Tag.int_from_bool.create(c.arena, init_node); } else if (init_node.tag() == .string_literal and qualTypeIsCharStar(qual_type)) { const dst_type_node = try transQualType(c, scope, qual_type, loc); init_node = try removeCVQualifiers(c, dst_type_node, init_node); @@ -2074,11 +2074,11 @@ fn transImplicitCastExpr( return Tag.null_literal.init(); }, .PointerToBoolean => { - // @ptrToInt(val) != 0 + // @intFromPtr(val) != 0 const ptr_node = try transExpr(c, scope, sub_expr, .used); - const ptr_to_int = try Tag.ptr_to_int.create(c.arena, ptr_node); + const int_from_ptr = try Tag.int_from_ptr.create(c.arena, ptr_node); - const ne = try Tag.not_equal.create(c.arena, .{ .lhs = ptr_to_int, .rhs = Tag.zero_literal.init() }); + const ne = try Tag.not_equal.create(c.arena, .{ .lhs = int_from_ptr, .rhs = Tag.zero_literal.init() }); return maybeSuppressResult(c, result_used, ne); }, .IntegralToBoolean, .FloatingToBoolean => { @@ -2334,7 +2334,7 @@ fn transReturnStmt( var rhs = try transExprCoercing(c, scope, val_expr, .used); const return_qt = scope.findBlockReturnType(); if (isBoolRes(rhs) and !qualTypeIsBoolean(return_qt)) { - rhs = try Tag.bool_to_int.create(c.arena, rhs); + rhs = try Tag.int_from_bool.create(c.arena, rhs); } return Tag.@"return".create(c.arena, rhs); } @@ -2493,7 +2493,7 @@ fn transCCast( var src_int_expr = expr; if (isBoolRes(src_int_expr)) { - src_int_expr = try Tag.bool_to_int.create(c.arena, src_int_expr); + src_int_expr = try Tag.int_from_bool.create(c.arena, src_int_expr); return Tag.as.create(c.arena, .{ .lhs = dst_node, .rhs = src_int_expr }); } @@ -2521,34 +2521,34 @@ fn transCCast( return Tag.bit_cast.create(c.arena, .{ .lhs = dst_node, .rhs = expr }); } if (cIsInteger(dst_type) and qualTypeIsPtr(src_type)) { - // @intCast(dest_type, @ptrToInt(val)) - const ptr_to_int = try Tag.ptr_to_int.create(c.arena, expr); - return Tag.int_cast.create(c.arena, .{ .lhs = dst_node, .rhs = ptr_to_int }); + // @intCast(dest_type, @intFromPtr(val)) + const int_from_ptr = try Tag.int_from_ptr.create(c.arena, expr); + return Tag.int_cast.create(c.arena, .{ .lhs = dst_node, .rhs = int_from_ptr }); } if (cIsInteger(src_type) and qualTypeIsPtr(dst_type)) { - // @intToPtr(dest_type, val) - return Tag.int_to_ptr.create(c.arena, .{ .lhs = dst_node, .rhs = expr }); + // @ptrFromInt(dest_type, val) + return Tag.ptr_from_int.create(c.arena, .{ .lhs = dst_node, .rhs = expr }); } if (cIsFloating(src_type) and cIsFloating(dst_type)) { // @floatCast(dest_type, val) return Tag.float_cast.create(c.arena, .{ .lhs = dst_node, .rhs = expr }); } if (cIsFloating(src_type) and !cIsFloating(dst_type)) { - // @floatToInt(dest_type, val) - return Tag.float_to_int.create(c.arena, .{ .lhs = dst_node, .rhs = expr }); + // @intFromFloat(dest_type, val) + return Tag.int_from_float.create(c.arena, .{ .lhs = dst_node, .rhs = expr }); } if (!cIsFloating(src_type) and cIsFloating(dst_type)) { var rhs = expr; - if (qualTypeIsBoolean(src_type)) rhs = try Tag.bool_to_int.create(c.arena, expr); - // @intToFloat(dest_type, val) - return Tag.int_to_float.create(c.arena, .{ .lhs = dst_node, .rhs = rhs }); + if (qualTypeIsBoolean(src_type)) rhs = try Tag.int_from_bool.create(c.arena, expr); + // @floatFromInt(dest_type, val) + return Tag.float_from_int.create(c.arena, .{ .lhs = dst_node, .rhs = rhs }); } if (qualTypeIsBoolean(src_type) and !qualTypeIsBoolean(dst_type)) { - // @boolToInt returns either a comptime_int or a u1 + // @intFromBool returns a u1 // TODO: if dst_type is 1 bit & signed (bitfield) we need @bitCast // instead of @as - const bool_to_int = try Tag.bool_to_int.create(c.arena, expr); - return Tag.as.create(c.arena, .{ .lhs = dst_node, .rhs = bool_to_int }); + const int_from_bool = try Tag.int_from_bool.create(c.arena, expr); + return Tag.as.create(c.arena, .{ .lhs = dst_node, .rhs = int_from_bool }); } // @as(dest_type, val) return Tag.as.create(c.arena, .{ .lhs = dst_node, .rhs = expr }); @@ -3642,7 +3642,7 @@ fn transCallExpr(c: *Context, scope: *Scope, stmt: *const clang.CallExpr, result if (i < param_count) { const param_qt = fn_proto.getParamType(@intCast(c_uint, i)); if (isBoolRes(arg) and cIsNativeInt(param_qt)) { - arg = try Tag.bool_to_int.create(c.arena, arg); + arg = try Tag.int_from_bool.create(c.arena, arg); } else if (arg.tag() == .string_literal and qualTypeIsCharStar(param_qt)) { const loc = @ptrCast(*const clang.Stmt, stmt).getBeginLoc(); const dst_type_node = try transQualType(c, scope, param_qt, loc); @@ -3774,7 +3774,7 @@ fn transUnaryOperator(c: *Context, scope: *Scope, stmt: *const clang.UnaryOperat const sub_expr_node = try transExpr(c, scope, op_expr, .used); const to_negate = if (isBoolRes(sub_expr_node)) blk: { const ty_node = try Tag.type.create(c.arena, "c_int"); - const int_node = try Tag.bool_to_int.create(c.arena, sub_expr_node); + const int_node = try Tag.int_from_bool.create(c.arena, sub_expr_node); break :blk try Tag.as.create(c.arena, .{ .lhs = ty_node, .rhs = int_node }); } else sub_expr_node; return Tag.negate.create(c.arena, to_negate); @@ -4028,8 +4028,8 @@ fn transCreateCompoundAssign( // Casting away const or volatile requires us to use @intToPtr fn removeCVQualifiers(c: *Context, dst_type_node: Node, expr: Node) Error!Node { - const ptr_to_int = try Tag.ptr_to_int.create(c.arena, expr); - return Tag.int_to_ptr.create(c.arena, .{ .lhs = dst_type_node, .rhs = ptr_to_int }); + const int_from_ptr = try Tag.int_from_ptr.create(c.arena, expr); + return Tag.ptr_from_int.create(c.arena, .{ .lhs = dst_type_node, .rhs = int_from_ptr }); } fn transCPtrCast( @@ -4132,12 +4132,12 @@ fn transBinaryConditionalOperator(c: *Context, scope: *Scope, stmt: *const clang const cond_node = try finishBoolExpr(c, &cond_scope.base, cond_expr.getBeginLoc(), ty, cond_ident, .used); var then_body = cond_ident; if (!res_is_bool and isBoolRes(init_node)) { - then_body = try Tag.bool_to_int.create(c.arena, then_body); + then_body = try Tag.int_from_bool.create(c.arena, then_body); } var else_body = try transExpr(c, &block_scope.base, false_expr, .used); if (!res_is_bool and isBoolRes(else_body)) { - else_body = try Tag.bool_to_int.create(c.arena, else_body); + else_body = try Tag.int_from_bool.create(c.arena, else_body); } const if_node = try Tag.@"if".create(c.arena, .{ .cond = cond_node, @@ -4173,12 +4173,12 @@ fn transConditionalOperator(c: *Context, scope: *Scope, stmt: *const clang.Condi var then_body = try transExpr(c, scope, true_expr, used); if (!res_is_bool and isBoolRes(then_body)) { - then_body = try Tag.bool_to_int.create(c.arena, then_body); + then_body = try Tag.int_from_bool.create(c.arena, then_body); } var else_body = try transExpr(c, scope, false_expr, used); if (!res_is_bool and isBoolRes(else_body)) { - else_body = try Tag.bool_to_int.create(c.arena, else_body); + else_body = try Tag.int_from_bool.create(c.arena, else_body); } const if_node = try Tag.@"if".create(c.arena, .{ @@ -4556,7 +4556,7 @@ fn transCreateNodeAssign( const lhs_node = try transExpr(c, scope, lhs, .used); var rhs_node = try transExprCoercing(c, scope, rhs, .used); if (!exprIsBooleanType(lhs) and isBoolRes(rhs_node)) { - rhs_node = try Tag.bool_to_int.create(c.arena, rhs_node); + rhs_node = try Tag.int_from_bool.create(c.arena, rhs_node); } return transCreateNodeInfixOp(c, .assign, lhs_node, rhs_node, .used); } @@ -4574,7 +4574,7 @@ fn transCreateNodeAssign( const tmp = try block_scope.reserveMangledName(c, "tmp"); var rhs_node = try transExpr(c, &block_scope.base, rhs, .used); if (!exprIsBooleanType(lhs) and isBoolRes(rhs_node)) { - rhs_node = try Tag.bool_to_int.create(c.arena, rhs_node); + rhs_node = try Tag.int_from_bool.create(c.arena, rhs_node); } const tmp_decl = try Tag.var_simple.create(c.arena, .{ .name = tmp, .init = rhs_node }); @@ -6092,7 +6092,7 @@ fn macroBoolToInt(c: *Context, node: Node) !Node { return node; } - return Tag.bool_to_int.create(c.arena, node); + return Tag.int_from_bool.create(c.arena, node); } fn macroIntToBool(c: *Context, node: Node) !Node { diff --git a/src/translate_c/ast.zig b/src/translate_c/ast.zig index 443c56a84a..942844ec4e 100644 --- a/src/translate_c/ast.zig +++ b/src/translate_c/ast.zig @@ -128,8 +128,8 @@ pub const Node = extern union { signed_remainder, /// @divTrunc(lhs, rhs) div_trunc, - /// @boolToInt(operand) - bool_to_int, + /// @intFromBool(operand) + int_from_bool, /// @as(lhs, rhs) as, /// @truncate(lhs, rhs) @@ -138,14 +138,14 @@ pub const Node = extern union { bit_cast, /// @floatCast(lhs, rhs) float_cast, - /// @floatToInt(lhs, rhs) - float_to_int, - /// @intToFloat(lhs, rhs) - int_to_float, - /// @intToPtr(lhs, rhs) - int_to_ptr, - /// @ptrToInt(operand) - ptr_to_int, + /// @intFromFloat(lhs, rhs) + int_from_float, + /// @floatFromInt(lhs, rhs) + float_from_int, + /// @ptrFromInt(lhs, rhs) + ptr_from_int, + /// @intFromPtr(operand) + int_from_ptr, /// @alignCast(lhs, rhs) align_cast, /// @ptrCast(lhs, rhs) @@ -263,7 +263,7 @@ pub const Node = extern union { .address_of, .unwrap, .deref, - .ptr_to_int, + .int_from_ptr, .empty_array, .while_true, .if_not_break, @@ -271,7 +271,7 @@ pub const Node = extern union { .block_single, .helpers_sizeof, .std_meta_alignment, - .bool_to_int, + .int_from_bool, .sizeof, .alignof, .typeof, @@ -319,9 +319,9 @@ pub const Node = extern union { .truncate, .bit_cast, .float_cast, - .float_to_int, - .int_to_float, - .int_to_ptr, + .int_from_float, + .float_from_int, + .ptr_from_int, .array_cat, .ellipsis3, .assign, @@ -1355,9 +1355,9 @@ fn renderNode(c: *Context, node: Node) Allocator.Error!NodeIndex { const payload = node.castTag(.div_trunc).?.data; return renderBuiltinCall(c, "@divTrunc", &.{ payload.lhs, payload.rhs }); }, - .bool_to_int => { - const payload = node.castTag(.bool_to_int).?.data; - return renderBuiltinCall(c, "@boolToInt", &.{payload}); + .int_from_bool => { + const payload = node.castTag(.int_from_bool).?.data; + return renderBuiltinCall(c, "@intFromBool", &.{payload}); }, .as => { const payload = node.castTag(.as).?.data; @@ -1375,21 +1375,21 @@ fn renderNode(c: *Context, node: Node) Allocator.Error!NodeIndex { const payload = node.castTag(.float_cast).?.data; return renderBuiltinCall(c, "@floatCast", &.{ payload.lhs, payload.rhs }); }, - .float_to_int => { - const payload = node.castTag(.float_to_int).?.data; - return renderBuiltinCall(c, "@floatToInt", &.{ payload.lhs, payload.rhs }); + .int_from_float => { + const payload = node.castTag(.int_from_float).?.data; + return renderBuiltinCall(c, "@intFromFloat", &.{ payload.lhs, payload.rhs }); }, - .int_to_float => { - const payload = node.castTag(.int_to_float).?.data; - return renderBuiltinCall(c, "@intToFloat", &.{ payload.lhs, payload.rhs }); + .float_from_int => { + const payload = node.castTag(.float_from_int).?.data; + return renderBuiltinCall(c, "@floatFromInt", &.{ payload.lhs, payload.rhs }); }, - .int_to_ptr => { - const payload = node.castTag(.int_to_ptr).?.data; - return renderBuiltinCall(c, "@intToPtr", &.{ payload.lhs, payload.rhs }); + .ptr_from_int => { + const payload = node.castTag(.ptr_from_int).?.data; + return renderBuiltinCall(c, "@ptrFromInt", &.{ payload.lhs, payload.rhs }); }, - .ptr_to_int => { - const payload = node.castTag(.ptr_to_int).?.data; - return renderBuiltinCall(c, "@ptrToInt", &.{payload}); + .int_from_ptr => { + const payload = node.castTag(.int_from_ptr).?.data; + return renderBuiltinCall(c, "@intFromPtr", &.{payload}); }, .align_cast => { const payload = node.castTag(.align_cast).?.data; @@ -2326,13 +2326,13 @@ fn renderNodeGrouped(c: *Context, node: Node) !NodeIndex { .truncate, .bit_cast, .float_cast, - .float_to_int, - .int_to_float, - .int_to_ptr, + .int_from_float, + .float_from_int, + .ptr_from_int, .std_mem_zeroes, .std_math_Log2Int, .log2_int_type, - .ptr_to_int, + .int_from_ptr, .sizeof, .alignof, .typeof, @@ -2371,7 +2371,7 @@ fn renderNodeGrouped(c: *Context, node: Node) !NodeIndex { .call, .array_type, .null_sentinel_array_type, - .bool_to_int, + .int_from_bool, .div_exact, .offset_of, .shuffle, From 50339f595aa6ec96760b1cd9f8d0e0bfc3f167fc Mon Sep 17 00:00:00 2001 From: Eric Joldasov Date: Thu, 15 Jun 2023 13:14:16 +0600 Subject: [PATCH 2/3] all: zig fmt and rename "@XToY" to "@YFromX" Signed-off-by: Eric Joldasov --- CMakeLists.txt | 4 +- build.zig | 2 +- doc/langref.html.in | 150 ++--- lib/compiler_rt.zig | 4 +- lib/compiler_rt/aarch64_outline_atomics.zig | 2 +- lib/compiler_rt/atomics.zig | 22 +- lib/compiler_rt/clear_cache.zig | 2 +- lib/compiler_rt/cmpdf2.zig | 8 +- lib/compiler_rt/cmphf2.zig | 2 +- lib/compiler_rt/cmpsf2.zig | 8 +- lib/compiler_rt/cmptf2.zig | 16 +- lib/compiler_rt/cmpxf2.zig | 2 +- lib/compiler_rt/comparef.zig | 4 +- lib/compiler_rt/divdf3.zig | 4 +- lib/compiler_rt/divsf3.zig | 4 +- lib/compiler_rt/divtf3.zig | 4 +- lib/compiler_rt/divxf3.zig | 2 +- lib/compiler_rt/exp.zig | 8 +- lib/compiler_rt/exp2.zig | 4 +- lib/compiler_rt/fixdfdi.zig | 6 +- lib/compiler_rt/fixdfsi.zig | 6 +- lib/compiler_rt/fixdfti.zig | 6 +- lib/compiler_rt/fixhfdi.zig | 4 +- lib/compiler_rt/fixhfsi.zig | 4 +- lib/compiler_rt/fixhfti.zig | 6 +- lib/compiler_rt/fixsfdi.zig | 6 +- lib/compiler_rt/fixsfsi.zig | 6 +- lib/compiler_rt/fixsfti.zig | 6 +- lib/compiler_rt/fixtfdi.zig | 6 +- lib/compiler_rt/fixtfsi.zig | 6 +- lib/compiler_rt/fixtfti.zig | 6 +- lib/compiler_rt/fixunsdfdi.zig | 6 +- lib/compiler_rt/fixunsdfsi.zig | 6 +- lib/compiler_rt/fixunsdfti.zig | 6 +- lib/compiler_rt/fixunshfdi.zig | 4 +- lib/compiler_rt/fixunshfsi.zig | 4 +- lib/compiler_rt/fixunshfti.zig | 6 +- lib/compiler_rt/fixunssfdi.zig | 6 +- lib/compiler_rt/fixunssfsi.zig | 6 +- lib/compiler_rt/fixunssfti.zig | 6 +- lib/compiler_rt/fixunstfdi.zig | 6 +- lib/compiler_rt/fixunstfsi.zig | 6 +- lib/compiler_rt/fixunstfti.zig | 6 +- lib/compiler_rt/fixunsxfdi.zig | 4 +- lib/compiler_rt/fixunsxfsi.zig | 4 +- lib/compiler_rt/fixunsxfti.zig | 6 +- lib/compiler_rt/fixxfdi.zig | 4 +- lib/compiler_rt/fixxfsi.zig | 4 +- lib/compiler_rt/fixxfti.zig | 6 +- .../{int_to_float.zig => float_from_int.zig} | 6 +- ...float_test.zig => float_from_int_test.zig} | 36 +- lib/compiler_rt/floatdidf.zig | 6 +- lib/compiler_rt/floatdihf.zig | 4 +- lib/compiler_rt/floatdisf.zig | 6 +- lib/compiler_rt/floatditf.zig | 6 +- lib/compiler_rt/floatdixf.zig | 4 +- lib/compiler_rt/floatsidf.zig | 6 +- lib/compiler_rt/floatsihf.zig | 4 +- lib/compiler_rt/floatsisf.zig | 6 +- lib/compiler_rt/floatsitf.zig | 6 +- lib/compiler_rt/floatsixf.zig | 4 +- lib/compiler_rt/floattidf.zig | 6 +- lib/compiler_rt/floattihf.zig | 6 +- lib/compiler_rt/floattisf.zig | 6 +- lib/compiler_rt/floattitf.zig | 6 +- lib/compiler_rt/floattixf.zig | 6 +- lib/compiler_rt/floatundidf.zig | 6 +- lib/compiler_rt/floatundihf.zig | 4 +- lib/compiler_rt/floatundisf.zig | 6 +- lib/compiler_rt/floatunditf.zig | 6 +- lib/compiler_rt/floatundixf.zig | 4 +- lib/compiler_rt/floatunsidf.zig | 6 +- lib/compiler_rt/floatunsihf.zig | 4 +- lib/compiler_rt/floatunsisf.zig | 6 +- lib/compiler_rt/floatunsitf.zig | 6 +- lib/compiler_rt/floatunsixf.zig | 4 +- lib/compiler_rt/floatuntidf.zig | 6 +- lib/compiler_rt/floatuntihf.zig | 6 +- lib/compiler_rt/floatuntisf.zig | 6 +- lib/compiler_rt/floatuntitf.zig | 6 +- lib/compiler_rt/floatuntixf.zig | 6 +- lib/compiler_rt/gedf2.zig | 6 +- lib/compiler_rt/gehf2.zig | 2 +- lib/compiler_rt/gesf2.zig | 6 +- lib/compiler_rt/getf2.zig | 2 +- lib/compiler_rt/gexf2.zig | 2 +- .../{float_to_int.zig => int_from_float.zig} | 4 +- ...o_int_test.zig => int_from_float_test.zig} | 0 lib/compiler_rt/log.zig | 4 +- lib/compiler_rt/log10.zig | 4 +- lib/compiler_rt/log2.zig | 4 +- lib/compiler_rt/memmove.zig | 2 +- lib/compiler_rt/mulf3.zig | 2 +- lib/compiler_rt/os_version_check.zig | 2 +- lib/compiler_rt/paritydi2_test.zig | 2 +- lib/compiler_rt/paritysi2_test.zig | 2 +- lib/compiler_rt/parityti2_test.zig | 2 +- lib/compiler_rt/rem_pio2.zig | 4 +- lib/compiler_rt/rem_pio2_large.zig | 22 +- lib/compiler_rt/rem_pio2f.zig | 2 +- lib/compiler_rt/trig.zig | 2 +- lib/compiler_rt/truncf.zig | 4 +- lib/docs/main.js | 40 +- lib/std/Build/Step/Run.zig | 6 +- lib/std/RingBuffer.zig | 2 +- lib/std/Thread.zig | 36 +- lib/std/Thread/Condition.zig | 2 +- lib/std/Thread/Futex.zig | 16 +- lib/std/array_hash_map.zig | 2 +- lib/std/atomic/Atomic.zig | 6 +- lib/std/atomic/queue.zig | 6 +- lib/std/bit_set.zig | 8 +- lib/std/c.zig | 2 +- lib/std/c/darwin.zig | 62 +- lib/std/c/dragonfly.zig | 16 +- lib/std/c/freebsd.zig | 10 +- lib/std/c/haiku.zig | 8 +- lib/std/c/linux.zig | 2 +- lib/std/c/netbsd.zig | 14 +- lib/std/c/openbsd.zig | 12 +- lib/std/c/solaris.zig | 20 +- lib/std/child_process.zig | 6 +- lib/std/coff.zig | 10 +- .../compress/deflate/huffman_bit_writer.zig | 2 +- lib/std/compress/lzma/decode.zig | 4 +- lib/std/compress/lzma/decode/rangecoder.zig | 6 +- lib/std/compress/xz.zig | 2 +- lib/std/compress/xz/block.zig | 4 +- lib/std/compress/zlib.zig | 2 +- lib/std/compress/zstandard/decode/block.zig | 10 +- lib/std/crypto/25519/edwards25519.zig | 18 +- lib/std/crypto/25519/field.zig | 4 +- lib/std/crypto/25519/ristretto255.zig | 12 +- lib/std/crypto/Certificate.zig | 6 +- lib/std/crypto/Certificate/Bundle/macos.zig | 2 +- lib/std/crypto/argon2.zig | 4 +- lib/std/crypto/benchmark.zig | 50 +- lib/std/crypto/ff.zig | 8 +- lib/std/crypto/kyber_d00.zig | 2 +- lib/std/crypto/pcurves/p256.zig | 16 +- lib/std/crypto/pcurves/p384.zig | 16 +- lib/std/crypto/pcurves/secp256k1.zig | 16 +- lib/std/crypto/tls.zig | 12 +- lib/std/crypto/tls/Client.zig | 48 +- lib/std/debug.zig | 30 +- lib/std/dynamic_library.zig | 36 +- lib/std/elf.zig | 4 +- lib/std/enums.zig | 30 +- lib/std/event/channel.zig | 2 +- lib/std/event/lock.zig | 8 +- lib/std/event/loop.zig | 20 +- lib/std/fmt.zig | 32 +- lib/std/fmt/errol.zig | 42 +- .../fmt/parse_float/convert_eisel_lemire.zig | 2 +- lib/std/fmt/parse_float/convert_fast.zig | 4 +- lib/std/fs.zig | 8 +- lib/std/fs/file.zig | 10 +- lib/std/fs/path.zig | 6 +- lib/std/fs/watch.zig | 6 +- lib/std/hash/auto_hash.zig | 12 +- lib/std/hash/benchmark.zig | 8 +- lib/std/hash/crc.zig | 4 +- lib/std/hash_map.zig | 14 +- lib/std/heap.zig | 36 +- lib/std/heap/PageAllocator.zig | 6 +- lib/std/heap/WasmAllocator.zig | 14 +- lib/std/heap/WasmPageAllocator.zig | 16 +- lib/std/heap/arena_allocator.zig | 8 +- lib/std/heap/general_purpose_allocator.zig | 82 +-- lib/std/http.zig | 2 +- lib/std/http/Client.zig | 2 +- lib/std/http/Server.zig | 2 +- lib/std/io.zig | 6 +- lib/std/io/bit_reader.zig | 2 +- lib/std/io/c_writer.zig | 2 +- lib/std/json/static.zig | 2 +- lib/std/leb128.zig | 2 +- lib/std/log.zig | 6 +- lib/std/math.zig | 20 +- lib/std/math/big/int.zig | 18 +- lib/std/math/big/rational.zig | 6 +- lib/std/math/complex/atan.zig | 4 +- lib/std/math/expm1.zig | 8 +- lib/std/math/ilogb.zig | 2 +- lib/std/math/ldexp.zig | 6 +- lib/std/math/log.zig | 2 +- lib/std/math/log10.zig | 2 +- lib/std/math/log1p.zig | 4 +- lib/std/math/pow.zig | 4 +- lib/std/mem.zig | 22 +- lib/std/mem/Allocator.zig | 8 +- lib/std/meta.zig | 12 +- lib/std/meta/trailer_flags.zig | 10 +- lib/std/multi_array_list.zig | 24 +- lib/std/net.zig | 20 +- lib/std/os.zig | 54 +- lib/std/os/linux.zig | 454 +++++++------- lib/std/os/linux/arm-eabi.zig | 18 +- lib/std/os/linux/arm64.zig | 18 +- lib/std/os/linux/bpf.zig | 68 +-- lib/std/os/linux/bpf/helpers.zig | 282 ++++----- lib/std/os/linux/io_uring.zig | 80 +-- lib/std/os/linux/mips.zig | 22 +- lib/std/os/linux/mips64.zig | 22 +- lib/std/os/linux/powerpc.zig | 16 +- lib/std/os/linux/powerpc64.zig | 16 +- lib/std/os/linux/riscv64.zig | 16 +- lib/std/os/linux/sparc64.zig | 20 +- lib/std/os/linux/start_pie.zig | 10 +- lib/std/os/linux/thumb.zig | 18 +- lib/std/os/linux/tls.zig | 10 +- lib/std/os/linux/vdso.zig | 20 +- lib/std/os/linux/x86.zig | 26 +- lib/std/os/linux/x86_64.zig | 18 +- lib/std/os/plan9.zig | 12 +- lib/std/os/plan9/x86_64.zig | 8 +- lib/std/os/test.zig | 20 +- lib/std/os/uefi/pool_allocator.zig | 4 +- .../uefi/protocols/device_path_protocol.zig | 6 +- lib/std/os/windows.zig | 38 +- lib/std/os/windows/user32.zig | 2 +- lib/std/os/windows/ws2_32.zig | 2 +- lib/std/pdb.zig | 2 +- lib/std/process.zig | 8 +- lib/std/rand/benchmark.zig | 4 +- lib/std/rand/test.zig | 12 +- lib/std/simd.zig | 4 +- lib/std/sort.zig | 2 +- lib/std/start.zig | 6 +- lib/std/start_windows_tls.zig | 10 +- lib/std/tar.zig | 4 +- lib/std/target.zig | 24 +- lib/std/target/aarch64.zig | 396 ++++++------ lib/std/target/amdgpu.zig | 292 ++++----- lib/std/target/arc.zig | 2 +- lib/std/target/arm.zig | 394 ++++++------ lib/std/target/avr.zig | 72 +-- lib/std/target/bpf.zig | 6 +- lib/std/target/csky.zig | 126 ++-- lib/std/target/hexagon.zig | 84 +-- lib/std/target/loongarch.zig | 22 +- lib/std/target/m68k.zig | 42 +- lib/std/target/mips.zig | 104 ++-- lib/std/target/msp430.zig | 8 +- lib/std/target/nvptx.zig | 80 +-- lib/std/target/powerpc.zig | 162 ++--- lib/std/target/riscv.zig | 216 +++---- lib/std/target/s390x.zig | 82 +-- lib/std/target/sparc.zig | 38 +- lib/std/target/spirv.zig | 568 +++++++++--------- lib/std/target/ve.zig | 2 +- lib/std/target/wasm.zig | 24 +- lib/std/target/x86.zig | 324 +++++----- lib/std/target/xtensa.zig | 2 +- lib/std/time/epoch.zig | 4 +- lib/std/treap.zig | 22 +- lib/std/unicode/throughput_test.zig | 4 +- lib/std/valgrind.zig | 40 +- lib/std/valgrind/callgrind.zig | 4 +- lib/std/valgrind/memcheck.zig | 40 +- lib/std/wasm.zig | 20 +- lib/std/zig/Ast.zig | 44 +- lib/std/zig/ErrorBundle.zig | 26 +- lib/std/zig/Parse.zig | 2 +- lib/std/zig/Server.zig | 4 +- lib/std/zig/c_builtins.zig | 12 +- lib/std/zig/c_translation.zig | 44 +- lib/std/zig/number_literal.zig | 6 +- lib/std/zig/parser_test.zig | 4 +- lib/std/zig/perf_test.zig | 6 +- lib/std/zig/render.zig | 2 +- lib/std/zig/system/NativeTargetInfo.zig | 8 +- lib/std/zig/system/arm.zig | 2 +- lib/std/zig/system/windows.zig | 4 +- lib/std/zig/system/x86.zig | 2 +- lib/test_runner.zig | 6 +- src/Air.zig | 196 +++--- src/AstGen.zig | 310 +++++----- src/Autodoc.zig | 160 ++--- src/Compilation.zig | 32 +- src/InternPool.zig | 340 +++++------ src/Liveness.zig | 2 +- src/Manifest.zig | 8 +- src/Module.zig | 100 +-- src/Package.zig | 6 +- src/Sema.zig | 272 ++++----- src/TypedValue.zig | 6 +- src/Zir.zig | 212 +++---- src/arch/aarch64/CodeGen.zig | 12 +- src/arch/aarch64/Emit.zig | 6 +- src/arch/aarch64/bits.zig | 230 +++---- src/arch/arm/CodeGen.zig | 4 +- src/arch/arm/bits.zig | 52 +- src/arch/riscv64/CodeGen.zig | 2 +- src/arch/riscv64/bits.zig | 2 +- src/arch/sparc64/CodeGen.zig | 4 +- src/arch/sparc64/bits.zig | 72 +-- src/arch/wasm/CodeGen.zig | 18 +- src/arch/wasm/Emit.zig | 16 +- src/arch/wasm/Mir.zig | 4 +- src/arch/x86/bits.zig | 10 +- src/arch/x86_64/CodeGen.zig | 64 +- src/arch/x86_64/Encoding.zig | 8 +- src/arch/x86_64/Mir.zig | 32 +- src/arch/x86_64/bits.zig | 140 ++--- src/arch/x86_64/encoder.zig | 22 +- src/clang.zig | 2 +- src/codegen.zig | 8 +- src/codegen/c.zig | 16 +- src/codegen/c/type.zig | 10 +- src/codegen/llvm.zig | 82 +-- src/codegen/llvm/bindings.zig | 2 +- src/codegen/spirv.zig | 20 +- src/codegen/spirv/Assembler.zig | 8 +- src/codegen/spirv/Cache.zig | 60 +- src/codegen/spirv/Module.zig | 14 +- src/codegen/spirv/Section.zig | 24 +- src/crash_report.zig | 12 +- src/libcxx.zig | 8 +- src/link/Coff.zig | 34 +- src/link/Dwarf.zig | 130 ++-- src/link/Elf.zig | 10 +- src/link/MachO/UnwindInfo.zig | 8 +- src/link/MachO/ZldAtom.zig | 14 +- src/link/MachO/dead_strip.zig | 4 +- src/link/MachO/eh_frame.zig | 8 +- src/link/MachO/thunks.zig | 2 +- src/link/MachO/zld.zig | 8 +- src/link/Plan9.zig | 2 +- src/link/Wasm.zig | 70 +-- src/link/Wasm/Object.zig | 16 +- src/link/Wasm/Symbol.zig | 24 +- src/link/Wasm/types.zig | 4 +- src/main.zig | 16 +- src/objcopy.zig | 4 +- src/print_air.zig | 2 +- src/print_zir.zig | 72 +-- src/register_manager.zig | 12 +- src/translate_c.zig | 146 ++--- src/translate_c/ast.zig | 10 +- src/type.zig | 16 +- src/value.zig | 60 +- test/behavior.zig | 2 +- test/behavior/align.zig | 14 +- test/behavior/array.zig | 4 +- test/behavior/async_fn.zig | 6 +- test/behavior/bool.zig | 28 +- test/behavior/bugs/10138.zig | 2 +- test/behavior/bugs/12142.zig | 2 +- test/behavior/bugs/12450.zig | 2 +- test/behavior/bugs/12680_other_file.zig | 2 +- test/behavior/bugs/12723.zig | 4 +- test/behavior/bugs/1741.zig | 2 +- test/behavior/bugs/9584.zig | 2 +- ...n_functions_returning_void_or_noreturn.zig | 4 +- test/behavior/call.zig | 4 +- test/behavior/cast.zig | 100 +-- test/behavior/comptime_memory.zig | 40 +- test/behavior/enum.zig | 60 +- test/behavior/error.zig | 10 +- test/behavior/eval.zig | 2 +- test/behavior/export.zig | 2 +- .../export_self_referential_type_info.zig | 2 +- test/behavior/floatop.zig | 4 +- test/behavior/fn_in_struct_in_comptime.zig | 4 +- test/behavior/generics.zig | 6 +- test/behavior/inline_switch.zig | 2 +- test/behavior/packed-struct.zig | 4 +- test/behavior/pointers.zig | 32 +- .../behavior/{inttoptr.zig => ptrfromint.zig} | 16 +- test/behavior/sizeof_and_typeof.zig | 22 +- test/behavior/slice.zig | 14 +- test/behavior/struct.zig | 2 +- test/behavior/switch.zig | 10 +- test/behavior/translate_c_macros.zig | 2 +- test/behavior/type.zig | 10 +- test/behavior/union.zig | 18 +- test/behavior/vector.zig | 2 +- test/c_abi/main.zig | 10 +- test/cases/assert_function.18.zig | 2 +- test/cases/assert_function.7.zig | 2 +- test/cases/assert_function.8.zig | 2 +- .../add_overflow_in_function_evaluation.zig | 4 +- .../addition_with_non_numbers.zig | 8 +- .../address_of_number_literal.zig | 12 +- .../alignment_of_enum_field_specified.zig | 5 +- .../array_concatenation_with_wrong_type.zig | 4 +- .../array_mult_with_number_type.zig | 2 +- .../assign_inline_fn_to_non-comptime_var.zig | 2 +- .../assign_null_to_non-optional_pointer.zig | 4 +- .../assign_through_constant_pointer.zig | 6 +- .../assign_through_constant_slice.zig | 6 +- .../assign_to_constant_field.zig | 6 +- ...c_function_pointer_passed_to_asyncCall.zig | 2 +- ...bad_implicit_casting_of_anyframe_types.zig | 2 +- ...own_function_called_with_async_keyword.zig | 2 +- .../bad_alignCast_at_comptime.zig | 2 +- test/cases/compile_errors/bad_import.zig | 4 +- .../binary_not_on_number_literal.zig | 4 +- .../compile_errors/bitCast_to_enum_type.zig | 2 +- .../compile_errors/bogus_compile_var.zig | 4 +- .../bogus_method_call_on_slice.zig | 8 +- .../branch_on_undefined_value.zig | 4 +- ...function_with_naked_calling_convention.zig | 2 +- ...ction_passing_array_instead_of_pointer.zig | 8 +- .../cases/compile_errors/cast_unreachable.zig | 4 +- ..._bit_offset_pointer_to_regular_pointer.zig | 4 +- .../colliding_invalid_top_level_functions.zig | 4 +- ...traceback_of_references_that_caused_it.zig | 4 +- ...nt_warning_deduplication_in_generic_fn.zig | 8 +- .../compile_time_division_by_zero.zig | 4 +- .../comptime_call_of_function_pointer.zig | 2 +- .../comptime_if_inside_runtime_for.zig | 14 +- ...de_comptime_function_has_compile_error.zig | 4 +- .../container_init_with_non-type.zig | 4 +- ...trol_flow_uses_comptime_var_at_runtime.zig | 2 +- .../compile_errors/dereference_an_array.zig | 4 +- .../compile_errors/direct_struct_loop.zig | 10 +- ...ted_pointer_to_null-terminated_pointer.zig | 2 +- .../cases/compile_errors/division_by_zero.zig | 16 +- .../duplicate-unused_labels.zig | 32 +- .../duplicate_error_value_in_error_set.zig | 2 +- ...icate_field_in_struct_value_expression.zig | 8 +- .../embedFile_with_bogus_file.zig | 6 +- .../empty_switch_on_an_integer.zig | 2 +- ...-exhaustive_enums_checks_int_in_range.zig} | 2 +- ...field_count_range_but_not_matching_tag.zig | 2 +- ...eclarations_unavailable_for_reify_type.zig | 5 +- .../error_not_handled_in_switch.zig | 6 +- ...for_function_parameter_incompatibility.zig | 14 +- ...xplicitly_casting_non_tag_type_to_enum.zig | 4 +- ...xport_function_with_comptime_parameter.zig | 2 +- .../export_with_empty_name_string.zig | 2 +- .../extern_function_pointer_mismatch.zig | 22 +- ...xtern_function_with_comptime_parameter.zig | 12 +- ...mpatible_but_inferred_integer_tag_type.zig | 10 +- .../extern_union_field_missing_type.zig | 2 +- .../extern_union_given_enum_tag_type.zig | 2 +- ...comptime_field_ptr_not_based_on_struct.zig | 9 +- ...ldParentPtr-comptime_wrong_field_index.zig | 7 +- .../floatToInt_comptime_safety.zig | 17 - test/cases/compile_errors/for.zig | 24 +- .../compile_errors/for_extra_capture.zig | 9 +- .../function_alignment_non_power_of_2.zig | 4 +- ...nction_call_assigned_to_incorrect_type.zig | 2 +- .../function_parameter_is_opaque.zig | 10 +- ...h_non-extern_non-packed_enum_parameter.zig | 4 +- ...non-extern_non-packed_struct_parameter.zig | 4 +- ..._non-extern_non-packed_union_parameter.zig | 4 +- ...nction_call_assigned_to_incorrect_type.zig | 2 +- ..._instance_with_non-constant_expression.zig | 12 +- ...ailure_in_generic_function_return_type.zig | 1 - ...obal_variable_alignment_non_power_of_2.zig | 4 +- ...nitializer_must_be_constant_expression.zig | 4 +- .../ignored_assert-err-ok_return_value.zig | 4 +- .../ignored_comptime_statement_value.zig | 10 +- .../ignored_deferred_function_call.zig | 4 +- .../ignored_deferred_statement_value.zig | 10 +- .../compile_errors/ignored_return_value.zig | 4 +- .../illegal_comparison_of_types.zig | 8 +- ...licit_cast_from_array_to_mutable_slice.zig | 6 +- ...mplicitly_increasing_pointer_alignment.zig | 2 +- .../implicitly_increasing_slice_alignment.zig | 2 +- .../import_outside_package_path.zig | 2 +- .../compile_errors/incorrect_return_type.zig | 38 +- .../increase_pointer_alignment_in_ptrCast.zig | 2 +- .../compile_errors/indirect_struct_loop.zig | 22 +- .../inferred_array_size_invalid_here.zig | 2 +- ...nferring_error_set_of_function_pointer.zig | 4 +- ...float_conversion_to_comptime_int-float.zig | 12 +- .../intFromFloat_comptime_safety.zig | 17 + .../intFromPtr_0_to_non_optional_pointer.zig | 10 + .../intToPtr_with_misaligned_address.zig | 10 - .../int_to_err_global_invalid_number.zig | 4 +- .../int_to_err_non_global_invalid_number.zig | 4 +- .../compile_errors/integer_overflow_error.zig | 8 +- .../integer_underflow_error.zig | 4 +- .../compile_errors/inttoptr_non_ptr_type.zig | 15 - .../compile_errors/invalid_builtin_fn.zig | 5 +- .../compile_errors/invalid_capture_type.zig | 10 +- ...valid_comparison_for_function_pointers.zig | 4 +- .../invalid_field_access_in_comptime.zig | 7 +- ...valid_field_in_struct_value_expression.zig | 9 +- .../compile_errors/invalid_float_casts.zig | 8 +- .../compile_errors/invalid_int_casts.zig | 8 +- .../invalid_non-exhaustive_enum_to_union.zig | 6 +- ...invalid_optional_type_in_extern_struct.zig | 4 +- .../invalid_pointer_with_reify_type.zig | 2 +- .../invalid_shift_amount_error.zig | 6 +- test/cases/compile_errors/invalid_type.zig | 4 +- .../invalid_type_in_builtin_extern.zig | 2 +- .../invalid_variadic_function.zig | 8 +- ..._3818_bitcast_from_parray-slice_to_u16.zig | 8 +- .../local_variable_redeclaration.zig | 2 +- .../local_variable_redeclares_parameter.zig | 6 +- .../local_variable_shadowing_global.zig | 2 +- .../main_function_with_bogus_args_type.zig | 4 +- ..._const_in_slice_with_nested_array_type.zig | 2 +- .../compile_errors/missing_else_clause.zig | 22 +- ...ssing_field_in_struct_value_expression.zig | 10 +- .../missing_main_fn_in_executable.zig | 2 - .../compile_errors/missing_param_name.zig | 4 +- ...elled_type_with_pointer_only_reference.zig | 6 +- .../mul_overflow_in_function_evaluation.zig | 5 +- .../multiple_function_definitions.zig | 4 +- ...gation_overflow_in_function_evaluation.zig | 4 +- test/cases/compile_errors/nested_vectors.zig | 1 - .../noalias_on_non_pointer_param.zig | 20 +- ...-comptime-parameter-used-as-array-size.zig | 3 +- ...h_struct_return_value_outside_function.zig | 6 +- ...ion_in_struct_literal_outside_function.zig | 6 +- ...of_things_that_require_const_variables.zig | 50 +- ...xhaustive_enum_marker_assigned_a_value.zig | 5 +- ..._loop_on_a_type_that_requires_comptime.zig | 4 +- .../non_constant_expression_in_array_size.zig | 12 +- .../non_float_passed_to_floatToInt.zig | 10 - .../non_float_passed_to_intFromFloat.zig | 10 + .../non_int_passed_to_floatFromInt.zig | 10 + .../non_int_passed_to_intToFloat.zig | 10 - ...ig => non_pointer_given_to_intFromPtr.zig} | 4 +- .../offsetOf-bad_field_name.zig | 7 +- .../compile_errors/offsetOf-non_struct.zig | 2 +- .../old_fn_ptr_in_extern_context.zig | 2 +- ..._comptime_float_passed_to_intFromFloat.zig | 10 + ...ange_comptime_int_passed_to_floatToInt.zig | 10 - .../overflow_in_enum_value_allocation.zig | 4 +- .../packed_union_given_enum_tag_type.zig | 2 +- ...cked_union_with_automatic_layout_field.zig | 2 +- .../panic_called_at_compile_time.zig | 4 +- .../parameter_redeclaration.zig | 7 +- .../pass_const_ptr_to_mutable_ptr_fn.zig | 9 +- ...sing_an_under-aligned_function_pointer.zig | 4 +- .../compile_errors/pointer_to_noreturn.zig | 4 +- .../ptrFromInt_non_ptr_type.zig | 15 + .../ptrFromInt_with_misaligned_address.zig | 10 + .../ptrToInt_0_to_non_optional_pointer.zig | 10 - ...e_operator_in_switch_used_on_error_set.zig | 8 +- .../reassign_to_array_parameter.zig | 4 +- .../reassign_to_struct_parameter.zig | 4 +- .../compile_errors/redefinition_of_enums.zig | 4 +- .../redefinition_of_global_variables.zig | 4 +- .../compile_errors/redefinition_of_struct.zig | 4 +- .../reference_to_const_data.zig | 6 +- .../reify_type.Fn_with_is_generic_true.zig | 4 +- ...th_is_var_args_true_and_non-C_callconv.zig | 4 +- .../reify_type.Fn_with_return_type_null.zig | 4 +- ...austive_enum_with_non-integer_tag_type.zig | 2 +- ...xhaustive_enum_with_undefined_tag_type.zig | 2 +- .../reify_type_union_payload_is_undefined.zig | 4 +- .../return_from_defer_expression.zig | 6 +- ...ime_assignment_to_comptime_struct_type.zig | 6 +- ...time_assignment_to_comptime_union_type.zig | 6 +- .../runtime_to_comptime_num.zig | 6 +- ...oes_not_allow_negative_rhs_at_comptime.zig | 8 +- ...f_referential_struct_requires_comptime.zig | 1 - .../setAlignStack_in_inline_function.zig | 3 +- ...e_passed_as_array_init_type_with_elems.zig | 2 +- .../slice_sentinel_mismatch-2.zig | 4 +- .../slice_used_as_extern_fn_param.zig | 2 +- ...pecify_enum_tag_type_that_is_too_small.zig | 2 +- .../specify_non-integer_enum_tag_type.zig | 4 +- .../compile_errors/src_fields_runtime.zig | 5 +- ...n_where_return_type_is_self-referenced.zig | 6 +- ...fier_at_start_of_asm_output_constraint.zig | 6 +- .../std.fmt_error_for_unused_arguments.zig | 2 +- .../struct_type_mismatch_in_arg.zig | 8 +- ...ype_returned_from_non-generic_function.zig | 2 +- ...eclarations_unavailable_for_reify_type.zig | 4 +- .../struct_with_invalid_field.zig | 10 +- .../sub_overflow_in_function_evaluation.zig | 4 +- .../suspend_inside_suspend_block.zig | 3 +- ...expression-duplicate_enumeration_prong.zig | 4 +- ...te_enumeration_prong_when_else_present.zig | 4 +- ...duplicate_or_overlapping_integer_value.zig | 16 +- .../switch_expression-duplicate_type.zig | 4 +- ...expression-duplicate_type_struct_alias.zig | 4 +- ...h_expression-missing_enumeration_prong.zig | 4 +- ...pression-non_exhaustive_integer_prongs.zig | 4 +- ...on-switch_on_pointer_type_with_no_else.zig | 4 +- ...expression-unreachable_else_prong_bool.zig | 4 +- ...expression-unreachable_else_prong_enum.zig | 6 +- ...ession-unreachable_else_prong_range_i8.zig | 4 +- ...ession-unreachable_else_prong_range_u8.zig | 4 +- ...h_expression-unreachable_else_prong_u1.zig | 4 +- ...h_expression-unreachable_else_prong_u2.zig | 4 +- ...hing_with_exhaustive_enum_has___prong_.zig | 2 +- .../switching_with_non-exhaustive_enums.zig | 2 +- ...n_invalid_value_of_non-exhaustive_enum.zig | 4 +- ...d_on_union_with_no_associated_enum_tag.zig | 2 +- .../top_level_decl_dependency_loop.zig | 4 +- ...in_function_with_non_error_return_type.zig | 2 +- .../compile_errors/tuple_init_edge_cases.zig | 42 +- .../type_checking_function_pointers.zig | 10 +- .../compile_errors/undeclared_identifier.zig | 6 +- .../union_auto-enum_value_already_taken.zig | 2 +- .../union_enum_field_does_not_match_enum.zig | 2 +- .../compile_errors/unreachable_parameter.zig | 8 +- .../unreachable_with_return.zig | 10 +- .../while_expected_bool_got_error_union.zig | 4 +- .../while_expected_bool_got_optional.zig | 4 +- .../while_expected_error_union_got_bool.zig | 10 +- ...hile_expected_error_union_got_optional.zig | 10 +- .../while_expected_optional_got_bool.zig | 8 +- ...hile_expected_optional_got_error_union.zig | 8 +- .../write_to_const_global_variable.zig | 6 +- .../compile_errors/wrong_function_type.zig | 18 +- .../wrong_number_of_arguments.zig | 6 +- ...number_of_arguments_for_method_fn_call.zig | 12 +- .../wrong_size_to_an_array_literal.zig | 2 +- .../wrong_types_given_to_export.zig | 6 +- test/cases/comptime_var.2.zig | 2 +- test/cases/comptime_var.6.zig | 2 +- test/cases/conditional_branches.0.zig | 2 +- test/cases/conditional_branches.1.zig | 2 +- test/cases/decl_value_arena.zig | 18 +- test/cases/enum_values.0.zig | 4 +- test/cases/enum_values.1.zig | 8 +- test/cases/error_in_nested_declaration.zig | 2 +- test/cases/hello_world_with_updates.2.zig | 2 +- test/cases/hello_world_with_updates.3.zig | 2 +- test/cases/hello_world_with_updates.4.zig | 2 +- test/cases/hello_world_with_updates.5.zig | 2 +- test/cases/hello_world_with_updates.6.zig | 2 +- test/cases/int_to_ptr.0.zig | 2 +- test/cases/int_to_ptr.1.zig | 2 +- ...ment_address_space_reading_and_writing.zig | 8 +- test/cases/safety/@alignCast misaligned.zig | 2 +- ... @enumFromInt - no matching tag value.zig} | 2 +- ...tCast error not present in destination.zig | 4 +- ...at cannot fit - negative out of range.zig} | 4 +- ...oat cannot fit - negative to unsigned.zig} | 4 +- ...at cannot fit - positive out of range.zig} | 4 +- ... to non-optional byte-aligned pointer.zig} | 2 +- ... address zero to non-optional pointer.zig} | 2 +- ...> @ptrFromInt with misaligned address.zig} | 2 +- test/cases/safety/bad union field access.zig | 2 +- ...ast []u8 to bigger slice of wrong size.zig | 2 +- ...er to global error and no code matches.zig | 2 +- ...ror return trace across suspend points.zig | 3 +- .../exact division failure - vectors.zig | 4 +- test/cases/safety/for_len_mismatch_three.zig | 1 - .../integer division by zero - vectors.zig | 4 +- ...inter casting to null function pointer.zig | 2 +- ... sentinel mismatch - optional pointers.zig | 2 +- test/cases/safety/zero casted to error.zig | 2 +- test/cases/unused_labels.3.zig | 4 +- test/cases/variable_shadowing.3.zig | 3 +- test/cases/variable_shadowing.4.zig | 3 +- test/cases/variable_shadowing.5.zig | 3 +- test/cases/variable_shadowing.6.zig | 4 +- test/cases/x86_64-linux/inline_assembly.2.zig | 2 +- test/cases/x86_64-linux/inline_assembly.3.zig | 2 +- test/cbe.zig | 30 +- test/compare_output.zig | 4 +- test/gen_h.zig | 2 +- test/link/common_symbols_alignment/main.zig | 4 +- test/standalone/pie/main.zig | 2 +- test/translate_c.zig | 92 +-- tools/gen_outline_atomics.zig | 8 +- tools/gen_stubs.zig | 2 +- tools/process_headers.zig | 10 +- tools/update-linux-headers.zig | 2 +- tools/update_clang_options.zig | 2 +- tools/update_cpu_features.zig | 4 +- tools/update_spirv_features.zig | 6 +- 665 files changed, 6204 insertions(+), 5889 deletions(-) rename lib/compiler_rt/{int_to_float.zig => float_from_int.zig} (92%) rename lib/compiler_rt/{int_to_float_test.zig => float_from_int_test.zig} (95%) rename lib/compiler_rt/{float_to_int.zig => int_from_float.zig} (94%) rename lib/compiler_rt/{float_to_int_test.zig => int_from_float_test.zig} (100%) rename test/behavior/{inttoptr.zig => ptrfromint.zig} (75%) rename test/cases/compile_errors/{intToEnum_on_non-exhaustive_enums_checks_int_in_range.zig => enumFromInt_on_non-exhaustive_enums_checks_int_in_range.zig} (85%) delete mode 100644 test/cases/compile_errors/floatToInt_comptime_safety.zig create mode 100644 test/cases/compile_errors/intFromFloat_comptime_safety.zig create mode 100644 test/cases/compile_errors/intFromPtr_0_to_non_optional_pointer.zig delete mode 100644 test/cases/compile_errors/intToPtr_with_misaligned_address.zig delete mode 100644 test/cases/compile_errors/inttoptr_non_ptr_type.zig delete mode 100644 test/cases/compile_errors/non_float_passed_to_floatToInt.zig create mode 100644 test/cases/compile_errors/non_float_passed_to_intFromFloat.zig create mode 100644 test/cases/compile_errors/non_int_passed_to_floatFromInt.zig delete mode 100644 test/cases/compile_errors/non_int_passed_to_intToFloat.zig rename test/cases/compile_errors/{non_pointer_given_to_ptrToInt.zig => non_pointer_given_to_intFromPtr.zig} (52%) create mode 100644 test/cases/compile_errors/out_of_int_range_comptime_float_passed_to_intFromFloat.zig delete mode 100644 test/cases/compile_errors/out_of_range_comptime_int_passed_to_floatToInt.zig create mode 100644 test/cases/compile_errors/ptrFromInt_non_ptr_type.zig create mode 100644 test/cases/compile_errors/ptrFromInt_with_misaligned_address.zig delete mode 100644 test/cases/compile_errors/ptrToInt_0_to_non_optional_pointer.zig rename test/cases/safety/{@intToEnum - no matching tag value.zig => @enumFromInt - no matching tag value.zig} (93%) rename test/cases/safety/{@floatToInt cannot fit - negative out of range.zig => @intFromFloat cannot fit - negative out of range.zig} (88%) rename test/cases/safety/{@floatToInt cannot fit - negative to unsigned.zig => @intFromFloat cannot fit - negative to unsigned.zig} (88%) rename test/cases/safety/{@floatToInt cannot fit - positive out of range.zig => @intFromFloat cannot fit - positive out of range.zig} (88%) rename test/cases/safety/{@intToPtr address zero to non-optional byte-aligned pointer.zig => @ptrFromInt address zero to non-optional byte-aligned pointer.zig} (91%) rename test/cases/safety/{@intToPtr address zero to non-optional pointer.zig => @ptrFromInt address zero to non-optional pointer.zig} (91%) rename test/cases/safety/{intToPtr with misaligned address.zig => @ptrFromInt with misaligned address.zig} (89%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 16c7dd3d0e..a229107e3a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -376,7 +376,7 @@ set(ZIG_STAGE2_SOURCES "${CMAKE_SOURCE_DIR}/lib/compiler_rt/fixxfdi.zig" "${CMAKE_SOURCE_DIR}/lib/compiler_rt/fixxfsi.zig" "${CMAKE_SOURCE_DIR}/lib/compiler_rt/fixxfti.zig" - "${CMAKE_SOURCE_DIR}/lib/compiler_rt/float_to_int.zig" + "${CMAKE_SOURCE_DIR}/lib/compiler_rt/int_from_float.zig" "${CMAKE_SOURCE_DIR}/lib/compiler_rt/floatdidf.zig" "${CMAKE_SOURCE_DIR}/lib/compiler_rt/floatdihf.zig" "${CMAKE_SOURCE_DIR}/lib/compiler_rt/floatdisf.zig" @@ -417,7 +417,7 @@ set(ZIG_STAGE2_SOURCES "${CMAKE_SOURCE_DIR}/lib/compiler_rt/getf2.zig" "${CMAKE_SOURCE_DIR}/lib/compiler_rt/gexf2.zig" "${CMAKE_SOURCE_DIR}/lib/compiler_rt/int.zig" - "${CMAKE_SOURCE_DIR}/lib/compiler_rt/int_to_float.zig" + "${CMAKE_SOURCE_DIR}/lib/compiler_rt/float_from_int.zig" "${CMAKE_SOURCE_DIR}/lib/compiler_rt/log.zig" "${CMAKE_SOURCE_DIR}/lib/compiler_rt/log10.zig" "${CMAKE_SOURCE_DIR}/lib/compiler_rt/log2.zig" diff --git a/build.zig b/build.zig index 28bc528772..e04cfd1fc0 100644 --- a/build.zig +++ b/build.zig @@ -487,7 +487,7 @@ fn addWasiUpdateStep(b: *std.Build, version: [:0]const u8) !void { .cpu_arch = .wasm32, .os_tag = .wasi, }; - target.cpu_features_add.addFeature(@enumToInt(std.Target.wasm.Feature.bulk_memory)); + target.cpu_features_add.addFeature(@intFromEnum(std.Target.wasm.Feature.bulk_memory)); const exe = addCompilerStep(b, .ReleaseSmall, target); diff --git a/doc/langref.html.in b/doc/langref.html.in index 68384c94d7..7c184c8f36 100644 --- a/doc/langref.html.in +++ b/doc/langref.html.in @@ -2763,14 +2763,14 @@ test "comptime pointers" { } } {#code_end#} -

To convert an integer address into a pointer, use {#syntax#}@intToPtr{#endsyntax#}. - To convert a pointer to an integer, use {#syntax#}@ptrToInt{#endsyntax#}:

+

To convert an integer address into a pointer, use {#syntax#}@ptrFromInt{#endsyntax#}. + To convert a pointer to an integer, use {#syntax#}@intFromPtr{#endsyntax#}:

{#code_begin|test|test_integer_pointer_conversion#} const expect = @import("std").testing.expect; -test "@ptrToInt and @intToPtr" { - const ptr = @intToPtr(*i32, 0xdeadbee0); - const addr = @ptrToInt(ptr); +test "@intFromPtr and @ptrFromInt" { + const ptr = @ptrFromInt(*i32, 0xdeadbee0); + const addr = @intFromPtr(ptr); try expect(@TypeOf(addr) == usize); try expect(addr == 0xdeadbee0); } @@ -2780,18 +2780,18 @@ test "@ptrToInt and @intToPtr" { {#code_begin|test|test_comptime_pointer_conversion#} const expect = @import("std").testing.expect; -test "comptime @intToPtr" { +test "comptime @ptrFromInt" { comptime { // Zig is able to do this at compile-time, as long as // ptr is never dereferenced. - const ptr = @intToPtr(*i32, 0xdeadbee0); - const addr = @ptrToInt(ptr); + const ptr = @ptrFromInt(*i32, 0xdeadbee0); + const addr = @intFromPtr(ptr); try expect(@TypeOf(addr) == usize); try expect(addr == 0xdeadbee0); } } {#code_end#} - {#see_also|Optional Pointers|@intToPtr|@ptrToInt|C Pointers#} + {#see_also|Optional Pointers|@ptrFromInt|@intFromPtr|C Pointers#} {#header_open|volatile#}

Loads and stores are assumed to not have side effects. If a given load or store should have side effects, such as Memory Mapped Input/Output (MMIO), use {#syntax#}volatile{#endsyntax#}. @@ -2801,7 +2801,7 @@ test "comptime @intToPtr" { const expect = @import("std").testing.expect; test "volatile" { - const mmio_ptr = @intToPtr(*volatile u8, 0x12345678); + const mmio_ptr = @ptrFromInt(*volatile u8, 0x12345678); try expect(@TypeOf(mmio_ptr) == *volatile u8); } {#code_end#} @@ -2942,8 +2942,8 @@ const expect = std.testing.expect; test "allowzero" { var zero: usize = 0; - var ptr = @intToPtr(*allowzero i32, zero); - try expect(@ptrToInt(ptr) == 0); + var ptr = @ptrFromInt(*allowzero i32, zero); + try expect(@intFromPtr(ptr) == 0); } {#code_end#} {#header_close#} @@ -3006,7 +3006,7 @@ test "basic slices" { // while using the `ptr` field gives a many-item pointer. try expect(@TypeOf(slice.ptr) == [*]i32); try expect(@TypeOf(&slice[0]) == *i32); - try expect(@ptrToInt(slice.ptr) == @ptrToInt(&slice[0])); + try expect(@intFromPtr(slice.ptr) == @intFromPtr(&slice[0])); // Slices have array bounds checking. If you try to access something out // of bounds, you'll get a safety check failure: @@ -3448,8 +3448,8 @@ var bit_field = BitField{ }; test "pointers of sub-byte-aligned fields share addresses" { - try expect(@ptrToInt(&bit_field.a) == @ptrToInt(&bit_field.b)); - try expect(@ptrToInt(&bit_field.a) == @ptrToInt(&bit_field.c)); + try expect(@intFromPtr(&bit_field.a) == @intFromPtr(&bit_field.b)); + try expect(@intFromPtr(&bit_field.a) == @intFromPtr(&bit_field.c)); } {#code_end#}

@@ -3664,9 +3664,9 @@ const Value = enum(u2) { // Now you can cast between u2 and Value. // The ordinal value starts from 0, counting up by 1 from the previous member. test "enum ordinal value" { - try expect(@enumToInt(Value.zero) == 0); - try expect(@enumToInt(Value.one) == 1); - try expect(@enumToInt(Value.two) == 2); + try expect(@intFromEnum(Value.zero) == 0); + try expect(@intFromEnum(Value.one) == 1); + try expect(@intFromEnum(Value.two) == 2); } // You can override the ordinal value for an enum. @@ -3676,9 +3676,9 @@ const Value2 = enum(u32) { million = 1000000, }; test "set enum ordinal value" { - try expect(@enumToInt(Value2.hundred) == 100); - try expect(@enumToInt(Value2.thousand) == 1000); - try expect(@enumToInt(Value2.million) == 1000000); + try expect(@intFromEnum(Value2.hundred) == 100); + try expect(@intFromEnum(Value2.thousand) == 1000); + try expect(@intFromEnum(Value2.million) == 1000000); } // You can also override only some values. @@ -3690,11 +3690,11 @@ const Value3 = enum(u4) { e, }; test "enum implicit ordinal values and overridden values" { - try expect(@enumToInt(Value3.a) == 0); - try expect(@enumToInt(Value3.b) == 8); - try expect(@enumToInt(Value3.c) == 9); - try expect(@enumToInt(Value3.d) == 4); - try expect(@enumToInt(Value3.e) == 5); + try expect(@intFromEnum(Value3.a) == 0); + try expect(@intFromEnum(Value3.b) == 8); + try expect(@intFromEnum(Value3.c) == 9); + try expect(@intFromEnum(Value3.d) == 4); + try expect(@intFromEnum(Value3.e) == 5); } // Enums can have methods, the same as structs and unions. @@ -3811,7 +3811,7 @@ test "switch using enum literals" { It must specify a tag type and cannot consume every enumeration value.

- {#link|@intToEnum#} on a non-exhaustive enum involves the safety semantics + {#link|@enumFromInt#} on a non-exhaustive enum involves the safety semantics of {#link|@intCast#} to the integer tag type, but beyond that always results in a well-defined enum value.

@@ -4385,7 +4385,7 @@ fn withFor(any: AnySlice) usize { // With `inline for` the function gets generated as // a series of `if` statements relying on the optimizer // to convert it to a switch. - if (field.value == @enumToInt(any)) { + if (field.value == @intFromEnum(any)) { return @field(any, field.name).len; } } @@ -4428,7 +4428,7 @@ fn getNum(u: U) u32 { // `u.a` or `u.b` and `tag` is `u`'s comptime-known tag value. inline else => |num, tag| { if (tag == .b) { - return @floatToInt(u32, num); + return @intFromFloat(u32, num); } return num; } @@ -6625,19 +6625,19 @@ test "coercion from homogenous tuple to array" {
  • {#link|@bitCast#} - change type but maintain bit representation
  • {#link|@alignCast#} - make a pointer have more alignment
  • -
  • {#link|@boolToInt#} - convert true to 1 and false to 0
  • -
  • {#link|@enumToInt#} - obtain the integer tag value of an enum or tagged union
  • +
  • {#link|@intFromBool#} - convert true to 1 and false to 0
  • +
  • {#link|@intFromEnum#} - obtain the integer tag value of an enum or tagged union
  • {#link|@errSetCast#} - convert to a smaller error set
  • -
  • {#link|@errorToInt#} - obtain the integer value of an error code
  • +
  • {#link|@intFromError#} - obtain the integer value of an error code
  • {#link|@floatCast#} - convert a larger float to a smaller float
  • -
  • {#link|@floatToInt#} - obtain the integer part of a float value
  • +
  • {#link|@intFromFloat#} - obtain the integer part of a float value
  • {#link|@intCast#} - convert between integer types
  • -
  • {#link|@intToEnum#} - obtain an enum value based on its integer tag value
  • -
  • {#link|@intToError#} - obtain an error code based on its integer value
  • -
  • {#link|@intToFloat#} - convert an integer to a float value
  • -
  • {#link|@intToPtr#} - convert an address to a pointer
  • +
  • {#link|@enumFromInt#} - obtain an enum value based on its integer tag value
  • +
  • {#link|@errorFromInt#} - obtain an error code based on its integer value
  • +
  • {#link|@floatFromInt#} - convert an integer to a float value
  • +
  • {#link|@ptrFromInt#} - convert an address to a pointer
  • {#link|@ptrCast#} - convert between pointer types
  • -
  • {#link|@ptrToInt#} - obtain the address of a pointer
  • +
  • {#link|@intFromPtr#} - obtain the address of a pointer
  • {#link|@truncate#} - convert between integer types, chopping off bits
{#header_close#} @@ -6744,8 +6744,8 @@ fn peerTypeEmptyArrayAndSliceAndError(a: bool, slice: []u8) anyerror![]u8 { } test "peer type resolution: *const T and ?*T" { - const a = @intToPtr(*const usize, 0x123456780); - const b = @intToPtr(?*usize, 0x123456780); + const a = @ptrFromInt(*const usize, 0x123456780); + const b = @ptrFromInt(?*usize, 0x123456780); try expect(a == b); try expect(b == a); } @@ -7542,7 +7542,7 @@ pub fn main() void { {#target_linux_x86_64#} pub fn main() noreturn { const msg = "hello world\n"; - _ = syscall3(SYS_write, STDOUT_FILENO, @ptrToInt(msg), msg.len); + _ = syscall3(SYS_write, STDOUT_FILENO, @intFromPtr(msg), msg.len); _ = syscall1(SYS_exit, 0); unreachable; } @@ -7857,7 +7857,7 @@ comptime { Asserts that {#syntax#}@sizeOf(@TypeOf(value)) == @sizeOf(DestType){#endsyntax#}.

- Asserts that {#syntax#}@typeInfo(DestType) != .Pointer{#endsyntax#}. Use {#syntax#}@ptrCast{#endsyntax#} or {#syntax#}@intToPtr{#endsyntax#} if you need this. + Asserts that {#syntax#}@typeInfo(DestType) != .Pointer{#endsyntax#}. Use {#syntax#}@ptrCast{#endsyntax#} or {#syntax#}@ptrFromInt{#endsyntax#} if you need this.

Can be used for these things for example: @@ -7884,8 +7884,8 @@ comptime { {#see_also|@offsetOf#} {#header_close#} - {#header_open|@boolToInt#} -

{#syntax#}@boolToInt(value: bool) u1{#endsyntax#}
+ {#header_open|@intFromBool#} +
{#syntax#}@intFromBool(value: bool) u1{#endsyntax#}

Converts {#syntax#}true{#endsyntax#} to {#syntax#}@as(u1, 1){#endsyntax#} and {#syntax#}false{#endsyntax#} to {#syntax#}@as(u1, 0){#endsyntax#}. @@ -8348,8 +8348,8 @@ test "main" { {#see_also|@import#} {#header_close#} - {#header_open|@enumToInt#} -

{#syntax#}@enumToInt(enum_or_tagged_union: anytype) anytype{#endsyntax#}
+ {#header_open|@intFromEnum#} +
{#syntax#}@intFromEnum(enum_or_tagged_union: anytype) anytype{#endsyntax#}

Converts an enumeration value into its integer tag type. When a tagged union is passed, the tag value is used as the enumeration value. @@ -8358,7 +8358,7 @@ test "main" { If there is only one possible enum value, the result is a {#syntax#}comptime_int{#endsyntax#} known at {#link|comptime#}.

- {#see_also|@intToEnum#} + {#see_also|@enumFromInt#} {#header_close#} {#header_open|@errorName#} @@ -8383,8 +8383,8 @@ test "main" {

{#header_close#} - {#header_open|@errorToInt#} -
{#syntax#}@errorToInt(err: anytype) std.meta.Int(.unsigned, @sizeOf(anyerror) * 8){#endsyntax#}
+ {#header_open|@intFromError#} +
{#syntax#}@intFromError(err: anytype) std.meta.Int(.unsigned, @sizeOf(anyerror) * 8){#endsyntax#}

Supports the following types:

@@ -8400,7 +8400,7 @@ test "main" { It is generally recommended to avoid this cast, as the integer representation of an error is not stable across source code changes.

- {#see_also|@intToError#} + {#see_also|@errorFromInt#} {#header_close#} {#header_open|@errSetCast#} @@ -8526,8 +8526,8 @@ test "decl access by string" {

{#header_close#} - {#header_open|@floatToInt#} -
{#syntax#}@floatToInt(comptime DestType: type, float: anytype) DestType{#endsyntax#}
+ {#header_open|@intFromFloat#} +
{#syntax#}@intFromFloat(comptime DestType: type, float: anytype) DestType{#endsyntax#}

Converts the integer part of a floating point number to the destination type.

@@ -8535,7 +8535,7 @@ test "decl access by string" { If the integer part of the floating point number cannot fit in the destination type, it invokes safety-checked {#link|Undefined Behavior#}.

- {#see_also|@intToFloat#} + {#see_also|@floatFromInt#} {#header_close#} {#header_open|@frameAddress#} @@ -8666,8 +8666,8 @@ test "integer cast panic" {

{#header_close#} - {#header_open|@intToEnum#} -
{#syntax#}@intToEnum(comptime DestType: type, integer: anytype) DestType{#endsyntax#}
+ {#header_open|@enumFromInt#} +
{#syntax#}@enumFromInt(comptime DestType: type, integer: anytype) DestType{#endsyntax#}

Converts an integer into an {#link|enum#} value.

@@ -8675,11 +8675,11 @@ test "integer cast panic" { Attempting to convert an integer which represents no value in the chosen enum type invokes safety-checked {#link|Undefined Behavior#}.

- {#see_also|@enumToInt#} + {#see_also|@intFromEnum#} {#header_close#} - {#header_open|@intToError#} -
{#syntax#}@intToError(value: std.meta.Int(.unsigned, @sizeOf(anyerror) * 8)) anyerror{#endsyntax#}
+ {#header_open|@errorFromInt#} +
{#syntax#}@errorFromInt(value: std.meta.Int(.unsigned, @sizeOf(anyerror) * 8)) anyerror{#endsyntax#}

Converts from the integer representation of an error into {#link|The Global Error Set#} type.

@@ -8691,20 +8691,20 @@ test "integer cast panic" { Attempting to convert an integer that does not correspond to any error results in safety-protected {#link|Undefined Behavior#}.

- {#see_also|@errorToInt#} + {#see_also|@intFromError#} {#header_close#} - {#header_open|@intToFloat#} -
{#syntax#}@intToFloat(comptime DestType: type, int: anytype) DestType{#endsyntax#}
+ {#header_open|@floatFromInt#} +
{#syntax#}@floatFromInt(comptime DestType: type, int: anytype) DestType{#endsyntax#}

- Converts an integer to the closest floating point representation. To convert the other way, use {#link|@floatToInt#}. This cast is always safe. + Converts an integer to the closest floating point representation. To convert the other way, use {#link|@intFromFloat#}. This cast is always safe.

{#header_close#} - {#header_open|@intToPtr#} -
{#syntax#}@intToPtr(comptime DestType: type, address: usize) DestType{#endsyntax#}
+ {#header_open|@ptrFromInt#} +
{#syntax#}@ptrFromInt(comptime DestType: type, address: usize) DestType{#endsyntax#}

- Converts an integer to a {#link|pointer|Pointers#}. To convert the other way, use {#link|@ptrToInt#}. Casting an address of 0 to a destination type + Converts an integer to a {#link|pointer|Pointers#}. To convert the other way, use {#link|@intFromPtr#}. Casting an address of 0 to a destination type which in not {#link|optional|Optional Pointers#} and does not have the {#syntax#}allowzero{#endsyntax#} attribute will result in a {#link|Pointer Cast Invalid Null#} panic when runtime safety checks are enabled.

@@ -8928,13 +8928,13 @@ pub const PrefetchOptions = struct { {#header_close#} - {#header_open|@ptrToInt#} -
{#syntax#}@ptrToInt(value: anytype) usize{#endsyntax#}
+ {#header_open|@intFromPtr#} +
{#syntax#}@intFromPtr(value: anytype) usize{#endsyntax#}

Converts {#syntax#}value{#endsyntax#} to a {#syntax#}usize{#endsyntax#} which is the address of the pointer. {#syntax#}value{#endsyntax#} can be {#syntax#}*T{#endsyntax#} or {#syntax#}?*T{#endsyntax#}.

-

To convert the other way, use {#link|@intToPtr#}

+

To convert the other way, use {#link|@ptrFromInt#}

{#header_close#} @@ -10165,8 +10165,8 @@ fn getNumberOrFail() !i32 { {#code_begin|test_err|test_comptime_invalid_error_code|integer value '11' represents no error#} comptime { const err = error.AnError; - const number = @errorToInt(err) + 10; - const invalid_err = @intToError(number); + const number = @intFromError(err) + 10; + const invalid_err = @errorFromInt(number); _ = invalid_err; } {#code_end#} @@ -10176,8 +10176,8 @@ const std = @import("std"); pub fn main() void { var err = error.AnError; - var number = @errorToInt(err) + 500; - var invalid_err = @intToError(number); + var number = @intFromError(err) + 500; + var invalid_err = @errorFromInt(number); std.debug.print("value: {}\n", .{invalid_err}); } {#code_end#} @@ -10192,7 +10192,7 @@ const Foo = enum { }; comptime { const a: u2 = 3; - const b = @intToEnum(Foo, a); + const b = @enumFromInt(Foo, a); _ = b; } {#code_end#} @@ -10208,7 +10208,7 @@ const Foo = enum { pub fn main() void { var a: u2 = 3; - var b = @intToEnum(Foo, a); + var b = @enumFromInt(Foo, a); std.debug.print("value: {s}\n", .{@tagName(b)}); } {#code_end#} @@ -10255,7 +10255,7 @@ fn foo(set1: Set1) void {

At compile-time:

{#code_begin|test_err|test_comptime_incorrect_pointer_alignment|pointer address 0x1 is not aligned to 4 bytes#} comptime { - const ptr = @intToPtr(*align(1) i32, 0x1); + const ptr = @ptrFromInt(*align(1) i32, 0x1); const aligned = @alignCast(4, ptr); _ = aligned; } diff --git a/lib/compiler_rt.zig b/lib/compiler_rt.zig index 1cae2a710e..f0503d2219 100644 --- a/lib/compiler_rt.zig +++ b/lib/compiler_rt.zig @@ -55,7 +55,7 @@ comptime { _ = @import("compiler_rt/trunctfdf2.zig"); _ = @import("compiler_rt/trunctfxf2.zig"); - _ = @import("compiler_rt/float_to_int.zig"); + _ = @import("compiler_rt/int_from_float.zig"); _ = @import("compiler_rt/fixhfsi.zig"); _ = @import("compiler_rt/fixhfdi.zig"); _ = @import("compiler_rt/fixhfti.zig"); @@ -87,7 +87,7 @@ comptime { _ = @import("compiler_rt/fixunsxfdi.zig"); _ = @import("compiler_rt/fixunsxfti.zig"); - _ = @import("compiler_rt/int_to_float.zig"); + _ = @import("compiler_rt/float_from_int.zig"); _ = @import("compiler_rt/floatsihf.zig"); _ = @import("compiler_rt/floatsisf.zig"); _ = @import("compiler_rt/floatsidf.zig"); diff --git a/lib/compiler_rt/aarch64_outline_atomics.zig b/lib/compiler_rt/aarch64_outline_atomics.zig index 2471a45365..c70fd81fc4 100644 --- a/lib/compiler_rt/aarch64_outline_atomics.zig +++ b/lib/compiler_rt/aarch64_outline_atomics.zig @@ -8,7 +8,7 @@ const always_has_lse = std.Target.aarch64.featureSetHas(builtin.cpu.features, .l /// It is intentionally not exported in order to make the machine code that /// uses it a statically predicted direct branch rather than using the PLT, /// which ARM is concerned would have too much overhead. -var __aarch64_have_lse_atomics: u8 = @boolToInt(always_has_lse); +var __aarch64_have_lse_atomics: u8 = @intFromBool(always_has_lse); fn __aarch64_cas1_relax() align(16) callconv(.Naked) void { @setRuntimeSafety(false); diff --git a/lib/compiler_rt/atomics.zig b/lib/compiler_rt/atomics.zig index 4b9d5921da..de0c777d45 100644 --- a/lib/compiler_rt/atomics.zig +++ b/lib/compiler_rt/atomics.zig @@ -119,21 +119,21 @@ var spinlocks: SpinlockTable = SpinlockTable{}; fn __atomic_load(size: u32, src: [*]u8, dest: [*]u8, model: i32) callconv(.C) void { _ = model; - var sl = spinlocks.get(@ptrToInt(src)); + var sl = spinlocks.get(@intFromPtr(src)); defer sl.release(); @memcpy(dest[0..size], src); } fn __atomic_store(size: u32, dest: [*]u8, src: [*]u8, model: i32) callconv(.C) void { _ = model; - var sl = spinlocks.get(@ptrToInt(dest)); + var sl = spinlocks.get(@intFromPtr(dest)); defer sl.release(); @memcpy(dest[0..size], src); } fn __atomic_exchange(size: u32, ptr: [*]u8, val: [*]u8, old: [*]u8, model: i32) callconv(.C) void { _ = model; - var sl = spinlocks.get(@ptrToInt(ptr)); + var sl = spinlocks.get(@intFromPtr(ptr)); defer sl.release(); @memcpy(old[0..size], ptr); @memcpy(ptr[0..size], val); @@ -149,7 +149,7 @@ fn __atomic_compare_exchange( ) callconv(.C) i32 { _ = success; _ = failure; - var sl = spinlocks.get(@ptrToInt(ptr)); + var sl = spinlocks.get(@intFromPtr(ptr)); defer sl.release(); for (ptr[0..size], 0..) |b, i| { if (expected[i] != b) break; @@ -168,7 +168,7 @@ fn __atomic_compare_exchange( inline fn atomic_load_N(comptime T: type, src: *T, model: i32) T { _ = model; if (@sizeOf(T) > largest_atomic_size) { - var sl = spinlocks.get(@ptrToInt(src)); + var sl = spinlocks.get(@intFromPtr(src)); defer sl.release(); return src.*; } else { @@ -199,7 +199,7 @@ fn __atomic_load_16(src: *u128, model: i32) callconv(.C) u128 { inline fn atomic_store_N(comptime T: type, dst: *T, value: T, model: i32) void { _ = model; if (@sizeOf(T) > largest_atomic_size) { - var sl = spinlocks.get(@ptrToInt(dst)); + var sl = spinlocks.get(@intFromPtr(dst)); defer sl.release(); dst.* = value; } else { @@ -230,9 +230,9 @@ fn __atomic_store_16(dst: *u128, value: u128, model: i32) callconv(.C) void { fn wideUpdate(comptime T: type, ptr: *T, val: T, update: anytype) T { const WideAtomic = std.meta.Int(.unsigned, smallest_atomic_fetch_exch_size * 8); - const addr = @ptrToInt(ptr); + const addr = @intFromPtr(ptr); const wide_addr = addr & ~(@as(T, smallest_atomic_fetch_exch_size) - 1); - const wide_ptr = @alignCast(smallest_atomic_fetch_exch_size, @intToPtr(*WideAtomic, wide_addr)); + const wide_ptr = @alignCast(smallest_atomic_fetch_exch_size, @ptrFromInt(*WideAtomic, wide_addr)); const inner_offset = addr & (@as(T, smallest_atomic_fetch_exch_size) - 1); const inner_shift = @intCast(std.math.Log2Int(T), inner_offset * 8); @@ -255,7 +255,7 @@ fn wideUpdate(comptime T: type, ptr: *T, val: T, update: anytype) T { inline fn atomic_exchange_N(comptime T: type, ptr: *T, val: T, model: i32) T { _ = model; if (@sizeOf(T) > largest_atomic_size) { - var sl = spinlocks.get(@ptrToInt(ptr)); + var sl = spinlocks.get(@intFromPtr(ptr)); defer sl.release(); const value = ptr.*; ptr.* = val; @@ -305,7 +305,7 @@ inline fn atomic_compare_exchange_N( _ = success; _ = failure; if (@sizeOf(T) > largest_atomic_size) { - var sl = spinlocks.get(@ptrToInt(ptr)); + var sl = spinlocks.get(@intFromPtr(ptr)); defer sl.release(); const value = ptr.*; if (value == expected.*) { @@ -362,7 +362,7 @@ inline fn fetch_op_N(comptime T: type, comptime op: std.builtin.AtomicRmwOp, ptr }; if (@sizeOf(T) > largest_atomic_size) { - var sl = spinlocks.get(@ptrToInt(ptr)); + var sl = spinlocks.get(@intFromPtr(ptr)); defer sl.release(); const value = ptr.*; diff --git a/lib/compiler_rt/clear_cache.zig b/lib/compiler_rt/clear_cache.zig index 5038c4061a..e39d726e0f 100644 --- a/lib/compiler_rt/clear_cache.zig +++ b/lib/compiler_rt/clear_cache.zig @@ -63,7 +63,7 @@ fn clear_cache(start: usize, end: usize) callconv(.C) void { .addr = start, .len = end - start, }; - const result = sysarch(ARM_SYNC_ICACHE, @ptrToInt(&arg)); + const result = sysarch(ARM_SYNC_ICACHE, @intFromPtr(&arg)); std.debug.assert(result == 0); exportIt(); }, diff --git a/lib/compiler_rt/cmpdf2.zig b/lib/compiler_rt/cmpdf2.zig index 8a7b37c2c9..c01b1c1538 100644 --- a/lib/compiler_rt/cmpdf2.zig +++ b/lib/compiler_rt/cmpdf2.zig @@ -26,7 +26,7 @@ comptime { /// Note that this matches the definition of `__ledf2`, `__eqdf2`, `__nedf2`, `__cmpdf2`, /// and `__ltdf2`. fn __cmpdf2(a: f64, b: f64) callconv(.C) i32 { - return @enumToInt(comparef.cmpf2(f64, comparef.LE, a, b)); + return @intFromEnum(comparef.cmpf2(f64, comparef.LE, a, b)); } /// "These functions return a value less than or equal to zero if neither argument is NaN, @@ -56,13 +56,13 @@ pub fn __ltdf2(a: f64, b: f64) callconv(.C) i32 { } fn __aeabi_dcmpeq(a: f64, b: f64) callconv(.AAPCS) i32 { - return @boolToInt(comparef.cmpf2(f64, comparef.LE, a, b) == .Equal); + return @intFromBool(comparef.cmpf2(f64, comparef.LE, a, b) == .Equal); } fn __aeabi_dcmplt(a: f64, b: f64) callconv(.AAPCS) i32 { - return @boolToInt(comparef.cmpf2(f64, comparef.LE, a, b) == .Less); + return @intFromBool(comparef.cmpf2(f64, comparef.LE, a, b) == .Less); } fn __aeabi_dcmple(a: f64, b: f64) callconv(.AAPCS) i32 { - return @boolToInt(comparef.cmpf2(f64, comparef.LE, a, b) != .Greater); + return @intFromBool(comparef.cmpf2(f64, comparef.LE, a, b) != .Greater); } diff --git a/lib/compiler_rt/cmphf2.zig b/lib/compiler_rt/cmphf2.zig index d801b30ff6..67ad7a74b6 100644 --- a/lib/compiler_rt/cmphf2.zig +++ b/lib/compiler_rt/cmphf2.zig @@ -20,7 +20,7 @@ comptime { /// Note that this matches the definition of `__lehf2`, `__eqhf2`, `__nehf2`, `__cmphf2`, /// and `__lthf2`. fn __cmphf2(a: f16, b: f16) callconv(.C) i32 { - return @enumToInt(comparef.cmpf2(f16, comparef.LE, a, b)); + return @intFromEnum(comparef.cmpf2(f16, comparef.LE, a, b)); } /// "These functions return a value less than or equal to zero if neither argument is NaN, diff --git a/lib/compiler_rt/cmpsf2.zig b/lib/compiler_rt/cmpsf2.zig index 35e250e810..c51792254d 100644 --- a/lib/compiler_rt/cmpsf2.zig +++ b/lib/compiler_rt/cmpsf2.zig @@ -26,7 +26,7 @@ comptime { /// Note that this matches the definition of `__lesf2`, `__eqsf2`, `__nesf2`, `__cmpsf2`, /// and `__ltsf2`. fn __cmpsf2(a: f32, b: f32) callconv(.C) i32 { - return @enumToInt(comparef.cmpf2(f32, comparef.LE, a, b)); + return @intFromEnum(comparef.cmpf2(f32, comparef.LE, a, b)); } /// "These functions return a value less than or equal to zero if neither argument is NaN, @@ -56,13 +56,13 @@ pub fn __ltsf2(a: f32, b: f32) callconv(.C) i32 { } fn __aeabi_fcmpeq(a: f32, b: f32) callconv(.AAPCS) i32 { - return @boolToInt(comparef.cmpf2(f32, comparef.LE, a, b) == .Equal); + return @intFromBool(comparef.cmpf2(f32, comparef.LE, a, b) == .Equal); } fn __aeabi_fcmplt(a: f32, b: f32) callconv(.AAPCS) i32 { - return @boolToInt(comparef.cmpf2(f32, comparef.LE, a, b) == .Less); + return @intFromBool(comparef.cmpf2(f32, comparef.LE, a, b) == .Less); } fn __aeabi_fcmple(a: f32, b: f32) callconv(.AAPCS) i32 { - return @boolToInt(comparef.cmpf2(f32, comparef.LE, a, b) != .Greater); + return @intFromBool(comparef.cmpf2(f32, comparef.LE, a, b) != .Greater); } diff --git a/lib/compiler_rt/cmptf2.zig b/lib/compiler_rt/cmptf2.zig index bc53afc625..bee0652292 100644 --- a/lib/compiler_rt/cmptf2.zig +++ b/lib/compiler_rt/cmptf2.zig @@ -34,7 +34,7 @@ comptime { /// Note that this matches the definition of `__letf2`, `__eqtf2`, `__netf2`, `__cmptf2`, /// and `__lttf2`. fn __cmptf2(a: f128, b: f128) callconv(.C) i32 { - return @enumToInt(comparef.cmpf2(f128, comparef.LE, a, b)); + return @intFromEnum(comparef.cmpf2(f128, comparef.LE, a, b)); } /// "These functions return a value less than or equal to zero if neither argument is NaN, @@ -71,34 +71,34 @@ const SparcFCMP = enum(i32) { }; fn _Qp_cmp(a: *const f128, b: *const f128) callconv(.C) i32 { - return @enumToInt(comparef.cmpf2(f128, SparcFCMP, a.*, b.*)); + return @intFromEnum(comparef.cmpf2(f128, SparcFCMP, a.*, b.*)); } fn _Qp_feq(a: *const f128, b: *const f128) callconv(.C) bool { - return @intToEnum(SparcFCMP, _Qp_cmp(a, b)) == .Equal; + return @enumFromInt(SparcFCMP, _Qp_cmp(a, b)) == .Equal; } fn _Qp_fne(a: *const f128, b: *const f128) callconv(.C) bool { - return @intToEnum(SparcFCMP, _Qp_cmp(a, b)) != .Equal; + return @enumFromInt(SparcFCMP, _Qp_cmp(a, b)) != .Equal; } fn _Qp_flt(a: *const f128, b: *const f128) callconv(.C) bool { - return @intToEnum(SparcFCMP, _Qp_cmp(a, b)) == .Less; + return @enumFromInt(SparcFCMP, _Qp_cmp(a, b)) == .Less; } fn _Qp_fgt(a: *const f128, b: *const f128) callconv(.C) bool { - return @intToEnum(SparcFCMP, _Qp_cmp(a, b)) == .Greater; + return @enumFromInt(SparcFCMP, _Qp_cmp(a, b)) == .Greater; } fn _Qp_fge(a: *const f128, b: *const f128) callconv(.C) bool { - return switch (@intToEnum(SparcFCMP, _Qp_cmp(a, b))) { + return switch (@enumFromInt(SparcFCMP, _Qp_cmp(a, b))) { .Equal, .Greater => true, .Less, .Unordered => false, }; } fn _Qp_fle(a: *const f128, b: *const f128) callconv(.C) bool { - return switch (@intToEnum(SparcFCMP, _Qp_cmp(a, b))) { + return switch (@enumFromInt(SparcFCMP, _Qp_cmp(a, b))) { .Equal, .Less => true, .Greater, .Unordered => false, }; diff --git a/lib/compiler_rt/cmpxf2.zig b/lib/compiler_rt/cmpxf2.zig index 75355775bb..cd66b1c6c8 100644 --- a/lib/compiler_rt/cmpxf2.zig +++ b/lib/compiler_rt/cmpxf2.zig @@ -20,7 +20,7 @@ comptime { /// Note that this matches the definition of `__lexf2`, `__eqxf2`, `__nexf2`, `__cmpxf2`, /// and `__ltxf2`. fn __cmpxf2(a: f80, b: f80) callconv(.C) i32 { - return @enumToInt(comparef.cmp_f80(comparef.LE, a, b)); + return @intFromEnum(comparef.cmp_f80(comparef.LE, a, b)); } /// "These functions return a value less than or equal to zero if neither argument is NaN, diff --git a/lib/compiler_rt/comparef.zig b/lib/compiler_rt/comparef.zig index 1fb6d2dfa0..d4f4e0504d 100644 --- a/lib/compiler_rt/comparef.zig +++ b/lib/compiler_rt/comparef.zig @@ -77,7 +77,7 @@ pub inline fn cmp_f80(comptime RT: type, a: f80, b: f80) RT { if ((a_rep.fraction | b_rep.fraction) | ((a_rep.exp | b_rep.exp) & special_exp) == 0) return .Equal; - if (@boolToInt(a_rep.exp == b_rep.exp) & @boolToInt(a_rep.fraction == b_rep.fraction) != 0) { + if (@intFromBool(a_rep.exp == b_rep.exp) & @intFromBool(a_rep.fraction == b_rep.fraction) != 0) { return .Equal; } else if (a_rep.exp & sign_bit != b_rep.exp & sign_bit) { // signs are different @@ -109,7 +109,7 @@ pub inline fn unordcmp(comptime T: type, a: T, b: T) i32 { const aAbs: rep_t = @bitCast(rep_t, a) & absMask; const bAbs: rep_t = @bitCast(rep_t, b) & absMask; - return @boolToInt(aAbs > infRep or bAbs > infRep); + return @intFromBool(aAbs > infRep or bAbs > infRep); } test { diff --git a/lib/compiler_rt/divdf3.zig b/lib/compiler_rt/divdf3.zig index 2f83d312dc..c71eed6d0f 100644 --- a/lib/compiler_rt/divdf3.zig +++ b/lib/compiler_rt/divdf3.zig @@ -199,7 +199,7 @@ inline fn div(a: f64, b: f64) f64 { } else if (writtenExponent < 1) { if (writtenExponent == 0) { // Check whether the rounded result is normal. - const round = @boolToInt((residual << 1) > bSignificand); + const round = @intFromBool((residual << 1) > bSignificand); // Clear the implicit bit. var absResult = quotient & significandMask; // Round. @@ -213,7 +213,7 @@ inline fn div(a: f64, b: f64) f64 { // code to round them correctly. return @bitCast(f64, quotientSign); } else { - const round = @boolToInt((residual << 1) > bSignificand); + const round = @intFromBool((residual << 1) > bSignificand); // Clear the implicit bit var absResult = quotient & significandMask; // Insert the exponent diff --git a/lib/compiler_rt/divsf3.zig b/lib/compiler_rt/divsf3.zig index 5f05141610..d35220ca26 100644 --- a/lib/compiler_rt/divsf3.zig +++ b/lib/compiler_rt/divsf3.zig @@ -179,7 +179,7 @@ inline fn div(a: f32, b: f32) f32 { } else if (writtenExponent < 1) { if (writtenExponent == 0) { // Check whether the rounded result is normal. - const round = @boolToInt((residual << 1) > bSignificand); + const round = @intFromBool((residual << 1) > bSignificand); // Clear the implicit bit. var absResult = quotient & significandMask; // Round. @@ -193,7 +193,7 @@ inline fn div(a: f32, b: f32) f32 { // code to round them correctly. return @bitCast(f32, quotientSign); } else { - const round = @boolToInt((residual << 1) > bSignificand); + const round = @intFromBool((residual << 1) > bSignificand); // Clear the implicit bit var absResult = quotient & significandMask; // Insert the exponent diff --git a/lib/compiler_rt/divtf3.zig b/lib/compiler_rt/divtf3.zig index 165186b1fb..86a2f30cc8 100644 --- a/lib/compiler_rt/divtf3.zig +++ b/lib/compiler_rt/divtf3.zig @@ -214,7 +214,7 @@ inline fn div(a: f128, b: f128) f128 { } else if (writtenExponent < 1) { if (writtenExponent == 0) { // Check whether the rounded result is normal. - const round = @boolToInt((residual << 1) > bSignificand); + const round = @intFromBool((residual << 1) > bSignificand); // Clear the implicit bit. var absResult = quotient & significandMask; // Round. @@ -228,7 +228,7 @@ inline fn div(a: f128, b: f128) f128 { // code to round them correctly. return @bitCast(f128, quotientSign); } else { - const round = @boolToInt((residual << 1) >= bSignificand); + const round = @intFromBool((residual << 1) >= bSignificand); // Clear the implicit bit var absResult = quotient & significandMask; // Insert the exponent diff --git a/lib/compiler_rt/divxf3.zig b/lib/compiler_rt/divxf3.zig index 5fb686cee8..f0e93fa3be 100644 --- a/lib/compiler_rt/divxf3.zig +++ b/lib/compiler_rt/divxf3.zig @@ -195,7 +195,7 @@ pub fn __divxf3(a: f80, b: f80) callconv(.C) f80 { // code to round them correctly. return @bitCast(T, quotientSign); } else { - const round = @boolToInt(residual > (bSignificand >> 1)); + const round = @intFromBool(residual > (bSignificand >> 1)); // Insert the exponent var absResult = quotient | (@intCast(Z, writtenExponent) << significandBits); // Round diff --git a/lib/compiler_rt/exp.zig b/lib/compiler_rt/exp.zig index 24d29ad0bb..32a1a84ff9 100644 --- a/lib/compiler_rt/exp.zig +++ b/lib/compiler_rt/exp.zig @@ -74,12 +74,12 @@ pub fn expf(x_: f32) callconv(.C) f32 { if (hx > 0x3EB17218) { // |x| > 1.5 * ln2 if (hx > 0x3F851592) { - k = @floatToInt(i32, invln2 * x + half[@intCast(usize, sign)]); + k = @intFromFloat(i32, invln2 * x + half[@intCast(usize, sign)]); } else { k = 1 - sign - sign; } - const fk = @intToFloat(f32, k); + const fk = @floatFromInt(f32, k); hi = x - fk * ln2hi; lo = fk * ln2lo; x = hi - lo; @@ -157,12 +157,12 @@ pub fn exp(x_: f64) callconv(.C) f64 { if (hx > 0x3FD62E42) { // |x| >= 1.5 * ln2 if (hx > 0x3FF0A2B2) { - k = @floatToInt(i32, invln2 * x + half[@intCast(usize, sign)]); + k = @intFromFloat(i32, invln2 * x + half[@intCast(usize, sign)]); } else { k = 1 - sign - sign; } - const dk = @intToFloat(f64, k); + const dk = @floatFromInt(f64, k); hi = x - dk * ln2hi; lo = dk * ln2lo; x = hi - lo; diff --git a/lib/compiler_rt/exp2.zig b/lib/compiler_rt/exp2.zig index 1882367522..731fd7013d 100644 --- a/lib/compiler_rt/exp2.zig +++ b/lib/compiler_rt/exp2.zig @@ -32,7 +32,7 @@ pub fn __exp2h(x: f16) callconv(.C) f16 { pub fn exp2f(x: f32) callconv(.C) f32 { const tblsiz = @intCast(u32, exp2ft.len); - const redux: f32 = 0x1.8p23 / @intToFloat(f32, tblsiz); + const redux: f32 = 0x1.8p23 / @floatFromInt(f32, tblsiz); const P1: f32 = 0x1.62e430p-1; const P2: f32 = 0x1.ebfbe0p-3; const P3: f32 = 0x1.c6b348p-5; @@ -89,7 +89,7 @@ pub fn exp2f(x: f32) callconv(.C) f32 { pub fn exp2(x: f64) callconv(.C) f64 { const tblsiz: u32 = @intCast(u32, exp2dt.len / 2); - const redux: f64 = 0x1.8p52 / @intToFloat(f64, tblsiz); + const redux: f64 = 0x1.8p52 / @floatFromInt(f64, tblsiz); const P1: f64 = 0x1.62e42fefa39efp-1; const P2: f64 = 0x1.ebfbdff82c575p-3; const P3: f64 = 0x1.c6b08d704a0a6p-5; diff --git a/lib/compiler_rt/fixdfdi.zig b/lib/compiler_rt/fixdfdi.zig index 0329b3cc13..23b3876b91 100644 --- a/lib/compiler_rt/fixdfdi.zig +++ b/lib/compiler_rt/fixdfdi.zig @@ -1,5 +1,5 @@ const common = @import("./common.zig"); -const floatToInt = @import("./float_to_int.zig").floatToInt; +const intFromFloat = @import("./int_from_float.zig").intFromFloat; pub const panic = common.panic; @@ -12,9 +12,9 @@ comptime { } pub fn __fixdfdi(a: f64) callconv(.C) i64 { - return floatToInt(i64, a); + return intFromFloat(i64, a); } fn __aeabi_d2lz(a: f64) callconv(.AAPCS) i64 { - return floatToInt(i64, a); + return intFromFloat(i64, a); } diff --git a/lib/compiler_rt/fixdfsi.zig b/lib/compiler_rt/fixdfsi.zig index 74406171b4..09b9533254 100644 --- a/lib/compiler_rt/fixdfsi.zig +++ b/lib/compiler_rt/fixdfsi.zig @@ -1,5 +1,5 @@ const common = @import("./common.zig"); -const floatToInt = @import("./float_to_int.zig").floatToInt; +const intFromFloat = @import("./int_from_float.zig").intFromFloat; pub const panic = common.panic; @@ -12,9 +12,9 @@ comptime { } pub fn __fixdfsi(a: f64) callconv(.C) i32 { - return floatToInt(i32, a); + return intFromFloat(i32, a); } fn __aeabi_d2iz(a: f64) callconv(.AAPCS) i32 { - return floatToInt(i32, a); + return intFromFloat(i32, a); } diff --git a/lib/compiler_rt/fixdfti.zig b/lib/compiler_rt/fixdfti.zig index ecb4e8912c..c3513f6bec 100644 --- a/lib/compiler_rt/fixdfti.zig +++ b/lib/compiler_rt/fixdfti.zig @@ -1,6 +1,6 @@ const builtin = @import("builtin"); const common = @import("./common.zig"); -const floatToInt = @import("./float_to_int.zig").floatToInt; +const intFromFloat = @import("./int_from_float.zig").intFromFloat; pub const panic = common.panic; @@ -13,11 +13,11 @@ comptime { } pub fn __fixdfti(a: f64) callconv(.C) i128 { - return floatToInt(i128, a); + return intFromFloat(i128, a); } const v2u64 = @Vector(2, u64); fn __fixdfti_windows_x86_64(a: f64) callconv(.C) v2u64 { - return @bitCast(v2u64, floatToInt(i128, a)); + return @bitCast(v2u64, intFromFloat(i128, a)); } diff --git a/lib/compiler_rt/fixhfdi.zig b/lib/compiler_rt/fixhfdi.zig index 3cb1186d71..21736e2d9a 100644 --- a/lib/compiler_rt/fixhfdi.zig +++ b/lib/compiler_rt/fixhfdi.zig @@ -1,5 +1,5 @@ const common = @import("./common.zig"); -const floatToInt = @import("./float_to_int.zig").floatToInt; +const intFromFloat = @import("./int_from_float.zig").intFromFloat; pub const panic = common.panic; @@ -8,5 +8,5 @@ comptime { } fn __fixhfdi(a: f16) callconv(.C) i64 { - return floatToInt(i64, a); + return intFromFloat(i64, a); } diff --git a/lib/compiler_rt/fixhfsi.zig b/lib/compiler_rt/fixhfsi.zig index 2f24649fb7..cd1ae208f8 100644 --- a/lib/compiler_rt/fixhfsi.zig +++ b/lib/compiler_rt/fixhfsi.zig @@ -1,5 +1,5 @@ const common = @import("./common.zig"); -const floatToInt = @import("./float_to_int.zig").floatToInt; +const intFromFloat = @import("./int_from_float.zig").intFromFloat; pub const panic = common.panic; @@ -8,5 +8,5 @@ comptime { } fn __fixhfsi(a: f16) callconv(.C) i32 { - return floatToInt(i32, a); + return intFromFloat(i32, a); } diff --git a/lib/compiler_rt/fixhfti.zig b/lib/compiler_rt/fixhfti.zig index 2865bcad29..d2b288a52d 100644 --- a/lib/compiler_rt/fixhfti.zig +++ b/lib/compiler_rt/fixhfti.zig @@ -1,6 +1,6 @@ const builtin = @import("builtin"); const common = @import("./common.zig"); -const floatToInt = @import("./float_to_int.zig").floatToInt; +const intFromFloat = @import("./int_from_float.zig").intFromFloat; pub const panic = common.panic; @@ -13,11 +13,11 @@ comptime { } pub fn __fixhfti(a: f16) callconv(.C) i128 { - return floatToInt(i128, a); + return intFromFloat(i128, a); } const v2u64 = @Vector(2, u64); fn __fixhfti_windows_x86_64(a: f16) callconv(.C) v2u64 { - return @bitCast(v2u64, floatToInt(i128, a)); + return @bitCast(v2u64, intFromFloat(i128, a)); } diff --git a/lib/compiler_rt/fixsfdi.zig b/lib/compiler_rt/fixsfdi.zig index 4bb63e6768..bbb31f6233 100644 --- a/lib/compiler_rt/fixsfdi.zig +++ b/lib/compiler_rt/fixsfdi.zig @@ -1,5 +1,5 @@ const common = @import("./common.zig"); -const floatToInt = @import("./float_to_int.zig").floatToInt; +const intFromFloat = @import("./int_from_float.zig").intFromFloat; pub const panic = common.panic; @@ -12,9 +12,9 @@ comptime { } pub fn __fixsfdi(a: f32) callconv(.C) i64 { - return floatToInt(i64, a); + return intFromFloat(i64, a); } fn __aeabi_f2lz(a: f32) callconv(.AAPCS) i64 { - return floatToInt(i64, a); + return intFromFloat(i64, a); } diff --git a/lib/compiler_rt/fixsfsi.zig b/lib/compiler_rt/fixsfsi.zig index 55eb6e2276..7aa352bbf9 100644 --- a/lib/compiler_rt/fixsfsi.zig +++ b/lib/compiler_rt/fixsfsi.zig @@ -1,5 +1,5 @@ const common = @import("./common.zig"); -const floatToInt = @import("./float_to_int.zig").floatToInt; +const intFromFloat = @import("./int_from_float.zig").intFromFloat; pub const panic = common.panic; @@ -12,9 +12,9 @@ comptime { } pub fn __fixsfsi(a: f32) callconv(.C) i32 { - return floatToInt(i32, a); + return intFromFloat(i32, a); } fn __aeabi_f2iz(a: f32) callconv(.AAPCS) i32 { - return floatToInt(i32, a); + return intFromFloat(i32, a); } diff --git a/lib/compiler_rt/fixsfti.zig b/lib/compiler_rt/fixsfti.zig index cd5e524b20..033e5be5b8 100644 --- a/lib/compiler_rt/fixsfti.zig +++ b/lib/compiler_rt/fixsfti.zig @@ -1,6 +1,6 @@ const builtin = @import("builtin"); const common = @import("./common.zig"); -const floatToInt = @import("./float_to_int.zig").floatToInt; +const intFromFloat = @import("./int_from_float.zig").intFromFloat; pub const panic = common.panic; @@ -13,11 +13,11 @@ comptime { } pub fn __fixsfti(a: f32) callconv(.C) i128 { - return floatToInt(i128, a); + return intFromFloat(i128, a); } const v2u64 = @Vector(2, u64); fn __fixsfti_windows_x86_64(a: f32) callconv(.C) v2u64 { - return @bitCast(v2u64, floatToInt(i128, a)); + return @bitCast(v2u64, intFromFloat(i128, a)); } diff --git a/lib/compiler_rt/fixtfdi.zig b/lib/compiler_rt/fixtfdi.zig index bafcf6d83a..f65c9eaed1 100644 --- a/lib/compiler_rt/fixtfdi.zig +++ b/lib/compiler_rt/fixtfdi.zig @@ -1,5 +1,5 @@ const common = @import("./common.zig"); -const floatToInt = @import("./float_to_int.zig").floatToInt; +const intFromFloat = @import("./int_from_float.zig").intFromFloat; pub const panic = common.panic; @@ -13,9 +13,9 @@ comptime { } pub fn __fixtfdi(a: f128) callconv(.C) i64 { - return floatToInt(i64, a); + return intFromFloat(i64, a); } fn _Qp_qtox(a: *const f128) callconv(.C) i64 { - return floatToInt(i64, a.*); + return intFromFloat(i64, a.*); } diff --git a/lib/compiler_rt/fixtfsi.zig b/lib/compiler_rt/fixtfsi.zig index 389f2b117f..2667b1f626 100644 --- a/lib/compiler_rt/fixtfsi.zig +++ b/lib/compiler_rt/fixtfsi.zig @@ -1,5 +1,5 @@ const common = @import("./common.zig"); -const floatToInt = @import("./float_to_int.zig").floatToInt; +const intFromFloat = @import("./int_from_float.zig").intFromFloat; pub const panic = common.panic; @@ -13,9 +13,9 @@ comptime { } pub fn __fixtfsi(a: f128) callconv(.C) i32 { - return floatToInt(i32, a); + return intFromFloat(i32, a); } fn _Qp_qtoi(a: *const f128) callconv(.C) i32 { - return floatToInt(i32, a.*); + return intFromFloat(i32, a.*); } diff --git a/lib/compiler_rt/fixtfti.zig b/lib/compiler_rt/fixtfti.zig index 60b94807b9..c3f574ed8a 100644 --- a/lib/compiler_rt/fixtfti.zig +++ b/lib/compiler_rt/fixtfti.zig @@ -1,6 +1,6 @@ const builtin = @import("builtin"); const common = @import("./common.zig"); -const floatToInt = @import("./float_to_int.zig").floatToInt; +const intFromFloat = @import("./int_from_float.zig").intFromFloat; pub const panic = common.panic; @@ -15,11 +15,11 @@ comptime { } pub fn __fixtfti(a: f128) callconv(.C) i128 { - return floatToInt(i128, a); + return intFromFloat(i128, a); } const v2u64 = @Vector(2, u64); fn __fixtfti_windows_x86_64(a: f128) callconv(.C) v2u64 { - return @bitCast(v2u64, floatToInt(i128, a)); + return @bitCast(v2u64, intFromFloat(i128, a)); } diff --git a/lib/compiler_rt/fixunsdfdi.zig b/lib/compiler_rt/fixunsdfdi.zig index b544595c7f..a43ad91ac8 100644 --- a/lib/compiler_rt/fixunsdfdi.zig +++ b/lib/compiler_rt/fixunsdfdi.zig @@ -1,5 +1,5 @@ const common = @import("./common.zig"); -const floatToInt = @import("./float_to_int.zig").floatToInt; +const intFromFloat = @import("./int_from_float.zig").intFromFloat; pub const panic = common.panic; @@ -12,9 +12,9 @@ comptime { } pub fn __fixunsdfdi(a: f64) callconv(.C) u64 { - return floatToInt(u64, a); + return intFromFloat(u64, a); } fn __aeabi_d2ulz(a: f64) callconv(.AAPCS) u64 { - return floatToInt(u64, a); + return intFromFloat(u64, a); } diff --git a/lib/compiler_rt/fixunsdfsi.zig b/lib/compiler_rt/fixunsdfsi.zig index 87affbce32..8af2c5af7e 100644 --- a/lib/compiler_rt/fixunsdfsi.zig +++ b/lib/compiler_rt/fixunsdfsi.zig @@ -1,5 +1,5 @@ const common = @import("./common.zig"); -const floatToInt = @import("./float_to_int.zig").floatToInt; +const intFromFloat = @import("./int_from_float.zig").intFromFloat; pub const panic = common.panic; @@ -12,9 +12,9 @@ comptime { } pub fn __fixunsdfsi(a: f64) callconv(.C) u32 { - return floatToInt(u32, a); + return intFromFloat(u32, a); } fn __aeabi_d2uiz(a: f64) callconv(.AAPCS) u32 { - return floatToInt(u32, a); + return intFromFloat(u32, a); } diff --git a/lib/compiler_rt/fixunsdfti.zig b/lib/compiler_rt/fixunsdfti.zig index 242d84176b..67959fb98a 100644 --- a/lib/compiler_rt/fixunsdfti.zig +++ b/lib/compiler_rt/fixunsdfti.zig @@ -1,6 +1,6 @@ const builtin = @import("builtin"); const common = @import("./common.zig"); -const floatToInt = @import("./float_to_int.zig").floatToInt; +const intFromFloat = @import("./int_from_float.zig").intFromFloat; pub const panic = common.panic; @@ -13,11 +13,11 @@ comptime { } pub fn __fixunsdfti(a: f64) callconv(.C) u128 { - return floatToInt(u128, a); + return intFromFloat(u128, a); } const v2u64 = @Vector(2, u64); fn __fixunsdfti_windows_x86_64(a: f64) callconv(.C) v2u64 { - return @bitCast(v2u64, floatToInt(u128, a)); + return @bitCast(v2u64, intFromFloat(u128, a)); } diff --git a/lib/compiler_rt/fixunshfdi.zig b/lib/compiler_rt/fixunshfdi.zig index 9c70df3d5e..cd68cab757 100644 --- a/lib/compiler_rt/fixunshfdi.zig +++ b/lib/compiler_rt/fixunshfdi.zig @@ -1,5 +1,5 @@ const common = @import("./common.zig"); -const floatToInt = @import("./float_to_int.zig").floatToInt; +const intFromFloat = @import("./int_from_float.zig").intFromFloat; pub const panic = common.panic; @@ -8,5 +8,5 @@ comptime { } fn __fixunshfdi(a: f16) callconv(.C) u64 { - return floatToInt(u64, a); + return intFromFloat(u64, a); } diff --git a/lib/compiler_rt/fixunshfsi.zig b/lib/compiler_rt/fixunshfsi.zig index e5070f7a1b..aa47d7edf7 100644 --- a/lib/compiler_rt/fixunshfsi.zig +++ b/lib/compiler_rt/fixunshfsi.zig @@ -1,5 +1,5 @@ const common = @import("./common.zig"); -const floatToInt = @import("./float_to_int.zig").floatToInt; +const intFromFloat = @import("./int_from_float.zig").intFromFloat; pub const panic = common.panic; @@ -8,5 +8,5 @@ comptime { } fn __fixunshfsi(a: f16) callconv(.C) u32 { - return floatToInt(u32, a); + return intFromFloat(u32, a); } diff --git a/lib/compiler_rt/fixunshfti.zig b/lib/compiler_rt/fixunshfti.zig index 0c67d4998a..5e767dc36c 100644 --- a/lib/compiler_rt/fixunshfti.zig +++ b/lib/compiler_rt/fixunshfti.zig @@ -1,6 +1,6 @@ const builtin = @import("builtin"); const common = @import("./common.zig"); -const floatToInt = @import("./float_to_int.zig").floatToInt; +const intFromFloat = @import("./int_from_float.zig").intFromFloat; pub const panic = common.panic; @@ -13,11 +13,11 @@ comptime { } pub fn __fixunshfti(a: f16) callconv(.C) u128 { - return floatToInt(u128, a); + return intFromFloat(u128, a); } const v2u64 = @Vector(2, u64); fn __fixunshfti_windows_x86_64(a: f16) callconv(.C) v2u64 { - return @bitCast(v2u64, floatToInt(u128, a)); + return @bitCast(v2u64, intFromFloat(u128, a)); } diff --git a/lib/compiler_rt/fixunssfdi.zig b/lib/compiler_rt/fixunssfdi.zig index dd883693a7..dda6e80c65 100644 --- a/lib/compiler_rt/fixunssfdi.zig +++ b/lib/compiler_rt/fixunssfdi.zig @@ -1,5 +1,5 @@ const common = @import("./common.zig"); -const floatToInt = @import("./float_to_int.zig").floatToInt; +const intFromFloat = @import("./int_from_float.zig").intFromFloat; pub const panic = common.panic; @@ -12,9 +12,9 @@ comptime { } pub fn __fixunssfdi(a: f32) callconv(.C) u64 { - return floatToInt(u64, a); + return intFromFloat(u64, a); } fn __aeabi_f2ulz(a: f32) callconv(.AAPCS) u64 { - return floatToInt(u64, a); + return intFromFloat(u64, a); } diff --git a/lib/compiler_rt/fixunssfsi.zig b/lib/compiler_rt/fixunssfsi.zig index a071e674ae..7c935c2731 100644 --- a/lib/compiler_rt/fixunssfsi.zig +++ b/lib/compiler_rt/fixunssfsi.zig @@ -1,5 +1,5 @@ const common = @import("./common.zig"); -const floatToInt = @import("./float_to_int.zig").floatToInt; +const intFromFloat = @import("./int_from_float.zig").intFromFloat; pub const panic = common.panic; @@ -12,9 +12,9 @@ comptime { } pub fn __fixunssfsi(a: f32) callconv(.C) u32 { - return floatToInt(u32, a); + return intFromFloat(u32, a); } fn __aeabi_f2uiz(a: f32) callconv(.AAPCS) u32 { - return floatToInt(u32, a); + return intFromFloat(u32, a); } diff --git a/lib/compiler_rt/fixunssfti.zig b/lib/compiler_rt/fixunssfti.zig index ae2a27ab8e..947164b369 100644 --- a/lib/compiler_rt/fixunssfti.zig +++ b/lib/compiler_rt/fixunssfti.zig @@ -1,6 +1,6 @@ const builtin = @import("builtin"); const common = @import("./common.zig"); -const floatToInt = @import("./float_to_int.zig").floatToInt; +const intFromFloat = @import("./int_from_float.zig").intFromFloat; pub const panic = common.panic; @@ -13,11 +13,11 @@ comptime { } pub fn __fixunssfti(a: f32) callconv(.C) u128 { - return floatToInt(u128, a); + return intFromFloat(u128, a); } const v2u64 = @Vector(2, u64); fn __fixunssfti_windows_x86_64(a: f32) callconv(.C) v2u64 { - return @bitCast(v2u64, floatToInt(u128, a)); + return @bitCast(v2u64, intFromFloat(u128, a)); } diff --git a/lib/compiler_rt/fixunstfdi.zig b/lib/compiler_rt/fixunstfdi.zig index 710207b330..778388a05c 100644 --- a/lib/compiler_rt/fixunstfdi.zig +++ b/lib/compiler_rt/fixunstfdi.zig @@ -1,5 +1,5 @@ const common = @import("./common.zig"); -const floatToInt = @import("./float_to_int.zig").floatToInt; +const intFromFloat = @import("./int_from_float.zig").intFromFloat; pub const panic = common.panic; @@ -13,9 +13,9 @@ comptime { } pub fn __fixunstfdi(a: f128) callconv(.C) u64 { - return floatToInt(u64, a); + return intFromFloat(u64, a); } fn _Qp_qtoux(a: *const f128) callconv(.C) u64 { - return floatToInt(u64, a.*); + return intFromFloat(u64, a.*); } diff --git a/lib/compiler_rt/fixunstfsi.zig b/lib/compiler_rt/fixunstfsi.zig index 1b0b64c193..aabebccb99 100644 --- a/lib/compiler_rt/fixunstfsi.zig +++ b/lib/compiler_rt/fixunstfsi.zig @@ -1,5 +1,5 @@ const common = @import("./common.zig"); -const floatToInt = @import("./float_to_int.zig").floatToInt; +const intFromFloat = @import("./int_from_float.zig").intFromFloat; pub const panic = common.panic; @@ -13,9 +13,9 @@ comptime { } pub fn __fixunstfsi(a: f128) callconv(.C) u32 { - return floatToInt(u32, a); + return intFromFloat(u32, a); } fn _Qp_qtoui(a: *const f128) callconv(.C) u32 { - return floatToInt(u32, a.*); + return intFromFloat(u32, a.*); } diff --git a/lib/compiler_rt/fixunstfti.zig b/lib/compiler_rt/fixunstfti.zig index f1f03c23e4..bf9764b1aa 100644 --- a/lib/compiler_rt/fixunstfti.zig +++ b/lib/compiler_rt/fixunstfti.zig @@ -1,6 +1,6 @@ const builtin = @import("builtin"); const common = @import("./common.zig"); -const floatToInt = @import("./float_to_int.zig").floatToInt; +const intFromFloat = @import("./int_from_float.zig").intFromFloat; pub const panic = common.panic; @@ -15,11 +15,11 @@ comptime { } pub fn __fixunstfti(a: f128) callconv(.C) u128 { - return floatToInt(u128, a); + return intFromFloat(u128, a); } const v2u64 = @Vector(2, u64); fn __fixunstfti_windows_x86_64(a: f128) callconv(.C) v2u64 { - return @bitCast(v2u64, floatToInt(u128, a)); + return @bitCast(v2u64, intFromFloat(u128, a)); } diff --git a/lib/compiler_rt/fixunsxfdi.zig b/lib/compiler_rt/fixunsxfdi.zig index de1cd13806..d83cc123f4 100644 --- a/lib/compiler_rt/fixunsxfdi.zig +++ b/lib/compiler_rt/fixunsxfdi.zig @@ -1,5 +1,5 @@ const common = @import("./common.zig"); -const floatToInt = @import("./float_to_int.zig").floatToInt; +const intFromFloat = @import("./int_from_float.zig").intFromFloat; pub const panic = common.panic; @@ -8,5 +8,5 @@ comptime { } fn __fixunsxfdi(a: f80) callconv(.C) u64 { - return floatToInt(u64, a); + return intFromFloat(u64, a); } diff --git a/lib/compiler_rt/fixunsxfsi.zig b/lib/compiler_rt/fixunsxfsi.zig index 93cdcb2bab..8212b5b2c3 100644 --- a/lib/compiler_rt/fixunsxfsi.zig +++ b/lib/compiler_rt/fixunsxfsi.zig @@ -1,5 +1,5 @@ const common = @import("./common.zig"); -const floatToInt = @import("./float_to_int.zig").floatToInt; +const intFromFloat = @import("./int_from_float.zig").intFromFloat; pub const panic = common.panic; @@ -8,5 +8,5 @@ comptime { } fn __fixunsxfsi(a: f80) callconv(.C) u32 { - return floatToInt(u32, a); + return intFromFloat(u32, a); } diff --git a/lib/compiler_rt/fixunsxfti.zig b/lib/compiler_rt/fixunsxfti.zig index a34bd288c0..b9ed4d8132 100644 --- a/lib/compiler_rt/fixunsxfti.zig +++ b/lib/compiler_rt/fixunsxfti.zig @@ -1,6 +1,6 @@ const builtin = @import("builtin"); const common = @import("./common.zig"); -const floatToInt = @import("./float_to_int.zig").floatToInt; +const intFromFloat = @import("./int_from_float.zig").intFromFloat; pub const panic = common.panic; @@ -13,11 +13,11 @@ comptime { } pub fn __fixunsxfti(a: f80) callconv(.C) u128 { - return floatToInt(u128, a); + return intFromFloat(u128, a); } const v2u64 = @Vector(2, u64); fn __fixunsxfti_windows_x86_64(a: f80) callconv(.C) v2u64 { - return @bitCast(v2u64, floatToInt(u128, a)); + return @bitCast(v2u64, intFromFloat(u128, a)); } diff --git a/lib/compiler_rt/fixxfdi.zig b/lib/compiler_rt/fixxfdi.zig index 096e381629..c7510323d6 100644 --- a/lib/compiler_rt/fixxfdi.zig +++ b/lib/compiler_rt/fixxfdi.zig @@ -1,5 +1,5 @@ const common = @import("./common.zig"); -const floatToInt = @import("./float_to_int.zig").floatToInt; +const intFromFloat = @import("./int_from_float.zig").intFromFloat; pub const panic = common.panic; @@ -8,5 +8,5 @@ comptime { } fn __fixxfdi(a: f80) callconv(.C) i64 { - return floatToInt(i64, a); + return intFromFloat(i64, a); } diff --git a/lib/compiler_rt/fixxfsi.zig b/lib/compiler_rt/fixxfsi.zig index b6714d2066..afcf06e4c9 100644 --- a/lib/compiler_rt/fixxfsi.zig +++ b/lib/compiler_rt/fixxfsi.zig @@ -1,5 +1,5 @@ const common = @import("./common.zig"); -const floatToInt = @import("./float_to_int.zig").floatToInt; +const intFromFloat = @import("./int_from_float.zig").intFromFloat; pub const panic = common.panic; @@ -8,5 +8,5 @@ comptime { } fn __fixxfsi(a: f80) callconv(.C) i32 { - return floatToInt(i32, a); + return intFromFloat(i32, a); } diff --git a/lib/compiler_rt/fixxfti.zig b/lib/compiler_rt/fixxfti.zig index 2e9dbdc2fb..c9a32d8ad4 100644 --- a/lib/compiler_rt/fixxfti.zig +++ b/lib/compiler_rt/fixxfti.zig @@ -1,6 +1,6 @@ const builtin = @import("builtin"); const common = @import("./common.zig"); -const floatToInt = @import("./float_to_int.zig").floatToInt; +const intFromFloat = @import("./int_from_float.zig").intFromFloat; pub const panic = common.panic; @@ -13,11 +13,11 @@ comptime { } pub fn __fixxfti(a: f80) callconv(.C) i128 { - return floatToInt(i128, a); + return intFromFloat(i128, a); } const v2u64 = @Vector(2, u64); fn __fixxfti_windows_x86_64(a: f80) callconv(.C) v2u64 { - return @bitCast(v2u64, floatToInt(i128, a)); + return @bitCast(v2u64, intFromFloat(i128, a)); } diff --git a/lib/compiler_rt/int_to_float.zig b/lib/compiler_rt/float_from_int.zig similarity index 92% rename from lib/compiler_rt/int_to_float.zig rename to lib/compiler_rt/float_from_int.zig index 2eb7b5ade8..8a2c233cba 100644 --- a/lib/compiler_rt/int_to_float.zig +++ b/lib/compiler_rt/float_from_int.zig @@ -1,7 +1,7 @@ const Int = @import("std").meta.Int; const math = @import("std").math; -pub fn intToFloat(comptime T: type, x: anytype) T { +pub fn floatFromInt(comptime T: type, x: anytype) T { if (x == 0) return 0; // Various constants whose values follow from the type parameters. @@ -38,7 +38,7 @@ pub fn intToFloat(comptime T: type, x: anytype) T { result = @intCast(uT, (abs_val >> (shift_amt - 1))) ^ (implicit_bit << 1); // Round result, including round-to-even for exact ties - result = ((result + 1) >> 1) & ~@as(uT, @boolToInt(exact_tie)); + result = ((result + 1) >> 1) & ~@as(uT, @intFromBool(exact_tie)); } // Compute exponent @@ -54,5 +54,5 @@ pub fn intToFloat(comptime T: type, x: anytype) T { } test { - _ = @import("int_to_float_test.zig"); + _ = @import("float_from_int_test.zig"); } diff --git a/lib/compiler_rt/int_to_float_test.zig b/lib/compiler_rt/float_from_int_test.zig similarity index 95% rename from lib/compiler_rt/int_to_float_test.zig rename to lib/compiler_rt/float_from_int_test.zig index 608a925bf2..bbc315c745 100644 --- a/lib/compiler_rt/int_to_float_test.zig +++ b/lib/compiler_rt/float_from_int_test.zig @@ -812,25 +812,25 @@ test "conversion to f32" { test "conversion to f80" { if (std.debug.runtime_safety) return error.SkipZigTest; - const intToFloat = @import("./int_to_float.zig").intToFloat; + const floatFromInt = @import("./float_from_int.zig").floatFromInt; - try testing.expect(intToFloat(f80, @as(i80, -12)) == -12); - try testing.expect(@floatToInt(u80, intToFloat(f80, @as(u64, math.maxInt(u64)) + 0)) == math.maxInt(u64) + 0); - try testing.expect(@floatToInt(u80, intToFloat(f80, @as(u80, math.maxInt(u64)) + 1)) == math.maxInt(u64) + 1); + try testing.expect(floatFromInt(f80, @as(i80, -12)) == -12); + try testing.expect(@intFromFloat(u80, floatFromInt(f80, @as(u64, math.maxInt(u64)) + 0)) == math.maxInt(u64) + 0); + try testing.expect(@intFromFloat(u80, floatFromInt(f80, @as(u80, math.maxInt(u64)) + 1)) == math.maxInt(u64) + 1); - try testing.expect(intToFloat(f80, @as(u32, 0)) == 0.0); - try testing.expect(intToFloat(f80, @as(u32, 1)) == 1.0); - try testing.expect(@floatToInt(u128, intToFloat(f80, @as(u32, math.maxInt(u24)) + 0)) == math.maxInt(u24)); - try testing.expect(@floatToInt(u128, intToFloat(f80, @as(u80, math.maxInt(u64)) + 0)) == math.maxInt(u64)); - try testing.expect(@floatToInt(u128, intToFloat(f80, @as(u80, math.maxInt(u64)) + 1)) == math.maxInt(u64) + 1); // Exact - try testing.expect(@floatToInt(u128, intToFloat(f80, @as(u80, math.maxInt(u64)) + 2)) == math.maxInt(u64) + 1); // Rounds down - try testing.expect(@floatToInt(u128, intToFloat(f80, @as(u80, math.maxInt(u64)) + 3)) == math.maxInt(u64) + 3); // Tie - Exact - try testing.expect(@floatToInt(u128, intToFloat(f80, @as(u80, math.maxInt(u64)) + 4)) == math.maxInt(u64) + 5); // Rounds up + try testing.expect(floatFromInt(f80, @as(u32, 0)) == 0.0); + try testing.expect(floatFromInt(f80, @as(u32, 1)) == 1.0); + try testing.expect(@intFromFloat(u128, floatFromInt(f80, @as(u32, math.maxInt(u24)) + 0)) == math.maxInt(u24)); + try testing.expect(@intFromFloat(u128, floatFromInt(f80, @as(u80, math.maxInt(u64)) + 0)) == math.maxInt(u64)); + try testing.expect(@intFromFloat(u128, floatFromInt(f80, @as(u80, math.maxInt(u64)) + 1)) == math.maxInt(u64) + 1); // Exact + try testing.expect(@intFromFloat(u128, floatFromInt(f80, @as(u80, math.maxInt(u64)) + 2)) == math.maxInt(u64) + 1); // Rounds down + try testing.expect(@intFromFloat(u128, floatFromInt(f80, @as(u80, math.maxInt(u64)) + 3)) == math.maxInt(u64) + 3); // Tie - Exact + try testing.expect(@intFromFloat(u128, floatFromInt(f80, @as(u80, math.maxInt(u64)) + 4)) == math.maxInt(u64) + 5); // Rounds up - try testing.expect(@floatToInt(u128, intToFloat(f80, @as(u80, math.maxInt(u65)) + 0)) == math.maxInt(u65) + 1); // Rounds up - try testing.expect(@floatToInt(u128, intToFloat(f80, @as(u80, math.maxInt(u65)) + 1)) == math.maxInt(u65) + 1); // Exact - try testing.expect(@floatToInt(u128, intToFloat(f80, @as(u80, math.maxInt(u65)) + 2)) == math.maxInt(u65) + 1); // Rounds down - try testing.expect(@floatToInt(u128, intToFloat(f80, @as(u80, math.maxInt(u65)) + 3)) == math.maxInt(u65) + 1); // Tie - Rounds down - try testing.expect(@floatToInt(u128, intToFloat(f80, @as(u80, math.maxInt(u65)) + 4)) == math.maxInt(u65) + 5); // Rounds up - try testing.expect(@floatToInt(u128, intToFloat(f80, @as(u80, math.maxInt(u65)) + 5)) == math.maxInt(u65) + 5); // Exact + try testing.expect(@intFromFloat(u128, floatFromInt(f80, @as(u80, math.maxInt(u65)) + 0)) == math.maxInt(u65) + 1); // Rounds up + try testing.expect(@intFromFloat(u128, floatFromInt(f80, @as(u80, math.maxInt(u65)) + 1)) == math.maxInt(u65) + 1); // Exact + try testing.expect(@intFromFloat(u128, floatFromInt(f80, @as(u80, math.maxInt(u65)) + 2)) == math.maxInt(u65) + 1); // Rounds down + try testing.expect(@intFromFloat(u128, floatFromInt(f80, @as(u80, math.maxInt(u65)) + 3)) == math.maxInt(u65) + 1); // Tie - Rounds down + try testing.expect(@intFromFloat(u128, floatFromInt(f80, @as(u80, math.maxInt(u65)) + 4)) == math.maxInt(u65) + 5); // Rounds up + try testing.expect(@intFromFloat(u128, floatFromInt(f80, @as(u80, math.maxInt(u65)) + 5)) == math.maxInt(u65) + 5); // Exact } diff --git a/lib/compiler_rt/floatdidf.zig b/lib/compiler_rt/floatdidf.zig index 9b9df4ae70..3615e89035 100644 --- a/lib/compiler_rt/floatdidf.zig +++ b/lib/compiler_rt/floatdidf.zig @@ -1,5 +1,5 @@ const common = @import("./common.zig"); -const intToFloat = @import("./int_to_float.zig").intToFloat; +const floatFromInt = @import("./float_from_int.zig").floatFromInt; pub const panic = common.panic; @@ -12,9 +12,9 @@ comptime { } pub fn __floatdidf(a: i64) callconv(.C) f64 { - return intToFloat(f64, a); + return floatFromInt(f64, a); } fn __aeabi_l2d(a: i64) callconv(.AAPCS) f64 { - return intToFloat(f64, a); + return floatFromInt(f64, a); } diff --git a/lib/compiler_rt/floatdihf.zig b/lib/compiler_rt/floatdihf.zig index 1db7a0eac6..4d01d5c2e0 100644 --- a/lib/compiler_rt/floatdihf.zig +++ b/lib/compiler_rt/floatdihf.zig @@ -1,5 +1,5 @@ const common = @import("./common.zig"); -const intToFloat = @import("./int_to_float.zig").intToFloat; +const floatFromInt = @import("./float_from_int.zig").floatFromInt; pub const panic = common.panic; @@ -8,5 +8,5 @@ comptime { } fn __floatdihf(a: i64) callconv(.C) f16 { - return intToFloat(f16, a); + return floatFromInt(f16, a); } diff --git a/lib/compiler_rt/floatdisf.zig b/lib/compiler_rt/floatdisf.zig index 3bdcc60f20..1a1b5fc6d7 100644 --- a/lib/compiler_rt/floatdisf.zig +++ b/lib/compiler_rt/floatdisf.zig @@ -1,5 +1,5 @@ const common = @import("./common.zig"); -const intToFloat = @import("./int_to_float.zig").intToFloat; +const floatFromInt = @import("./float_from_int.zig").floatFromInt; pub const panic = common.panic; @@ -12,9 +12,9 @@ comptime { } pub fn __floatdisf(a: i64) callconv(.C) f32 { - return intToFloat(f32, a); + return floatFromInt(f32, a); } fn __aeabi_l2f(a: i64) callconv(.AAPCS) f32 { - return intToFloat(f32, a); + return floatFromInt(f32, a); } diff --git a/lib/compiler_rt/floatditf.zig b/lib/compiler_rt/floatditf.zig index 173dd79f75..5f0c49c129 100644 --- a/lib/compiler_rt/floatditf.zig +++ b/lib/compiler_rt/floatditf.zig @@ -1,5 +1,5 @@ const common = @import("./common.zig"); -const intToFloat = @import("./int_to_float.zig").intToFloat; +const floatFromInt = @import("./float_from_int.zig").floatFromInt; pub const panic = common.panic; @@ -13,9 +13,9 @@ comptime { } pub fn __floatditf(a: i64) callconv(.C) f128 { - return intToFloat(f128, a); + return floatFromInt(f128, a); } fn _Qp_xtoq(c: *f128, a: i64) callconv(.C) void { - c.* = intToFloat(f128, a); + c.* = floatFromInt(f128, a); } diff --git a/lib/compiler_rt/floatdixf.zig b/lib/compiler_rt/floatdixf.zig index c4fc9ca28f..b4d250b277 100644 --- a/lib/compiler_rt/floatdixf.zig +++ b/lib/compiler_rt/floatdixf.zig @@ -1,5 +1,5 @@ const common = @import("./common.zig"); -const intToFloat = @import("./int_to_float.zig").intToFloat; +const floatFromInt = @import("./float_from_int.zig").floatFromInt; pub const panic = common.panic; @@ -8,5 +8,5 @@ comptime { } fn __floatdixf(a: i64) callconv(.C) f80 { - return intToFloat(f80, a); + return floatFromInt(f80, a); } diff --git a/lib/compiler_rt/floatsidf.zig b/lib/compiler_rt/floatsidf.zig index 7ec7d90fba..8402c5726b 100644 --- a/lib/compiler_rt/floatsidf.zig +++ b/lib/compiler_rt/floatsidf.zig @@ -1,5 +1,5 @@ const common = @import("./common.zig"); -const intToFloat = @import("./int_to_float.zig").intToFloat; +const floatFromInt = @import("./float_from_int.zig").floatFromInt; pub const panic = common.panic; @@ -12,9 +12,9 @@ comptime { } pub fn __floatsidf(a: i32) callconv(.C) f64 { - return intToFloat(f64, a); + return floatFromInt(f64, a); } fn __aeabi_i2d(a: i32) callconv(.AAPCS) f64 { - return intToFloat(f64, a); + return floatFromInt(f64, a); } diff --git a/lib/compiler_rt/floatsihf.zig b/lib/compiler_rt/floatsihf.zig index 0a08c19847..889fa3c33f 100644 --- a/lib/compiler_rt/floatsihf.zig +++ b/lib/compiler_rt/floatsihf.zig @@ -1,5 +1,5 @@ const common = @import("./common.zig"); -const intToFloat = @import("./int_to_float.zig").intToFloat; +const floatFromInt = @import("./float_from_int.zig").floatFromInt; pub const panic = common.panic; @@ -8,5 +8,5 @@ comptime { } fn __floatsihf(a: i32) callconv(.C) f16 { - return intToFloat(f16, a); + return floatFromInt(f16, a); } diff --git a/lib/compiler_rt/floatsisf.zig b/lib/compiler_rt/floatsisf.zig index daddfb06e1..907c7a554d 100644 --- a/lib/compiler_rt/floatsisf.zig +++ b/lib/compiler_rt/floatsisf.zig @@ -1,5 +1,5 @@ const common = @import("./common.zig"); -const intToFloat = @import("./int_to_float.zig").intToFloat; +const floatFromInt = @import("./float_from_int.zig").floatFromInt; pub const panic = common.panic; @@ -12,9 +12,9 @@ comptime { } pub fn __floatsisf(a: i32) callconv(.C) f32 { - return intToFloat(f32, a); + return floatFromInt(f32, a); } fn __aeabi_i2f(a: i32) callconv(.AAPCS) f32 { - return intToFloat(f32, a); + return floatFromInt(f32, a); } diff --git a/lib/compiler_rt/floatsitf.zig b/lib/compiler_rt/floatsitf.zig index 9739b91280..2553de5f18 100644 --- a/lib/compiler_rt/floatsitf.zig +++ b/lib/compiler_rt/floatsitf.zig @@ -1,5 +1,5 @@ const common = @import("./common.zig"); -const intToFloat = @import("./int_to_float.zig").intToFloat; +const floatFromInt = @import("./float_from_int.zig").floatFromInt; pub const panic = common.panic; @@ -13,9 +13,9 @@ comptime { } pub fn __floatsitf(a: i32) callconv(.C) f128 { - return intToFloat(f128, a); + return floatFromInt(f128, a); } fn _Qp_itoq(c: *f128, a: i32) callconv(.C) void { - c.* = intToFloat(f128, a); + c.* = floatFromInt(f128, a); } diff --git a/lib/compiler_rt/floatsixf.zig b/lib/compiler_rt/floatsixf.zig index a9d3709911..fe63f1c0a8 100644 --- a/lib/compiler_rt/floatsixf.zig +++ b/lib/compiler_rt/floatsixf.zig @@ -1,5 +1,5 @@ const common = @import("./common.zig"); -const intToFloat = @import("./int_to_float.zig").intToFloat; +const floatFromInt = @import("./float_from_int.zig").floatFromInt; pub const panic = common.panic; @@ -8,5 +8,5 @@ comptime { } fn __floatsixf(a: i32) callconv(.C) f80 { - return intToFloat(f80, a); + return floatFromInt(f80, a); } diff --git a/lib/compiler_rt/floattidf.zig b/lib/compiler_rt/floattidf.zig index d70fedbfc3..c42e8f2974 100644 --- a/lib/compiler_rt/floattidf.zig +++ b/lib/compiler_rt/floattidf.zig @@ -1,6 +1,6 @@ const builtin = @import("builtin"); const common = @import("./common.zig"); -const intToFloat = @import("./int_to_float.zig").intToFloat; +const floatFromInt = @import("./float_from_int.zig").floatFromInt; pub const panic = common.panic; @@ -13,9 +13,9 @@ comptime { } pub fn __floattidf(a: i128) callconv(.C) f64 { - return intToFloat(f64, a); + return floatFromInt(f64, a); } fn __floattidf_windows_x86_64(a: @Vector(2, u64)) callconv(.C) f64 { - return intToFloat(f64, @bitCast(i128, a)); + return floatFromInt(f64, @bitCast(i128, a)); } diff --git a/lib/compiler_rt/floattihf.zig b/lib/compiler_rt/floattihf.zig index f90a57d1e0..90003660ec 100644 --- a/lib/compiler_rt/floattihf.zig +++ b/lib/compiler_rt/floattihf.zig @@ -1,6 +1,6 @@ const builtin = @import("builtin"); const common = @import("./common.zig"); -const intToFloat = @import("./int_to_float.zig").intToFloat; +const floatFromInt = @import("./float_from_int.zig").floatFromInt; pub const panic = common.panic; @@ -13,9 +13,9 @@ comptime { } pub fn __floattihf(a: i128) callconv(.C) f16 { - return intToFloat(f16, a); + return floatFromInt(f16, a); } fn __floattihf_windows_x86_64(a: @Vector(2, u64)) callconv(.C) f16 { - return intToFloat(f16, @bitCast(i128, a)); + return floatFromInt(f16, @bitCast(i128, a)); } diff --git a/lib/compiler_rt/floattisf.zig b/lib/compiler_rt/floattisf.zig index 737e1ec409..09c0b12ed0 100644 --- a/lib/compiler_rt/floattisf.zig +++ b/lib/compiler_rt/floattisf.zig @@ -1,6 +1,6 @@ const builtin = @import("builtin"); const common = @import("./common.zig"); -const intToFloat = @import("./int_to_float.zig").intToFloat; +const floatFromInt = @import("./float_from_int.zig").floatFromInt; pub const panic = common.panic; @@ -13,9 +13,9 @@ comptime { } pub fn __floattisf(a: i128) callconv(.C) f32 { - return intToFloat(f32, a); + return floatFromInt(f32, a); } fn __floattisf_windows_x86_64(a: @Vector(2, u64)) callconv(.C) f32 { - return intToFloat(f32, @bitCast(i128, a)); + return floatFromInt(f32, @bitCast(i128, a)); } diff --git a/lib/compiler_rt/floattitf.zig b/lib/compiler_rt/floattitf.zig index d14264fb04..ae0ecbb98a 100644 --- a/lib/compiler_rt/floattitf.zig +++ b/lib/compiler_rt/floattitf.zig @@ -1,6 +1,6 @@ const builtin = @import("builtin"); const common = @import("./common.zig"); -const intToFloat = @import("./int_to_float.zig").intToFloat; +const floatFromInt = @import("./float_from_int.zig").floatFromInt; pub const panic = common.panic; @@ -15,9 +15,9 @@ comptime { } pub fn __floattitf(a: i128) callconv(.C) f128 { - return intToFloat(f128, a); + return floatFromInt(f128, a); } fn __floattitf_windows_x86_64(a: @Vector(2, u64)) callconv(.C) f128 { - return intToFloat(f128, @bitCast(i128, a)); + return floatFromInt(f128, @bitCast(i128, a)); } diff --git a/lib/compiler_rt/floattixf.zig b/lib/compiler_rt/floattixf.zig index 1af4f83965..9c2339ff8a 100644 --- a/lib/compiler_rt/floattixf.zig +++ b/lib/compiler_rt/floattixf.zig @@ -1,6 +1,6 @@ const builtin = @import("builtin"); const common = @import("./common.zig"); -const intToFloat = @import("./int_to_float.zig").intToFloat; +const floatFromInt = @import("./float_from_int.zig").floatFromInt; pub const panic = common.panic; @@ -13,9 +13,9 @@ comptime { } pub fn __floattixf(a: i128) callconv(.C) f80 { - return intToFloat(f80, a); + return floatFromInt(f80, a); } fn __floattixf_windows_x86_64(a: @Vector(2, u64)) callconv(.C) f80 { - return intToFloat(f80, @bitCast(i128, a)); + return floatFromInt(f80, @bitCast(i128, a)); } diff --git a/lib/compiler_rt/floatundidf.zig b/lib/compiler_rt/floatundidf.zig index db4cc6505e..b158fb546d 100644 --- a/lib/compiler_rt/floatundidf.zig +++ b/lib/compiler_rt/floatundidf.zig @@ -1,5 +1,5 @@ const common = @import("./common.zig"); -const intToFloat = @import("./int_to_float.zig").intToFloat; +const floatFromInt = @import("./float_from_int.zig").floatFromInt; pub const panic = common.panic; @@ -12,9 +12,9 @@ comptime { } pub fn __floatundidf(a: u64) callconv(.C) f64 { - return intToFloat(f64, a); + return floatFromInt(f64, a); } fn __aeabi_ul2d(a: u64) callconv(.AAPCS) f64 { - return intToFloat(f64, a); + return floatFromInt(f64, a); } diff --git a/lib/compiler_rt/floatundihf.zig b/lib/compiler_rt/floatundihf.zig index e6c6a79d5e..1c534c9175 100644 --- a/lib/compiler_rt/floatundihf.zig +++ b/lib/compiler_rt/floatundihf.zig @@ -1,5 +1,5 @@ const common = @import("./common.zig"); -const intToFloat = @import("./int_to_float.zig").intToFloat; +const floatFromInt = @import("./float_from_int.zig").floatFromInt; pub const panic = common.panic; @@ -8,5 +8,5 @@ comptime { } fn __floatundihf(a: u64) callconv(.C) f16 { - return intToFloat(f16, a); + return floatFromInt(f16, a); } diff --git a/lib/compiler_rt/floatundisf.zig b/lib/compiler_rt/floatundisf.zig index eb17c0f657..c9dffa7e36 100644 --- a/lib/compiler_rt/floatundisf.zig +++ b/lib/compiler_rt/floatundisf.zig @@ -1,5 +1,5 @@ const common = @import("./common.zig"); -const intToFloat = @import("./int_to_float.zig").intToFloat; +const floatFromInt = @import("./float_from_int.zig").floatFromInt; pub const panic = common.panic; @@ -12,9 +12,9 @@ comptime { } pub fn __floatundisf(a: u64) callconv(.C) f32 { - return intToFloat(f32, a); + return floatFromInt(f32, a); } fn __aeabi_ul2f(a: u64) callconv(.AAPCS) f32 { - return intToFloat(f32, a); + return floatFromInt(f32, a); } diff --git a/lib/compiler_rt/floatunditf.zig b/lib/compiler_rt/floatunditf.zig index 0bfa36d6e1..d573d095bc 100644 --- a/lib/compiler_rt/floatunditf.zig +++ b/lib/compiler_rt/floatunditf.zig @@ -1,5 +1,5 @@ const common = @import("./common.zig"); -const intToFloat = @import("./int_to_float.zig").intToFloat; +const floatFromInt = @import("./float_from_int.zig").floatFromInt; pub const panic = common.panic; @@ -13,9 +13,9 @@ comptime { } pub fn __floatunditf(a: u64) callconv(.C) f128 { - return intToFloat(f128, a); + return floatFromInt(f128, a); } fn _Qp_uxtoq(c: *f128, a: u64) callconv(.C) void { - c.* = intToFloat(f128, a); + c.* = floatFromInt(f128, a); } diff --git a/lib/compiler_rt/floatundixf.zig b/lib/compiler_rt/floatundixf.zig index 22f885167f..33836f3ccb 100644 --- a/lib/compiler_rt/floatundixf.zig +++ b/lib/compiler_rt/floatundixf.zig @@ -1,5 +1,5 @@ const common = @import("./common.zig"); -const intToFloat = @import("./int_to_float.zig").intToFloat; +const floatFromInt = @import("./float_from_int.zig").floatFromInt; pub const panic = common.panic; @@ -8,5 +8,5 @@ comptime { } fn __floatundixf(a: u64) callconv(.C) f80 { - return intToFloat(f80, a); + return floatFromInt(f80, a); } diff --git a/lib/compiler_rt/floatunsidf.zig b/lib/compiler_rt/floatunsidf.zig index ef5bce2afa..3ffd79655a 100644 --- a/lib/compiler_rt/floatunsidf.zig +++ b/lib/compiler_rt/floatunsidf.zig @@ -1,5 +1,5 @@ const common = @import("./common.zig"); -const intToFloat = @import("./int_to_float.zig").intToFloat; +const floatFromInt = @import("./float_from_int.zig").floatFromInt; pub const panic = common.panic; @@ -12,9 +12,9 @@ comptime { } pub fn __floatunsidf(a: u32) callconv(.C) f64 { - return intToFloat(f64, a); + return floatFromInt(f64, a); } fn __aeabi_ui2d(a: u32) callconv(.AAPCS) f64 { - return intToFloat(f64, a); + return floatFromInt(f64, a); } diff --git a/lib/compiler_rt/floatunsihf.zig b/lib/compiler_rt/floatunsihf.zig index 0b43d61f4c..fcfbbaf646 100644 --- a/lib/compiler_rt/floatunsihf.zig +++ b/lib/compiler_rt/floatunsihf.zig @@ -1,5 +1,5 @@ const common = @import("./common.zig"); -const intToFloat = @import("./int_to_float.zig").intToFloat; +const floatFromInt = @import("./float_from_int.zig").floatFromInt; pub const panic = common.panic; @@ -8,5 +8,5 @@ comptime { } pub fn __floatunsihf(a: u32) callconv(.C) f16 { - return intToFloat(f16, a); + return floatFromInt(f16, a); } diff --git a/lib/compiler_rt/floatunsisf.zig b/lib/compiler_rt/floatunsisf.zig index f85d1bb013..b7cc567ff0 100644 --- a/lib/compiler_rt/floatunsisf.zig +++ b/lib/compiler_rt/floatunsisf.zig @@ -1,5 +1,5 @@ const common = @import("./common.zig"); -const intToFloat = @import("./int_to_float.zig").intToFloat; +const floatFromInt = @import("./float_from_int.zig").floatFromInt; pub const panic = common.panic; @@ -12,9 +12,9 @@ comptime { } pub fn __floatunsisf(a: u32) callconv(.C) f32 { - return intToFloat(f32, a); + return floatFromInt(f32, a); } fn __aeabi_ui2f(a: u32) callconv(.AAPCS) f32 { - return intToFloat(f32, a); + return floatFromInt(f32, a); } diff --git a/lib/compiler_rt/floatunsitf.zig b/lib/compiler_rt/floatunsitf.zig index ef9593cdf6..0414784b83 100644 --- a/lib/compiler_rt/floatunsitf.zig +++ b/lib/compiler_rt/floatunsitf.zig @@ -1,5 +1,5 @@ const common = @import("./common.zig"); -const intToFloat = @import("./int_to_float.zig").intToFloat; +const floatFromInt = @import("./float_from_int.zig").floatFromInt; pub const panic = common.panic; @@ -13,9 +13,9 @@ comptime { } pub fn __floatunsitf(a: u32) callconv(.C) f128 { - return intToFloat(f128, a); + return floatFromInt(f128, a); } fn _Qp_uitoq(c: *f128, a: u32) callconv(.C) void { - c.* = intToFloat(f128, a); + c.* = floatFromInt(f128, a); } diff --git a/lib/compiler_rt/floatunsixf.zig b/lib/compiler_rt/floatunsixf.zig index cd402e227d..866f3f8c47 100644 --- a/lib/compiler_rt/floatunsixf.zig +++ b/lib/compiler_rt/floatunsixf.zig @@ -1,5 +1,5 @@ const common = @import("./common.zig"); -const intToFloat = @import("./int_to_float.zig").intToFloat; +const floatFromInt = @import("./float_from_int.zig").floatFromInt; pub const panic = common.panic; @@ -8,5 +8,5 @@ comptime { } fn __floatunsixf(a: u32) callconv(.C) f80 { - return intToFloat(f80, a); + return floatFromInt(f80, a); } diff --git a/lib/compiler_rt/floatuntidf.zig b/lib/compiler_rt/floatuntidf.zig index d3a685a1ce..a2b46506f0 100644 --- a/lib/compiler_rt/floatuntidf.zig +++ b/lib/compiler_rt/floatuntidf.zig @@ -1,6 +1,6 @@ const builtin = @import("builtin"); const common = @import("./common.zig"); -const intToFloat = @import("./int_to_float.zig").intToFloat; +const floatFromInt = @import("./float_from_int.zig").floatFromInt; pub const panic = common.panic; @@ -13,9 +13,9 @@ comptime { } pub fn __floatuntidf(a: u128) callconv(.C) f64 { - return intToFloat(f64, a); + return floatFromInt(f64, a); } fn __floatuntidf_windows_x86_64(a: @Vector(2, u64)) callconv(.C) f64 { - return intToFloat(f64, @bitCast(u128, a)); + return floatFromInt(f64, @bitCast(u128, a)); } diff --git a/lib/compiler_rt/floatuntihf.zig b/lib/compiler_rt/floatuntihf.zig index 9102960e8d..f493453c91 100644 --- a/lib/compiler_rt/floatuntihf.zig +++ b/lib/compiler_rt/floatuntihf.zig @@ -1,6 +1,6 @@ const builtin = @import("builtin"); const common = @import("./common.zig"); -const intToFloat = @import("./int_to_float.zig").intToFloat; +const floatFromInt = @import("./float_from_int.zig").floatFromInt; pub const panic = common.panic; @@ -13,9 +13,9 @@ comptime { } pub fn __floatuntihf(a: u128) callconv(.C) f16 { - return intToFloat(f16, a); + return floatFromInt(f16, a); } fn __floatuntihf_windows_x86_64(a: @Vector(2, u64)) callconv(.C) f16 { - return intToFloat(f16, @bitCast(u128, a)); + return floatFromInt(f16, @bitCast(u128, a)); } diff --git a/lib/compiler_rt/floatuntisf.zig b/lib/compiler_rt/floatuntisf.zig index 7ee013339d..9df7b833ea 100644 --- a/lib/compiler_rt/floatuntisf.zig +++ b/lib/compiler_rt/floatuntisf.zig @@ -1,6 +1,6 @@ const builtin = @import("builtin"); const common = @import("./common.zig"); -const intToFloat = @import("./int_to_float.zig").intToFloat; +const floatFromInt = @import("./float_from_int.zig").floatFromInt; pub const panic = common.panic; @@ -13,9 +13,9 @@ comptime { } pub fn __floatuntisf(a: u128) callconv(.C) f32 { - return intToFloat(f32, a); + return floatFromInt(f32, a); } fn __floatuntisf_windows_x86_64(a: @Vector(2, u64)) callconv(.C) f32 { - return intToFloat(f32, @bitCast(u128, a)); + return floatFromInt(f32, @bitCast(u128, a)); } diff --git a/lib/compiler_rt/floatuntitf.zig b/lib/compiler_rt/floatuntitf.zig index 41e715e013..55a5ab4da1 100644 --- a/lib/compiler_rt/floatuntitf.zig +++ b/lib/compiler_rt/floatuntitf.zig @@ -1,6 +1,6 @@ const builtin = @import("builtin"); const common = @import("./common.zig"); -const intToFloat = @import("./int_to_float.zig").intToFloat; +const floatFromInt = @import("./float_from_int.zig").floatFromInt; pub const panic = common.panic; @@ -15,9 +15,9 @@ comptime { } pub fn __floatuntitf(a: u128) callconv(.C) f128 { - return intToFloat(f128, a); + return floatFromInt(f128, a); } fn __floatuntitf_windows_x86_64(a: @Vector(2, u64)) callconv(.C) f128 { - return intToFloat(f128, @bitCast(u128, a)); + return floatFromInt(f128, @bitCast(u128, a)); } diff --git a/lib/compiler_rt/floatuntixf.zig b/lib/compiler_rt/floatuntixf.zig index 877203bd22..cbf597ca89 100644 --- a/lib/compiler_rt/floatuntixf.zig +++ b/lib/compiler_rt/floatuntixf.zig @@ -1,6 +1,6 @@ const builtin = @import("builtin"); const common = @import("./common.zig"); -const intToFloat = @import("./int_to_float.zig").intToFloat; +const floatFromInt = @import("./float_from_int.zig").floatFromInt; pub const panic = common.panic; @@ -13,9 +13,9 @@ comptime { } pub fn __floatuntixf(a: u128) callconv(.C) f80 { - return intToFloat(f80, a); + return floatFromInt(f80, a); } fn __floatuntixf_windows_x86_64(a: @Vector(2, u64)) callconv(.C) f80 { - return intToFloat(f80, @bitCast(u128, a)); + return floatFromInt(f80, @bitCast(u128, a)); } diff --git a/lib/compiler_rt/gedf2.zig b/lib/compiler_rt/gedf2.zig index c887a9b6e4..0ade0cf46a 100644 --- a/lib/compiler_rt/gedf2.zig +++ b/lib/compiler_rt/gedf2.zig @@ -18,7 +18,7 @@ comptime { /// "These functions return a value greater than or equal to zero if neither /// argument is NaN, and a is greater than or equal to b." pub fn __gedf2(a: f64, b: f64) callconv(.C) i32 { - return @enumToInt(comparef.cmpf2(f64, comparef.GE, a, b)); + return @intFromEnum(comparef.cmpf2(f64, comparef.GE, a, b)); } /// "These functions return a value greater than zero if neither argument is NaN, @@ -28,9 +28,9 @@ pub fn __gtdf2(a: f64, b: f64) callconv(.C) i32 { } fn __aeabi_dcmpge(a: f64, b: f64) callconv(.AAPCS) i32 { - return @boolToInt(comparef.cmpf2(f64, comparef.GE, a, b) != .Less); + return @intFromBool(comparef.cmpf2(f64, comparef.GE, a, b) != .Less); } fn __aeabi_dcmpgt(a: f64, b: f64) callconv(.AAPCS) i32 { - return @boolToInt(comparef.cmpf2(f64, comparef.GE, a, b) == .Greater); + return @intFromBool(comparef.cmpf2(f64, comparef.GE, a, b) == .Greater); } diff --git a/lib/compiler_rt/gehf2.zig b/lib/compiler_rt/gehf2.zig index 6bea4e164a..c6e7b90a65 100644 --- a/lib/compiler_rt/gehf2.zig +++ b/lib/compiler_rt/gehf2.zig @@ -13,7 +13,7 @@ comptime { /// "These functions return a value greater than or equal to zero if neither /// argument is NaN, and a is greater than or equal to b." pub fn __gehf2(a: f16, b: f16) callconv(.C) i32 { - return @enumToInt(comparef.cmpf2(f16, comparef.GE, a, b)); + return @intFromEnum(comparef.cmpf2(f16, comparef.GE, a, b)); } /// "These functions return a value greater than zero if neither argument is NaN, diff --git a/lib/compiler_rt/gesf2.zig b/lib/compiler_rt/gesf2.zig index 44439976bb..44d8b5cc75 100644 --- a/lib/compiler_rt/gesf2.zig +++ b/lib/compiler_rt/gesf2.zig @@ -18,7 +18,7 @@ comptime { /// "These functions return a value greater than or equal to zero if neither /// argument is NaN, and a is greater than or equal to b." pub fn __gesf2(a: f32, b: f32) callconv(.C) i32 { - return @enumToInt(comparef.cmpf2(f32, comparef.GE, a, b)); + return @intFromEnum(comparef.cmpf2(f32, comparef.GE, a, b)); } /// "These functions return a value greater than zero if neither argument is NaN, @@ -28,9 +28,9 @@ pub fn __gtsf2(a: f32, b: f32) callconv(.C) i32 { } fn __aeabi_fcmpge(a: f32, b: f32) callconv(.AAPCS) i32 { - return @boolToInt(comparef.cmpf2(f32, comparef.GE, a, b) != .Less); + return @intFromBool(comparef.cmpf2(f32, comparef.GE, a, b) != .Less); } fn __aeabi_fcmpgt(a: f32, b: f32) callconv(.AAPCS) i32 { - return @boolToInt(comparef.cmpf2(f32, comparef.LE, a, b) == .Greater); + return @intFromBool(comparef.cmpf2(f32, comparef.LE, a, b) == .Greater); } diff --git a/lib/compiler_rt/getf2.zig b/lib/compiler_rt/getf2.zig index 1a5c06af3d..07e87ed55c 100644 --- a/lib/compiler_rt/getf2.zig +++ b/lib/compiler_rt/getf2.zig @@ -20,7 +20,7 @@ comptime { /// "These functions return a value greater than or equal to zero if neither /// argument is NaN, and a is greater than or equal to b." fn __getf2(a: f128, b: f128) callconv(.C) i32 { - return @enumToInt(comparef.cmpf2(f128, comparef.GE, a, b)); + return @intFromEnum(comparef.cmpf2(f128, comparef.GE, a, b)); } /// "These functions return a value greater than zero if neither argument is NaN, diff --git a/lib/compiler_rt/gexf2.zig b/lib/compiler_rt/gexf2.zig index bf0b0edccb..94f735b8c2 100644 --- a/lib/compiler_rt/gexf2.zig +++ b/lib/compiler_rt/gexf2.zig @@ -9,7 +9,7 @@ comptime { } fn __gexf2(a: f80, b: f80) callconv(.C) i32 { - return @enumToInt(comparef.cmp_f80(comparef.GE, a, b)); + return @intFromEnum(comparef.cmp_f80(comparef.GE, a, b)); } fn __gtxf2(a: f80, b: f80) callconv(.C) i32 { diff --git a/lib/compiler_rt/float_to_int.zig b/lib/compiler_rt/int_from_float.zig similarity index 94% rename from lib/compiler_rt/float_to_int.zig rename to lib/compiler_rt/int_from_float.zig index 6fc7286f68..78397a8131 100644 --- a/lib/compiler_rt/float_to_int.zig +++ b/lib/compiler_rt/int_from_float.zig @@ -2,7 +2,7 @@ const Int = @import("std").meta.Int; const math = @import("std").math; const Log2Int = math.Log2Int; -pub inline fn floatToInt(comptime I: type, a: anytype) I { +pub inline fn intFromFloat(comptime I: type, a: anytype) I { const F = @TypeOf(a); const float_bits = @typeInfo(F).Float.bits; const int_bits = @typeInfo(I).Int.bits; @@ -51,5 +51,5 @@ pub inline fn floatToInt(comptime I: type, a: anytype) I { } test { - _ = @import("float_to_int_test.zig"); + _ = @import("int_from_float_test.zig"); } diff --git a/lib/compiler_rt/float_to_int_test.zig b/lib/compiler_rt/int_from_float_test.zig similarity index 100% rename from lib/compiler_rt/float_to_int_test.zig rename to lib/compiler_rt/int_from_float_test.zig diff --git a/lib/compiler_rt/log.zig b/lib/compiler_rt/log.zig index 71d90f7c3a..622d509a2f 100644 --- a/lib/compiler_rt/log.zig +++ b/lib/compiler_rt/log.zig @@ -77,7 +77,7 @@ pub fn logf(x_: f32) callconv(.C) f32 { const t2 = z * (Lg1 + w * Lg3); const R = t2 + t1; const hfsq = 0.5 * f * f; - const dk = @intToFloat(f32, k); + const dk = @floatFromInt(f32, k); return s * (hfsq + R) + dk * ln2_lo - hfsq + f + dk * ln2_hi; } @@ -133,7 +133,7 @@ pub fn log(x_: f64) callconv(.C) f64 { const t1 = w * (Lg2 + w * (Lg4 + w * Lg6)); const t2 = z * (Lg1 + w * (Lg3 + w * (Lg5 + w * Lg7))); const R = t2 + t1; - const dk = @intToFloat(f64, k); + const dk = @floatFromInt(f64, k); return s * (hfsq + R) + dk * ln2_lo - hfsq + f + dk * ln2_hi; } diff --git a/lib/compiler_rt/log10.zig b/lib/compiler_rt/log10.zig index 5c345ff12f..d45a3d8a40 100644 --- a/lib/compiler_rt/log10.zig +++ b/lib/compiler_rt/log10.zig @@ -86,7 +86,7 @@ pub fn log10f(x_: f32) callconv(.C) f32 { u &= 0xFFFFF000; hi = @bitCast(f32, u); const lo = f - hi - hfsq + s * (hfsq + R); - const dk = @intToFloat(f32, k); + const dk = @floatFromInt(f32, k); return dk * log10_2lo + (lo + hi) * ivln10lo + lo * ivln10hi + hi * ivln10hi + dk * log10_2hi; } @@ -154,7 +154,7 @@ pub fn log10(x_: f64) callconv(.C) f64 { // val_hi + val_lo ~ log10(1 + f) + k * log10(2) var val_hi = hi * ivln10hi; - const dk = @intToFloat(f64, k); + const dk = @floatFromInt(f64, k); const y = dk * log10_2hi; var val_lo = dk * log10_2lo + (lo + hi) * ivln10lo + lo * ivln10hi; diff --git a/lib/compiler_rt/log2.zig b/lib/compiler_rt/log2.zig index 612c978598..29595d07d9 100644 --- a/lib/compiler_rt/log2.zig +++ b/lib/compiler_rt/log2.zig @@ -84,7 +84,7 @@ pub fn log2f(x_: f32) callconv(.C) f32 { u &= 0xFFFFF000; hi = @bitCast(f32, u); const lo = f - hi - hfsq + s * (hfsq + R); - return (lo + hi) * ivln2lo + lo * ivln2hi + hi * ivln2hi + @intToFloat(f32, k); + return (lo + hi) * ivln2lo + lo * ivln2hi + hi * ivln2hi + @floatFromInt(f32, k); } pub fn log2(x_: f64) callconv(.C) f64 { @@ -150,7 +150,7 @@ pub fn log2(x_: f64) callconv(.C) f64 { var val_lo = (lo + hi) * ivln2lo + lo * ivln2hi; // spadd(val_hi, val_lo, y) - const y = @intToFloat(f64, k); + const y = @floatFromInt(f64, k); const ww = y + val_hi; val_lo += (y - ww) + val_hi; val_hi = ww; diff --git a/lib/compiler_rt/memmove.zig b/lib/compiler_rt/memmove.zig index 61ccb1205d..bb772b3217 100644 --- a/lib/compiler_rt/memmove.zig +++ b/lib/compiler_rt/memmove.zig @@ -8,7 +8,7 @@ comptime { pub fn memmove(dest: ?[*]u8, src: ?[*]const u8, n: usize) callconv(.C) ?[*]u8 { @setRuntimeSafety(false); - if (@ptrToInt(dest) < @ptrToInt(src)) { + if (@intFromPtr(dest) < @intFromPtr(src)) { var index: usize = 0; while (index != n) : (index += 1) { dest.?[index] = src.?[index]; diff --git a/lib/compiler_rt/mulf3.zig b/lib/compiler_rt/mulf3.zig index b02bd81671..9652782a49 100644 --- a/lib/compiler_rt/mulf3.zig +++ b/lib/compiler_rt/mulf3.zig @@ -126,7 +126,7 @@ pub inline fn mulf3(comptime T: type, a: T, b: T) T { // Otherwise, shift the significand of the result so that the round // bit is the high bit of productLo. const sticky = wideShrWithTruncation(ZSignificand, &productHi, &productLo, shift); - productLo |= @boolToInt(sticky); + productLo |= @intFromBool(sticky); result = productHi; // We include the integer bit so that rounding will carry to the exponent, diff --git a/lib/compiler_rt/os_version_check.zig b/lib/compiler_rt/os_version_check.zig index 2c6cdb54dc..187bb4ff35 100644 --- a/lib/compiler_rt/os_version_check.zig +++ b/lib/compiler_rt/os_version_check.zig @@ -36,7 +36,7 @@ const __isPlatformVersionAtLeast = if (builtin.os.tag.isDarwin()) struct { .platform = platform, .version = constructVersion(major, minor, subminor), }; - return @boolToInt(_availability_version_check(1, &[_]dyld_build_version_t{build_version})); + return @intFromBool(_availability_version_check(1, &[_]dyld_build_version_t{build_version})); } // _availability_version_check darwin API support. diff --git a/lib/compiler_rt/paritydi2_test.zig b/lib/compiler_rt/paritydi2_test.zig index a13abda5fe..1cf587b1ef 100644 --- a/lib/compiler_rt/paritydi2_test.zig +++ b/lib/compiler_rt/paritydi2_test.zig @@ -9,7 +9,7 @@ fn paritydi2Naive(a: i64) i32 { has_parity = !has_parity; x = x & (x - 1); } - return @intCast(i32, @boolToInt(has_parity)); + return @intCast(i32, @intFromBool(has_parity)); } fn test__paritydi2(a: i64) !void { diff --git a/lib/compiler_rt/paritysi2_test.zig b/lib/compiler_rt/paritysi2_test.zig index f63854e34f..c1bac5eaae 100644 --- a/lib/compiler_rt/paritysi2_test.zig +++ b/lib/compiler_rt/paritysi2_test.zig @@ -9,7 +9,7 @@ fn paritysi2Naive(a: i32) i32 { has_parity = !has_parity; x = x & (x - 1); } - return @intCast(i32, @boolToInt(has_parity)); + return @intCast(i32, @intFromBool(has_parity)); } fn test__paritysi2(a: i32) !void { diff --git a/lib/compiler_rt/parityti2_test.zig b/lib/compiler_rt/parityti2_test.zig index e018932555..8a869fe718 100644 --- a/lib/compiler_rt/parityti2_test.zig +++ b/lib/compiler_rt/parityti2_test.zig @@ -9,7 +9,7 @@ fn parityti2Naive(a: i128) i32 { has_parity = !has_parity; x = x & (x - 1); } - return @intCast(i32, @boolToInt(has_parity)); + return @intCast(i32, @intFromBool(has_parity)); } fn test__parityti2(a: i128) !void { diff --git a/lib/compiler_rt/rem_pio2.zig b/lib/compiler_rt/rem_pio2.zig index 73d477ee12..315a99c308 100644 --- a/lib/compiler_rt/rem_pio2.zig +++ b/lib/compiler_rt/rem_pio2.zig @@ -41,7 +41,7 @@ fn medium(ix: u32, x: f64, y: *[2]f64) i32 { // rint(x/(pi/2)) @"fn" = x * invpio2 + toint - toint; - n = @floatToInt(i32, @"fn"); + n = @intFromFloat(i32, @"fn"); r = x - @"fn" * pio2_1; w = @"fn" * pio2_1t; // 1st round, good to 85 bits // Matters with directed rounding. @@ -178,7 +178,7 @@ pub fn rem_pio2(x: f64, y: *[2]f64) i32 { i = 0; while (i < 2) : (i += 1) { - tx[U(i)] = @intToFloat(f64, @floatToInt(i32, z)); + tx[U(i)] = @floatFromInt(f64, @intFromFloat(i32, z)); z = (z - tx[U(i)]) * 0x1p24; } tx[U(i)] = z; diff --git a/lib/compiler_rt/rem_pio2_large.zig b/lib/compiler_rt/rem_pio2_large.zig index c8a53b741c..afded18387 100644 --- a/lib/compiler_rt/rem_pio2_large.zig +++ b/lib/compiler_rt/rem_pio2_large.zig @@ -295,7 +295,7 @@ pub fn rem_pio2_large(x: []f64, y: []f64, e0: i32, nx: i32, prec: usize) i32 { i += 1; j += 1; }) { - f[U(i)] = if (j < 0) 0.0 else @intToFloat(f64, ipio2[U(j)]); + f[U(i)] = if (j < 0) 0.0 else @floatFromInt(f64, ipio2[U(j)]); } // compute q[0],q[1],...q[jk] @@ -322,16 +322,16 @@ pub fn rem_pio2_large(x: []f64, y: []f64, e0: i32, nx: i32, prec: usize) i32 { i += 1; j -= 1; }) { - fw = @intToFloat(f64, @floatToInt(i32, 0x1p-24 * z)); - iq[U(i)] = @floatToInt(i32, z - 0x1p24 * fw); + fw = @floatFromInt(f64, @intFromFloat(i32, 0x1p-24 * z)); + iq[U(i)] = @intFromFloat(i32, z - 0x1p24 * fw); z = q[U(j - 1)] + fw; } // compute n z = math.scalbn(z, q0); // actual value of z z -= 8.0 * @floor(z * 0.125); // trim off integer >= 8 - n = @floatToInt(i32, z); - z -= @intToFloat(f64, n); + n = @intFromFloat(i32, z); + z -= @floatFromInt(f64, n); ih = 0; if (q0 > 0) { // need iq[jz-1] to determine n i = iq[U(jz - 1)] >> @intCast(u5, 24 - q0); @@ -390,7 +390,7 @@ pub fn rem_pio2_large(x: []f64, y: []f64, e0: i32, nx: i32, prec: usize) i32 { i = jz + 1; while (i <= jz + k) : (i += 1) { // add q[jz+1] to q[jz+k] - f[U(jx + i)] = @intToFloat(f64, ipio2[U(jv + i)]); + f[U(jx + i)] = @floatFromInt(f64, ipio2[U(jv + i)]); j = 0; fw = 0; while (j <= jx) : (j += 1) { @@ -414,13 +414,13 @@ pub fn rem_pio2_large(x: []f64, y: []f64, e0: i32, nx: i32, prec: usize) i32 { } else { // break z into 24-bit if necessary z = math.scalbn(z, -q0); if (z >= 0x1p24) { - fw = @intToFloat(f64, @floatToInt(i32, 0x1p-24 * z)); - iq[U(jz)] = @floatToInt(i32, z - 0x1p24 * fw); + fw = @floatFromInt(f64, @intFromFloat(i32, 0x1p-24 * z)); + iq[U(jz)] = @intFromFloat(i32, z - 0x1p24 * fw); jz += 1; q0 += 24; - iq[U(jz)] = @floatToInt(i32, fw); + iq[U(jz)] = @intFromFloat(i32, fw); } else { - iq[U(jz)] = @floatToInt(i32, z); + iq[U(jz)] = @intFromFloat(i32, z); } } @@ -428,7 +428,7 @@ pub fn rem_pio2_large(x: []f64, y: []f64, e0: i32, nx: i32, prec: usize) i32 { fw = math.scalbn(@as(f64, 1.0), q0); i = jz; while (i >= 0) : (i -= 1) { - q[U(i)] = fw * @intToFloat(f64, iq[U(i)]); + q[U(i)] = fw * @floatFromInt(f64, iq[U(i)]); fw *= 0x1p-24; } diff --git a/lib/compiler_rt/rem_pio2f.zig b/lib/compiler_rt/rem_pio2f.zig index 34397dd734..9e47bbcb24 100644 --- a/lib/compiler_rt/rem_pio2f.zig +++ b/lib/compiler_rt/rem_pio2f.zig @@ -37,7 +37,7 @@ pub fn rem_pio2f(x: f32, y: *f64) i32 { if (ix < 0x4dc90fdb) { // |x| ~< 2^28*(pi/2), medium size // Use a specialized rint() to get fn. @"fn" = @floatCast(f64, x) * invpio2 + toint - toint; - n = @floatToInt(i32, @"fn"); + n = @intFromFloat(i32, @"fn"); y.* = x - @"fn" * pio2_1 - @"fn" * pio2_1t; // Matters with directed rounding. if (y.* < -pio4) { diff --git a/lib/compiler_rt/trig.zig b/lib/compiler_rt/trig.zig index 8ece83515e..4a9629e5c0 100644 --- a/lib/compiler_rt/trig.zig +++ b/lib/compiler_rt/trig.zig @@ -222,7 +222,7 @@ pub fn __tan(x_: f64, y_: f64, odd: bool) f64 { r = y + z * (s * (r + v) + y) + s * T[0]; w = x + r; if (big) { - s = 1 - 2 * @intToFloat(f64, @boolToInt(odd)); + s = 1 - 2 * @floatFromInt(f64, @intFromBool(odd)); v = s - 2.0 * (x + (r - w * w / (w + s))); return if (sign) -v else v; } diff --git a/lib/compiler_rt/truncf.zig b/lib/compiler_rt/truncf.zig index c012bcee62..3de342fc99 100644 --- a/lib/compiler_rt/truncf.zig +++ b/lib/compiler_rt/truncf.zig @@ -81,7 +81,7 @@ pub inline fn truncf(comptime dst_t: type, comptime src_t: type, a: src_t) dst_t if (shift > srcSigBits) { absResult = 0; } else { - const sticky: src_rep_t = @boolToInt(significand << @intCast(SrcShift, srcBits - shift) != 0); + const sticky: src_rep_t = @intFromBool(significand << @intCast(SrcShift, srcBits - shift) != 0); const denormalizedSignificand: src_rep_t = significand >> @intCast(SrcShift, shift) | sticky; absResult = @intCast(dst_rep_t, denormalizedSignificand >> (srcSigBits - dstSigBits)); const roundBits: src_rep_t = denormalizedSignificand & roundMask; @@ -164,7 +164,7 @@ pub inline fn trunc_f80(comptime dst_t: type, a: f80) dst_t { if (shift > src_sig_bits) { abs_result = 0; } else { - const sticky = @boolToInt(a_rep.fraction << @intCast(u6, shift) != 0); + const sticky = @intFromBool(a_rep.fraction << @intCast(u6, shift) != 0); const denormalized_significand = a_rep.fraction >> @intCast(u6, shift) | sticky; abs_result = @intCast(dst_rep_t, denormalized_significand >> (src_sig_bits - dst_sig_bits)); const round_bits = denormalized_significand & round_mask; diff --git a/lib/docs/main.js b/lib/docs/main.js index 0402f0f6af..c9c34ffe98 100644 --- a/lib/docs/main.js +++ b/lib/docs/main.js @@ -1234,9 +1234,9 @@ const NAV_MODES = { const name = getAstNode(field).name; return name; } - case "enumToInt": { - const enumToInt = zigAnalysis.exprs[expr.enumToInt]; - return "@enumToInt(" + exprName(enumToInt, opts) + ")"; + case "intFromEnum": { + const intFromEnum = zigAnalysis.exprs[expr.intFromEnum]; + return "@intFromEnum(" + exprName(intFromEnum, opts) + ")"; } case "bitSizeOf": { const bitSizeOf = zigAnalysis.exprs[expr.bitSizeOf]; @@ -1260,8 +1260,8 @@ const NAV_MODES = { payloadHtml += "alignOf"; break; } - case "bool_to_int": { - payloadHtml += "boolToInt"; + case "int_from_bool": { + payloadHtml += "intFromBool"; break; } case "embed_file": { @@ -1368,16 +1368,16 @@ const NAV_MODES = { payloadHtml += "workGroupId"; break; } - case "ptr_to_int": { - payloadHtml += "ptrToInt"; + case "int_from_ptr": { + payloadHtml += "intFromPtr"; + break; + } + case "int_from_error": { + payloadHtml += "intFromError"; break; } case "error_to_int": { - payloadHtml += "errorToInt"; - break; - } - case "int_to_error": { - payloadHtml += "intToError"; + payloadHtml += "errorFromInt"; break; } case "max": { @@ -1423,20 +1423,20 @@ const NAV_MODES = { let payloadHtml = "@"; switch (expr.builtinBin.name) { - case "float_to_int": { - payloadHtml += "floatToInt"; + case "int_from_float": { + payloadHtml += "intFromFloat"; break; } - case "int_to_float": { - payloadHtml += "intToFloat"; + case "float_from_int": { + payloadHtml += "floatFromInt"; break; } - case "int_to_ptr": { - payloadHtml += "intToPtr"; + case "ptr_from_int": { + payloadHtml += "ptrFromInt"; break; } - case "int_to_enum": { - payloadHtml += "intToEnum"; + case "enum_from_int": { + payloadHtml += "enumFromInt"; break; } case "float_cast": { diff --git a/lib/std/Build/Step/Run.zig b/lib/std/Build/Step/Run.zig index bed1cc345e..c574dbb5af 100644 --- a/lib/std/Build/Step/Run.zig +++ b/lib/std/Build/Step/Run.zig @@ -1035,9 +1035,9 @@ fn evalZigTest( const TrHdr = std.zig.Server.Message.TestResults; const tr_hdr = @ptrCast(*align(1) const TrHdr, body); - fail_count += @boolToInt(tr_hdr.flags.fail); - skip_count += @boolToInt(tr_hdr.flags.skip); - leak_count += @boolToInt(tr_hdr.flags.leak); + fail_count += @intFromBool(tr_hdr.flags.fail); + skip_count += @intFromBool(tr_hdr.flags.skip); + leak_count += @intFromBool(tr_hdr.flags.leak); if (tr_hdr.flags.fail or tr_hdr.flags.leak) { const name = std.mem.sliceTo(md.string_bytes[md.names[tr_hdr.index]..], 0); diff --git a/lib/std/RingBuffer.zig b/lib/std/RingBuffer.zig index 080e6f54d3..b83a9b0177 100644 --- a/lib/std/RingBuffer.zig +++ b/lib/std/RingBuffer.zig @@ -102,7 +102,7 @@ pub fn isFull(self: RingBuffer) bool { /// Returns the length pub fn len(self: RingBuffer) usize { - const wrap_offset = 2 * self.data.len * @boolToInt(self.write_index < self.read_index); + const wrap_offset = 2 * self.data.len * @intFromBool(self.write_index < self.read_index); const adjusted_write_index = self.write_index + wrap_offset; return adjusted_write_index - self.read_index; } diff --git a/lib/std/Thread.zig b/lib/std/Thread.zig index e2ee51e1dc..f16f8a9a79 100644 --- a/lib/std/Thread.zig +++ b/lib/std/Thread.zig @@ -65,8 +65,8 @@ pub fn setName(self: Thread, name: []const u8) SetNameError!void { .linux => if (use_pthreads) { if (self.getHandle() == std.c.pthread_self()) { // Set the name of the calling thread (no thread id required). - const err = try os.prctl(.SET_NAME, .{@ptrToInt(name_with_terminator.ptr)}); - switch (@intToEnum(os.E, err)) { + const err = try os.prctl(.SET_NAME, .{@intFromPtr(name_with_terminator.ptr)}); + switch (@enumFromInt(os.E, err)) { .SUCCESS => return, else => |e| return os.unexpectedErrno(e), } @@ -175,8 +175,8 @@ pub fn getName(self: Thread, buffer_ptr: *[max_name_len:0]u8) GetNameError!?[]co .linux => if (use_pthreads) { if (self.getHandle() == std.c.pthread_self()) { // Get the name of the calling thread (no thread id required). - const err = try os.prctl(.GET_NAME, .{@ptrToInt(buffer.ptr)}); - switch (@intToEnum(os.E, err)) { + const err = try os.prctl(.GET_NAME, .{@intFromPtr(buffer.ptr)}); + switch (@enumFromInt(os.E, err)) { .SUCCESS => return std.mem.sliceTo(buffer, 0), else => |e| return os.unexpectedErrno(e), } @@ -611,7 +611,7 @@ const PosixThreadImpl = struct { return @bitCast(u32, c.find_thread(null)); }, else => { - return @ptrToInt(c.pthread_self()); + return @intFromPtr(c.pthread_self()); }, } } @@ -776,7 +776,7 @@ const LinuxThreadImpl = struct { \\ movl $0, %%ebx \\ int $128 : - : [ptr] "r" (@ptrToInt(self.mapped.ptr)), + : [ptr] "r" (@intFromPtr(self.mapped.ptr)), [len] "r" (self.mapped.len), : "memory" ), @@ -787,7 +787,7 @@ const LinuxThreadImpl = struct { \\ movq $1, %%rdi \\ syscall : - : [ptr] "{rdi}" (@ptrToInt(self.mapped.ptr)), + : [ptr] "{rdi}" (@intFromPtr(self.mapped.ptr)), [len] "{rsi}" (self.mapped.len), ), .arm, .armeb, .thumb, .thumbeb => asm volatile ( @@ -799,7 +799,7 @@ const LinuxThreadImpl = struct { \\ mov r0, #0 \\ svc 0 : - : [ptr] "r" (@ptrToInt(self.mapped.ptr)), + : [ptr] "r" (@intFromPtr(self.mapped.ptr)), [len] "r" (self.mapped.len), : "memory" ), @@ -812,7 +812,7 @@ const LinuxThreadImpl = struct { \\ mov x0, #0 \\ svc 0 : - : [ptr] "r" (@ptrToInt(self.mapped.ptr)), + : [ptr] "r" (@intFromPtr(self.mapped.ptr)), [len] "r" (self.mapped.len), : "memory" ), @@ -826,7 +826,7 @@ const LinuxThreadImpl = struct { \\ li $4, 0 \\ syscall : - : [ptr] "r" (@ptrToInt(self.mapped.ptr)), + : [ptr] "r" (@intFromPtr(self.mapped.ptr)), [len] "r" (self.mapped.len), : "memory" ), @@ -839,7 +839,7 @@ const LinuxThreadImpl = struct { \\ li $4, 0 \\ syscall : - : [ptr] "r" (@ptrToInt(self.mapped.ptr)), + : [ptr] "r" (@intFromPtr(self.mapped.ptr)), [len] "r" (self.mapped.len), : "memory" ), @@ -853,7 +853,7 @@ const LinuxThreadImpl = struct { \\ sc \\ blr : - : [ptr] "r" (@ptrToInt(self.mapped.ptr)), + : [ptr] "r" (@intFromPtr(self.mapped.ptr)), [len] "r" (self.mapped.len), : "memory" ), @@ -866,7 +866,7 @@ const LinuxThreadImpl = struct { \\ mv a0, zero \\ ecall : - : [ptr] "r" (@ptrToInt(self.mapped.ptr)), + : [ptr] "r" (@intFromPtr(self.mapped.ptr)), [len] "r" (self.mapped.len), : "memory" ), @@ -893,7 +893,7 @@ const LinuxThreadImpl = struct { \\ mov 1, %%o0 \\ t 0x6d : - : [ptr] "r" (@ptrToInt(self.mapped.ptr)), + : [ptr] "r" (@intFromPtr(self.mapped.ptr)), [len] "r" (self.mapped.len), : "memory" ), @@ -911,7 +911,7 @@ const LinuxThreadImpl = struct { thread: ThreadCompletion, fn entryFn(raw_arg: usize) callconv(.C) u8 { - const self = @intToPtr(*@This(), raw_arg); + const self = @ptrFromInt(*@This(), raw_arg); defer switch (self.thread.completion.swap(.completed, .SeqCst)) { .running => {}, .completed => unreachable, @@ -980,7 +980,7 @@ const LinuxThreadImpl = struct { var tls_ptr = os.linux.tls.prepareTLS(mapped[tls_offset..]); var user_desc: if (target.cpu.arch == .x86) os.linux.user_desc else void = undefined; if (target.cpu.arch == .x86) { - defer tls_ptr = @ptrToInt(&user_desc); + defer tls_ptr = @intFromPtr(&user_desc); user_desc = .{ .entry_number = os.linux.tls.tls_image.gdt_entry_number, .base_addr = tls_ptr, @@ -1007,9 +1007,9 @@ const LinuxThreadImpl = struct { switch (linux.getErrno(linux.clone( Instance.entryFn, - @ptrToInt(&mapped[stack_offset]), + @intFromPtr(&mapped[stack_offset]), flags, - @ptrToInt(instance), + @intFromPtr(instance), &instance.thread.parent_tid, tls_ptr, &instance.thread.child_tid.value, diff --git a/lib/std/Thread/Condition.zig b/lib/std/Thread/Condition.zig index 2f8ab02d5e..5b24e9ea19 100644 --- a/lib/std/Thread/Condition.zig +++ b/lib/std/Thread/Condition.zig @@ -487,7 +487,7 @@ test "Condition - multi signal" { // The first paddle will be hit one last time by the last paddle. for (paddles, 0..) |p, i| { - const expected = @as(u32, num_iterations) + @boolToInt(i == 0); + const expected = @as(u32, num_iterations) + @intFromBool(i == 0); try testing.expectEqual(p.value, expected); } } diff --git a/lib/std/Thread/Futex.zig b/lib/std/Thread/Futex.zig index 7fbe49fea2..61e39eba27 100644 --- a/lib/std/Thread/Futex.zig +++ b/lib/std/Thread/Futex.zig @@ -202,7 +202,7 @@ const DarwinImpl = struct { }; if (status >= 0) return; - switch (@intToEnum(std.os.E, -status)) { + switch (@enumFromInt(std.os.E, -status)) { // Wait was interrupted by the OS or other spurious signalling. .INTR => {}, // Address of the futex was paged out. This is unlikely, but possible in theory, and @@ -229,7 +229,7 @@ const DarwinImpl = struct { const status = os.darwin.__ulock_wake(flags, addr, 0); if (status >= 0) return; - switch (@intToEnum(std.os.E, -status)) { + switch (@enumFromInt(std.os.E, -status)) { .INTR => continue, // spurious wake() .FAULT => unreachable, // __ulock_wake doesn't generate EFAULT according to darwin pthread_cond_t .NOENT => return, // nothing was woken up @@ -304,11 +304,11 @@ const FreebsdImpl = struct { } const rc = os.freebsd._umtx_op( - @ptrToInt(&ptr.value), - @enumToInt(os.freebsd.UMTX_OP.WAIT_UINT_PRIVATE), + @intFromPtr(&ptr.value), + @intFromEnum(os.freebsd.UMTX_OP.WAIT_UINT_PRIVATE), @as(c_ulong, expect), tm_size, - @ptrToInt(tm_ptr), + @intFromPtr(tm_ptr), ); switch (os.errno(rc)) { @@ -326,8 +326,8 @@ const FreebsdImpl = struct { fn wake(ptr: *const Atomic(u32), max_waiters: u32) void { const rc = os.freebsd._umtx_op( - @ptrToInt(&ptr.value), - @enumToInt(os.freebsd.UMTX_OP.WAKE_PRIVATE), + @intFromPtr(&ptr.value), + @intFromEnum(os.freebsd.UMTX_OP.WAKE_PRIVATE), @as(c_ulong, max_waiters), 0, // there is no timeout struct 0, // there is no timeout struct pointer @@ -719,7 +719,7 @@ const PosixImpl = struct { // Make sure the pointer is aligned, // then cut off the zero bits from the alignment to get the unique address. - const addr = @ptrToInt(ptr); + const addr = @intFromPtr(ptr); assert(addr & (alignment - 1) == 0); return addr >> @ctz(@as(usize, alignment)); } diff --git a/lib/std/array_hash_map.zig b/lib/std/array_hash_map.zig index b46b5c12f0..d3ad94324e 100644 --- a/lib/std/array_hash_map.zig +++ b/lib/std/array_hash_map.zig @@ -2310,7 +2310,7 @@ pub fn getHashPtrAddrFn(comptime K: type, comptime Context: type) (fn (Context, return struct { fn hash(ctx: Context, key: K) u32 { _ = ctx; - return getAutoHashFn(usize, void)({}, @ptrToInt(key)); + return getAutoHashFn(usize, void)({}, @intFromPtr(key)); } }.hash; } diff --git a/lib/std/atomic/Atomic.zig b/lib/std/atomic/Atomic.zig index 6c0c477725..81918638b5 100644 --- a/lib/std/atomic/Atomic.zig +++ b/lib/std/atomic/Atomic.zig @@ -227,7 +227,7 @@ pub fn Atomic(comptime T: type) type { .Toggle => self.fetchXor(mask, ordering), }; - return @boolToInt(value & mask != 0); + return @intFromBool(value & mask != 0); } inline fn x86BitRmw(self: *Self, comptime op: BitRmwOp, bit: Bit, comptime ordering: Ordering) u1 { @@ -392,8 +392,8 @@ test "Atomic.swap" { try testing.expectEqual(a.load(.SeqCst), true); var b = Atomic(?*u8).init(null); - try testing.expectEqual(b.swap(@intToPtr(?*u8, @alignOf(u8)), ordering), null); - try testing.expectEqual(b.load(.SeqCst), @intToPtr(?*u8, @alignOf(u8))); + try testing.expectEqual(b.swap(@ptrFromInt(?*u8, @alignOf(u8)), ordering), null); + try testing.expectEqual(b.load(.SeqCst), @ptrFromInt(?*u8, @alignOf(u8))); } } diff --git a/lib/std/atomic/queue.zig b/lib/std/atomic/queue.zig index 7c9ffa2684..70cb293cf4 100644 --- a/lib/std/atomic/queue.zig +++ b/lib/std/atomic/queue.zig @@ -135,7 +135,7 @@ pub fn Queue(comptime T: type) type { ) !void { try s.writeByteNTimes(' ', indent); if (optional_node) |node| { - try s.print("0x{x}={}\n", .{ @ptrToInt(node), node.data }); + try s.print("0x{x}={}\n", .{ @intFromPtr(node), node.data }); if (depth == 0) { try s.print("(max depth)\n", .{}); return; @@ -387,7 +387,7 @@ test "std.atomic.Queue dump" { \\tail: 0x{x}=1 \\ (null) \\ - , .{ @ptrToInt(queue.head), @ptrToInt(queue.tail) }); + , .{ @intFromPtr(queue.head), @intFromPtr(queue.tail) }); try expect(mem.eql(u8, buffer[0..fbs.pos], expected)); // Test a stream with two elements @@ -408,6 +408,6 @@ test "std.atomic.Queue dump" { \\tail: 0x{x}=2 \\ (null) \\ - , .{ @ptrToInt(queue.head), @ptrToInt(queue.head.?.next), @ptrToInt(queue.tail) }); + , .{ @intFromPtr(queue.head), @intFromPtr(queue.head.?.next), @intFromPtr(queue.tail) }); try expect(mem.eql(u8, buffer[0..fbs.pos], expected)); } diff --git a/lib/std/bit_set.zig b/lib/std/bit_set.zig index b7dfc8d529..4b83e8e057 100644 --- a/lib/std/bit_set.zig +++ b/lib/std/bit_set.zig @@ -306,7 +306,7 @@ pub fn IntegerBitSet(comptime size: u16) type { } fn boolMaskBit(index: usize, value: bool) MaskInt { if (MaskInt == u0) return 0; - return @as(MaskInt, @boolToInt(value)) << @intCast(ShiftInt, index); + return @as(MaskInt, @intFromBool(value)) << @intCast(ShiftInt, index); } }; } @@ -640,7 +640,7 @@ pub fn ArrayBitSet(comptime MaskIntType: type, comptime size: usize) type { return index >> @bitSizeOf(ShiftInt); } fn boolMaskBit(index: usize, value: bool) MaskInt { - return @as(MaskInt, @boolToInt(value)) << @intCast(ShiftInt, index); + return @as(MaskInt, @intFromBool(value)) << @intCast(ShiftInt, index); } }; } @@ -669,7 +669,7 @@ pub const DynamicBitSetUnmanaged = struct { // Don't modify this value. Ideally it would go in const data so // modifications would cause a bus error, but the only way - // to discard a const qualifier is through ptrToInt, which + // to discard a const qualifier is through intFromPtr, which // cannot currently round trip at comptime. var empty_masks_data = [_]MaskInt{ 0, undefined }; const empty_masks_ptr = empty_masks_data[1..2]; @@ -1011,7 +1011,7 @@ pub const DynamicBitSetUnmanaged = struct { return index >> @bitSizeOf(ShiftInt); } fn boolMaskBit(index: usize, value: bool) MaskInt { - return @as(MaskInt, @boolToInt(value)) << @intCast(ShiftInt, index); + return @as(MaskInt, @intFromBool(value)) << @intCast(ShiftInt, index); } fn numMasks(bit_length: usize) usize { return (bit_length + (@bitSizeOf(MaskInt) - 1)) / @bitSizeOf(MaskInt); diff --git a/lib/std/c.zig b/lib/std/c.zig index 67c676f0dd..3b4bfef826 100644 --- a/lib/std/c.zig +++ b/lib/std/c.zig @@ -113,7 +113,7 @@ pub usingnamespace switch (builtin.os.tag) { pub fn getErrno(rc: anytype) c.E { if (rc == -1) { - return @intToEnum(c.E, c._errno().*); + return @enumFromInt(c.E, c._errno().*); } else { return .SUCCESS; } diff --git a/lib/std/c/darwin.zig b/lib/std/c/darwin.zig index a257437282..b680a97933 100644 --- a/lib/std/c/darwin.zig +++ b/lib/std/c/darwin.zig @@ -51,19 +51,19 @@ pub const EXC = enum(exception_type_t) { pub const EXC_SOFT_SIGNAL = 0x10003; -pub const EXC_MASK_BAD_ACCESS = 1 << @enumToInt(EXC.BAD_ACCESS); -pub const EXC_MASK_BAD_INSTRUCTION = 1 << @enumToInt(EXC.BAD_INSTRUCTION); -pub const EXC_MASK_ARITHMETIC = 1 << @enumToInt(EXC.ARITHMETIC); -pub const EXC_MASK_EMULATION = 1 << @enumToInt(EXC.EMULATION); -pub const EXC_MASK_SOFTWARE = 1 << @enumToInt(EXC.SOFTWARE); -pub const EXC_MASK_BREAKPOINT = 1 << @enumToInt(EXC.BREAKPOINT); -pub const EXC_MASK_SYSCALL = 1 << @enumToInt(EXC.SYSCALL); -pub const EXC_MASK_MACH_SYSCALL = 1 << @enumToInt(EXC.MACH_SYSCALL); -pub const EXC_MASK_RPC_ALERT = 1 << @enumToInt(EXC.RPC_ALERT); -pub const EXC_MASK_CRASH = 1 << @enumToInt(EXC.CRASH); -pub const EXC_MASK_RESOURCE = 1 << @enumToInt(EXC.RESOURCE); -pub const EXC_MASK_GUARD = 1 << @enumToInt(EXC.GUARD); -pub const EXC_MASK_CORPSE_NOTIFY = 1 << @enumToInt(EXC.CORPSE_NOTIFY); +pub const EXC_MASK_BAD_ACCESS = 1 << @intFromEnum(EXC.BAD_ACCESS); +pub const EXC_MASK_BAD_INSTRUCTION = 1 << @intFromEnum(EXC.BAD_INSTRUCTION); +pub const EXC_MASK_ARITHMETIC = 1 << @intFromEnum(EXC.ARITHMETIC); +pub const EXC_MASK_EMULATION = 1 << @intFromEnum(EXC.EMULATION); +pub const EXC_MASK_SOFTWARE = 1 << @intFromEnum(EXC.SOFTWARE); +pub const EXC_MASK_BREAKPOINT = 1 << @intFromEnum(EXC.BREAKPOINT); +pub const EXC_MASK_SYSCALL = 1 << @intFromEnum(EXC.SYSCALL); +pub const EXC_MASK_MACH_SYSCALL = 1 << @intFromEnum(EXC.MACH_SYSCALL); +pub const EXC_MASK_RPC_ALERT = 1 << @intFromEnum(EXC.RPC_ALERT); +pub const EXC_MASK_CRASH = 1 << @intFromEnum(EXC.CRASH); +pub const EXC_MASK_RESOURCE = 1 << @intFromEnum(EXC.RESOURCE); +pub const EXC_MASK_GUARD = 1 << @intFromEnum(EXC.GUARD); +pub const EXC_MASK_CORPSE_NOTIFY = 1 << @intFromEnum(EXC.CORPSE_NOTIFY); pub const EXC_MASK_MACHINE = arch_bits.EXC_MASK_MACHINE; pub const EXC_MASK_ALL = EXC_MASK_BAD_ACCESS | @@ -1177,10 +1177,10 @@ pub const sigset_t = u32; pub const empty_sigset: sigset_t = 0; pub const SIG = struct { - pub const ERR = @intToPtr(?Sigaction.handler_fn, maxInt(usize)); - pub const DFL = @intToPtr(?Sigaction.handler_fn, 0); - pub const IGN = @intToPtr(?Sigaction.handler_fn, 1); - pub const HOLD = @intToPtr(?Sigaction.handler_fn, 5); + pub const ERR = @ptrFromInt(?Sigaction.handler_fn, maxInt(usize)); + pub const DFL = @ptrFromInt(?Sigaction.handler_fn, 0); + pub const IGN = @ptrFromInt(?Sigaction.handler_fn, 1); + pub const HOLD = @ptrFromInt(?Sigaction.handler_fn, 5); /// block specified signal set pub const _BLOCK = 1; @@ -1411,7 +1411,7 @@ pub const MAP = struct { pub const NOCACHE = 0x0400; /// don't reserve needed swap area pub const NORESERVE = 0x0040; - pub const FAILED = @intToPtr(*anyopaque, maxInt(usize)); + pub const FAILED = @ptrFromInt(*anyopaque, maxInt(usize)); }; pub const MSF = struct { @@ -2463,7 +2463,7 @@ pub const KernE = enum(u32) { pub const mach_msg_return_t = kern_return_t; pub fn getMachMsgError(err: mach_msg_return_t) MachMsgE { - return @intToEnum(MachMsgE, @truncate(u32, @intCast(usize, err))); + return @enumFromInt(MachMsgE, @truncate(u32, @intCast(usize, err))); } /// All special error code bits defined below. @@ -2665,10 +2665,10 @@ pub const RTLD = struct { pub const NODELETE = 0x80; pub const FIRST = 0x100; - pub const NEXT = @intToPtr(*anyopaque, @bitCast(usize, @as(isize, -1))); - pub const DEFAULT = @intToPtr(*anyopaque, @bitCast(usize, @as(isize, -2))); - pub const SELF = @intToPtr(*anyopaque, @bitCast(usize, @as(isize, -3))); - pub const MAIN_ONLY = @intToPtr(*anyopaque, @bitCast(usize, @as(isize, -5))); + pub const NEXT = @ptrFromInt(*anyopaque, @bitCast(usize, @as(isize, -1))); + pub const DEFAULT = @ptrFromInt(*anyopaque, @bitCast(usize, @as(isize, -2))); + pub const SELF = @ptrFromInt(*anyopaque, @bitCast(usize, @as(isize, -3))); + pub const MAIN_ONLY = @ptrFromInt(*anyopaque, @bitCast(usize, @as(isize, -5))); }; pub const F = struct { @@ -3418,12 +3418,12 @@ pub const PosixSpawn = struct { }; pub fn getKernError(err: kern_return_t) KernE { - return @intToEnum(KernE, @truncate(u32, @intCast(usize, err))); + return @enumFromInt(KernE, @truncate(u32, @intCast(usize, err))); } pub fn unexpectedKernError(err: KernE) std.os.UnexpectedError { if (std.os.unexpected_error_tracing) { - std.debug.print("unexpected error: {d}\n", .{@enumToInt(err)}); + std.debug.print("unexpected error: {d}\n", .{@intFromEnum(err)}); std.debug.dumpCurrentStackTrace(null); } return error.Unexpected; @@ -3455,7 +3455,7 @@ pub const MachTask = extern struct { var out_port: mach_port_name_t = undefined; switch (getKernError(mach_port_allocate( self.port, - @enumToInt(right), + @intFromEnum(right), &out_port, ))) { .SUCCESS => return .{ .port = out_port }, @@ -3473,7 +3473,7 @@ pub const MachTask = extern struct { self.port, port.port, port.port, - @enumToInt(msg), + @intFromEnum(msg), ))) { .SUCCESS => return, .FAILURE => return error.PermissionDenied, @@ -3665,7 +3665,7 @@ pub const MachTask = extern struct { } fn setProtectionImpl(task: MachTask, address: u64, len: usize, set_max: bool, prot: vm_prot_t) MachError!void { - switch (getKernError(mach_vm_protect(task.port, address, len, @boolToInt(set_max), prot))) { + switch (getKernError(mach_vm_protect(task.port, address, len, @intFromBool(set_max), prot))) { .SUCCESS => return, .FAILURE => return error.PermissionDenied, else => |err| return unexpectedKernError(err), @@ -3700,7 +3700,7 @@ pub const MachTask = extern struct { switch (getKernError(mach_vm_write( task.port, curr_addr, - @ptrToInt(out_buf.ptr), + @intFromPtr(out_buf.ptr), @intCast(mach_msg_type_number_t, curr_size), ))) { .SUCCESS => {}, @@ -3752,7 +3752,7 @@ pub const MachTask = extern struct { else => |err| return unexpectedKernError(err), } - @memcpy(out_buf[0..curr_bytes_read], @intToPtr([*]const u8, vm_memory)); + @memcpy(out_buf[0..curr_bytes_read], @ptrFromInt([*]const u8, vm_memory)); _ = vm_deallocate(mach_task_self(), vm_memory, curr_bytes_read); out_buf = out_buf[curr_bytes_read..]; @@ -3831,7 +3831,7 @@ pub const MachTask = extern struct { const self_task = machTaskForSelf(); _ = vm_deallocate( self_task.port, - @ptrToInt(list.buf.ptr), + @intFromPtr(list.buf.ptr), @intCast(vm_size_t, list.buf.len * @sizeOf(mach_port_t)), ); } diff --git a/lib/std/c/dragonfly.zig b/lib/std/c/dragonfly.zig index 457e817b68..912bb99056 100644 --- a/lib/std/c/dragonfly.zig +++ b/lib/std/c/dragonfly.zig @@ -172,7 +172,7 @@ pub const PROT = struct { pub const MAP = struct { pub const FILE = 0; - pub const FAILED = @intToPtr(*anyopaque, maxInt(usize)); + pub const FAILED = @ptrFromInt(*anyopaque, maxInt(usize)); pub const ANONYMOUS = ANON; pub const COPY = PRIVATE; pub const SHARED = 1; @@ -620,9 +620,9 @@ pub const S = struct { pub const BADSIG = SIG.ERR; pub const SIG = struct { - pub const DFL = @intToPtr(?Sigaction.handler_fn, 0); - pub const IGN = @intToPtr(?Sigaction.handler_fn, 1); - pub const ERR = @intToPtr(?Sigaction.handler_fn, maxInt(usize)); + pub const DFL = @ptrFromInt(?Sigaction.handler_fn, 0); + pub const IGN = @ptrFromInt(?Sigaction.handler_fn, 1); + pub const ERR = @ptrFromInt(?Sigaction.handler_fn, maxInt(usize)); pub const BLOCK = 1; pub const UNBLOCK = 2; @@ -871,10 +871,10 @@ pub const RTLD = struct { pub const NODELETE = 0x01000; pub const NOLOAD = 0x02000; - pub const NEXT = @intToPtr(*anyopaque, @bitCast(usize, @as(isize, -1))); - pub const DEFAULT = @intToPtr(*anyopaque, @bitCast(usize, @as(isize, -2))); - pub const SELF = @intToPtr(*anyopaque, @bitCast(usize, @as(isize, -3))); - pub const ALL = @intToPtr(*anyopaque, @bitCast(usize, @as(isize, -4))); + pub const NEXT = @ptrFromInt(*anyopaque, @bitCast(usize, @as(isize, -1))); + pub const DEFAULT = @ptrFromInt(*anyopaque, @bitCast(usize, @as(isize, -2))); + pub const SELF = @ptrFromInt(*anyopaque, @bitCast(usize, @as(isize, -3))); + pub const ALL = @ptrFromInt(*anyopaque, @bitCast(usize, @as(isize, -4))); }; pub const dl_phdr_info = extern struct { diff --git a/lib/std/c/freebsd.zig b/lib/std/c/freebsd.zig index 8e8a576564..6f91ee65f7 100644 --- a/lib/std/c/freebsd.zig +++ b/lib/std/c/freebsd.zig @@ -961,7 +961,7 @@ pub const CLOCK = struct { }; pub const MAP = struct { - pub const FAILED = @intToPtr(*anyopaque, maxInt(usize)); + pub const FAILED = @ptrFromInt(*anyopaque, maxInt(usize)); pub const SHARED = 0x0001; pub const PRIVATE = 0x0002; pub const FIXED = 0x0010; @@ -1086,9 +1086,9 @@ pub const SIG = struct { pub const UNBLOCK = 2; pub const SETMASK = 3; - pub const DFL = @intToPtr(?Sigaction.handler_fn, 0); - pub const IGN = @intToPtr(?Sigaction.handler_fn, 1); - pub const ERR = @intToPtr(?Sigaction.handler_fn, maxInt(usize)); + pub const DFL = @ptrFromInt(?Sigaction.handler_fn, 0); + pub const IGN = @ptrFromInt(?Sigaction.handler_fn, 1); + pub const ERR = @ptrFromInt(?Sigaction.handler_fn, maxInt(usize)); pub const WORDS = 4; pub const MAXSIG = 128; @@ -2650,7 +2650,7 @@ const ioctl_cmd = enum(u32) { }; fn ioImpl(cmd: ioctl_cmd, op: u8, nr: u8, comptime IT: type) u32 { - return @bitCast(u32, @enumToInt(cmd) | @intCast(u32, @truncate(u8, @sizeOf(IT))) << 16 | @intCast(u32, op) << 8 | nr); + return @bitCast(u32, @intFromEnum(cmd) | @intCast(u32, @truncate(u8, @sizeOf(IT))) << 16 | @intCast(u32, op) << 8 | nr); } pub fn IO(op: u8, nr: u8) u32 { diff --git a/lib/std/c/haiku.zig b/lib/std/c/haiku.zig index 2e0e02a20f..2f9917a0f3 100644 --- a/lib/std/c/haiku.zig +++ b/lib/std/c/haiku.zig @@ -414,7 +414,7 @@ pub const CLOCK = struct { pub const MAP = struct { /// mmap() error return code - pub const FAILED = @intToPtr(*anyopaque, maxInt(usize)); + pub const FAILED = @ptrFromInt(*anyopaque, maxInt(usize)); /// changes are seen by others pub const SHARED = 0x01; /// changes are only seen by caller @@ -481,9 +481,9 @@ pub const SA = struct { }; pub const SIG = struct { - pub const ERR = @intToPtr(?Sigaction.handler_fn, maxInt(usize)); - pub const DFL = @intToPtr(?Sigaction.handler_fn, 0); - pub const IGN = @intToPtr(?Sigaction.handler_fn, 1); + pub const ERR = @ptrFromInt(?Sigaction.handler_fn, maxInt(usize)); + pub const DFL = @ptrFromInt(?Sigaction.handler_fn, 0); + pub const IGN = @ptrFromInt(?Sigaction.handler_fn, 1); pub const HUP = 1; pub const INT = 2; diff --git a/lib/std/c/linux.zig b/lib/std/c/linux.zig index d5add70033..d3a3bfdeba 100644 --- a/lib/std/c/linux.zig +++ b/lib/std/c/linux.zig @@ -32,7 +32,7 @@ pub const MADV = linux.MADV; pub const MAP = struct { pub usingnamespace linux.MAP; /// Only used by libc to communicate failure. - pub const FAILED = @intToPtr(*anyopaque, maxInt(usize)); + pub const FAILED = @ptrFromInt(*anyopaque, maxInt(usize)); }; pub const MSF = linux.MSF; pub const MMAP2_UNIT = linux.MMAP2_UNIT; diff --git a/lib/std/c/netbsd.zig b/lib/std/c/netbsd.zig index 5a848c4808..8f3837b2bb 100644 --- a/lib/std/c/netbsd.zig +++ b/lib/std/c/netbsd.zig @@ -172,9 +172,9 @@ pub const RTLD = struct { pub const NODELETE = 0x01000; pub const NOLOAD = 0x02000; - pub const NEXT = @intToPtr(*anyopaque, @bitCast(usize, @as(isize, -1))); - pub const DEFAULT = @intToPtr(*anyopaque, @bitCast(usize, @as(isize, -2))); - pub const SELF = @intToPtr(*anyopaque, @bitCast(usize, @as(isize, -3))); + pub const NEXT = @ptrFromInt(*anyopaque, @bitCast(usize, @as(isize, -1))); + pub const DEFAULT = @ptrFromInt(*anyopaque, @bitCast(usize, @as(isize, -2))); + pub const SELF = @ptrFromInt(*anyopaque, @bitCast(usize, @as(isize, -3))); }; pub const dl_phdr_info = extern struct { @@ -591,7 +591,7 @@ pub const CLOCK = struct { }; pub const MAP = struct { - pub const FAILED = @intToPtr(*anyopaque, maxInt(usize)); + pub const FAILED = @ptrFromInt(*anyopaque, maxInt(usize)); pub const SHARED = 0x0001; pub const PRIVATE = 0x0002; pub const REMAPDUP = 0x0004; @@ -1090,9 +1090,9 @@ pub const winsize = extern struct { const NSIG = 32; pub const SIG = struct { - pub const DFL = @intToPtr(?Sigaction.handler_fn, 0); - pub const IGN = @intToPtr(?Sigaction.handler_fn, 1); - pub const ERR = @intToPtr(?Sigaction.handler_fn, maxInt(usize)); + pub const DFL = @ptrFromInt(?Sigaction.handler_fn, 0); + pub const IGN = @ptrFromInt(?Sigaction.handler_fn, 1); + pub const ERR = @ptrFromInt(?Sigaction.handler_fn, maxInt(usize)); pub const WORDS = 4; pub const MAXSIG = 128; diff --git a/lib/std/c/openbsd.zig b/lib/std/c/openbsd.zig index 93681b77e1..4d44461237 100644 --- a/lib/std/c/openbsd.zig +++ b/lib/std/c/openbsd.zig @@ -449,7 +449,7 @@ pub const CLOCK = struct { }; pub const MAP = struct { - pub const FAILED = @intToPtr(*anyopaque, maxInt(usize)); + pub const FAILED = @ptrFromInt(*anyopaque, maxInt(usize)); pub const SHARED = 0x0001; pub const PRIVATE = 0x0002; pub const FIXED = 0x0010; @@ -990,11 +990,11 @@ pub const winsize = extern struct { const NSIG = 33; pub const SIG = struct { - pub const DFL = @intToPtr(?Sigaction.handler_fn, 0); - pub const IGN = @intToPtr(?Sigaction.handler_fn, 1); - pub const ERR = @intToPtr(?Sigaction.handler_fn, maxInt(usize)); - pub const CATCH = @intToPtr(?Sigaction.handler_fn, 2); - pub const HOLD = @intToPtr(?Sigaction.handler_fn, 3); + pub const DFL = @ptrFromInt(?Sigaction.handler_fn, 0); + pub const IGN = @ptrFromInt(?Sigaction.handler_fn, 1); + pub const ERR = @ptrFromInt(?Sigaction.handler_fn, maxInt(usize)); + pub const CATCH = @ptrFromInt(?Sigaction.handler_fn, 2); + pub const HOLD = @ptrFromInt(?Sigaction.handler_fn, 3); pub const HUP = 1; pub const INT = 2; diff --git a/lib/std/c/solaris.zig b/lib/std/c/solaris.zig index 3a6708613b..511bf9ccc5 100644 --- a/lib/std/c/solaris.zig +++ b/lib/std/c/solaris.zig @@ -111,10 +111,10 @@ pub const RTLD = struct { pub const FIRST = 0x02000; pub const CONFGEN = 0x10000; - pub const NEXT = @intToPtr(*anyopaque, @bitCast(usize, @as(isize, -1))); - pub const DEFAULT = @intToPtr(*anyopaque, @bitCast(usize, @as(isize, -2))); - pub const SELF = @intToPtr(*anyopaque, @bitCast(usize, @as(isize, -3))); - pub const PROBE = @intToPtr(*anyopaque, @bitCast(usize, @as(isize, -4))); + pub const NEXT = @ptrFromInt(*anyopaque, @bitCast(usize, @as(isize, -1))); + pub const DEFAULT = @ptrFromInt(*anyopaque, @bitCast(usize, @as(isize, -2))); + pub const SELF = @ptrFromInt(*anyopaque, @bitCast(usize, @as(isize, -3))); + pub const PROBE = @ptrFromInt(*anyopaque, @bitCast(usize, @as(isize, -4))); }; pub const Flock = extern struct { @@ -524,7 +524,7 @@ pub const CLOCK = struct { }; pub const MAP = struct { - pub const FAILED = @intToPtr(*anyopaque, maxInt(usize)); + pub const FAILED = @ptrFromInt(*anyopaque, maxInt(usize)); pub const SHARED = 0x0001; pub const PRIVATE = 0x0002; pub const TYPE = 0x000f; @@ -886,10 +886,10 @@ pub const winsize = extern struct { const NSIG = 75; pub const SIG = struct { - pub const DFL = @intToPtr(?Sigaction.handler_fn, 0); - pub const ERR = @intToPtr(?Sigaction.handler_fn, maxInt(usize)); - pub const IGN = @intToPtr(?Sigaction.handler_fn, 1); - pub const HOLD = @intToPtr(?Sigaction.handler_fn, 2); + pub const DFL = @ptrFromInt(?Sigaction.handler_fn, 0); + pub const ERR = @ptrFromInt(?Sigaction.handler_fn, maxInt(usize)); + pub const IGN = @ptrFromInt(?Sigaction.handler_fn, 1); + pub const HOLD = @ptrFromInt(?Sigaction.handler_fn, 2); pub const WORDS = 4; pub const MAXSIG = 75; @@ -1909,7 +1909,7 @@ const IoCtlCommand = enum(u32) { fn ioImpl(cmd: IoCtlCommand, io_type: u8, nr: u8, comptime IOT: type) i32 { const size = @intCast(u32, @truncate(u8, @sizeOf(IOT))) << 16; const t = @intCast(u32, io_type) << 8; - return @bitCast(i32, @enumToInt(cmd) | size | t | nr); + return @bitCast(i32, @intFromEnum(cmd) | size | t | nr); } pub fn IO(io_type: u8, nr: u8) i32 { diff --git a/lib/std/child_process.zig b/lib/std/child_process.zig index db85242002..636ef7f4d7 100644 --- a/lib/std/child_process.zig +++ b/lib/std/child_process.zig @@ -449,7 +449,7 @@ pub const ChildProcess = struct { // has a value greater than 0 if ((fd[0].revents & std.os.POLL.IN) != 0) { const err_int = try readIntFd(err_pipe[0]); - return @errSetCast(SpawnError, @intToError(err_int)); + return @errSetCast(SpawnError, @errorFromInt(err_int)); } } else { // Write maxInt(ErrInt) to the write end of the err_pipe. This is after @@ -462,7 +462,7 @@ pub const ChildProcess = struct { // Here we potentially return the fork child's error from the parent // pid. if (err_int != maxInt(ErrInt)) { - return @errSetCast(SpawnError, @intToError(err_int)); + return @errSetCast(SpawnError, @errorFromInt(err_int)); } } } @@ -1356,7 +1356,7 @@ fn destroyPipe(pipe: [2]os.fd_t) void { // Child of fork calls this to report an error to the fork parent. // Then the child exits. fn forkChildErrReport(fd: i32, err: ChildProcess.SpawnError) noreturn { - writeIntFd(fd, @as(ErrInt, @errorToInt(err))) catch {}; + writeIntFd(fd, @as(ErrInt, @intFromError(err))) catch {}; // If we're linking libc, some naughty applications may have registered atexit handlers // which we really do not want to run in the fork child. I caught LLVM doing this and // it caused a deadlock instead of doing an exit syscall. In the words of Avril Lavigne, diff --git a/lib/std/coff.zig b/lib/std/coff.zig index a7c191e650..d28e54b94c 100644 --- a/lib/std/coff.zig +++ b/lib/std/coff.zig @@ -1105,7 +1105,7 @@ pub const Coff = struct { assert(self.is_image); const data_dirs = self.getDataDirectories(); - const debug_dir = data_dirs[@enumToInt(DirectoryEntry.DEBUG)]; + const debug_dir = data_dirs[@intFromEnum(DirectoryEntry.DEBUG)]; var stream = std.io.fixedBufferStream(self.data); const reader = stream.reader(); @@ -1303,9 +1303,9 @@ pub const Symtab = struct { return .{ .name = raw[0..8].*, .value = mem.readIntLittle(u32, raw[8..12]), - .section_number = @intToEnum(SectionNumber, mem.readIntLittle(u16, raw[12..14])), + .section_number = @enumFromInt(SectionNumber, mem.readIntLittle(u16, raw[12..14])), .type = @bitCast(SymType, mem.readIntLittle(u16, raw[14..16])), - .storage_class = @intToEnum(StorageClass, raw[16]), + .storage_class = @enumFromInt(StorageClass, raw[16]), .number_of_aux_symbols = raw[17], }; } @@ -1333,7 +1333,7 @@ pub const Symtab = struct { fn asWeakExtDef(raw: []const u8) WeakExternalDefinition { return .{ .tag_index = mem.readIntLittle(u32, raw[0..4]), - .flag = @intToEnum(WeakExternalFlag, mem.readIntLittle(u32, raw[4..8])), + .flag = @enumFromInt(WeakExternalFlag, mem.readIntLittle(u32, raw[4..8])), .unused = raw[8..18].*, }; } @@ -1351,7 +1351,7 @@ pub const Symtab = struct { .number_of_linenumbers = mem.readIntLittle(u16, raw[6..8]), .checksum = mem.readIntLittle(u32, raw[8..12]), .number = mem.readIntLittle(u16, raw[12..14]), - .selection = @intToEnum(ComdatSelection, raw[14]), + .selection = @enumFromInt(ComdatSelection, raw[14]), .unused = raw[15..18].*, }; } diff --git a/lib/std/compress/deflate/huffman_bit_writer.zig b/lib/std/compress/deflate/huffman_bit_writer.zig index 0b76d9d89d..a852287b53 100644 --- a/lib/std/compress/deflate/huffman_bit_writer.zig +++ b/lib/std/compress/deflate/huffman_bit_writer.zig @@ -527,7 +527,7 @@ pub fn HuffmanBitWriter(comptime WriterType: type) type { } // Huffman. - if (@ptrToInt(literal_encoding) == @ptrToInt(&self.fixed_literal_encoding)) { + if (@intFromPtr(literal_encoding) == @intFromPtr(&self.fixed_literal_encoding)) { try self.writeFixedHeader(eof); } else { try self.writeDynamicHeader(num_literals, num_offsets, num_codegens, eof); diff --git a/lib/std/compress/lzma/decode.zig b/lib/std/compress/lzma/decode.zig index f539abf8b1..a6adb941a4 100644 --- a/lib/std/compress/lzma/decode.zig +++ b/lib/std/compress/lzma/decode.zig @@ -326,7 +326,7 @@ pub const DecoderState = struct { while (result < 0x100) { const match_bit = (match_byte >> 7) & 1; match_byte <<= 1; - const bit = @boolToInt(try decoder.decodeBit( + const bit = @intFromBool(try decoder.decodeBit( reader, &probs[((@as(usize, 1) + match_bit) << 8) + result], update, @@ -339,7 +339,7 @@ pub const DecoderState = struct { } while (result < 0x100) { - result = (result << 1) ^ @boolToInt(try decoder.decodeBit(reader, &probs[result], update)); + result = (result << 1) ^ @intFromBool(try decoder.decodeBit(reader, &probs[result], update)); } return @truncate(u8, result - 0x100); diff --git a/lib/std/compress/lzma/decode/rangecoder.zig b/lib/std/compress/lzma/decode/rangecoder.zig index 5a2f309fe4..54d2195e33 100644 --- a/lib/std/compress/lzma/decode/rangecoder.zig +++ b/lib/std/compress/lzma/decode/rangecoder.zig @@ -57,7 +57,7 @@ pub const RangeDecoder = struct { var result: u32 = 0; var i: usize = 0; while (i < count) : (i += 1) - result = (result << 1) ^ @boolToInt(try self.getBit(reader)); + result = (result << 1) ^ @intFromBool(try self.getBit(reader)); return result; } @@ -93,7 +93,7 @@ pub const RangeDecoder = struct { var i: @TypeOf(num_bits) = 0; while (i < num_bits) : (i += 1) { const bit = try self.decodeBit(reader, &probs[tmp], update); - tmp = (tmp << 1) ^ @boolToInt(bit); + tmp = (tmp << 1) ^ @intFromBool(bit); } return tmp - (@as(u32, 1) << num_bits); } @@ -110,7 +110,7 @@ pub const RangeDecoder = struct { var tmp: usize = 1; var i: @TypeOf(num_bits) = 0; while (i < num_bits) : (i += 1) { - const bit = @boolToInt(try self.decodeBit(reader, &probs[offset + tmp], update)); + const bit = @intFromBool(try self.decodeBit(reader, &probs[offset + tmp], update)); tmp = (tmp << 1) ^ bit; result ^= @as(u32, bit) << i; } diff --git a/lib/std/compress/xz.zig b/lib/std/compress/xz.zig index 40735ca6b6..5debc81835 100644 --- a/lib/std/compress/xz.zig +++ b/lib/std/compress/xz.zig @@ -18,7 +18,7 @@ fn readStreamFlags(reader: anytype, check: *Check) !void { if (reserved1 != 0) return error.CorruptInput; - check.* = @intToEnum(Check, try bit_reader.readBitsNoEof(u4, 4)); + check.* = @enumFromInt(Check, try bit_reader.readBitsNoEof(u4, 4)); const reserved2 = try bit_reader.readBitsNoEof(u4, 4); if (reserved2 != 0) diff --git a/lib/std/compress/xz/block.zig b/lib/std/compress/xz/block.zig index 520c335794..2a034011c2 100644 --- a/lib/std/compress/xz/block.zig +++ b/lib/std/compress/xz/block.zig @@ -124,12 +124,12 @@ pub fn Decoder(comptime ReaderType: type) type { _, }; - const filter_id = @intToEnum( + const filter_id = @enumFromInt( FilterId, try std.leb.readULEB128(u64, header_reader), ); - if (@enumToInt(filter_id) >= 0x4000_0000_0000_0000) + if (@intFromEnum(filter_id) >= 0x4000_0000_0000_0000) return error.CorruptInput; if (filter_id != .lzma2) diff --git a/lib/std/compress/zlib.zig b/lib/std/compress/zlib.zig index 2d90d6d6e3..98cabb4732 100644 --- a/lib/std/compress/zlib.zig +++ b/lib/std/compress/zlib.zig @@ -126,7 +126,7 @@ pub fn CompressStream(comptime WriterType: type) type { var header = ZLibHeader{ .compression_info = ZLibHeader.WINDOW_32K, .compression_method = ZLibHeader.DEFLATE, - .compression_level = @enumToInt(options.level), + .compression_level = @intFromEnum(options.level), .preset_dict = 0, .checksum = 0, }; diff --git a/lib/std/compress/zstandard/decode/block.zig b/lib/std/compress/zstandard/decode/block.zig index e2042650c6..40f5903a24 100644 --- a/lib/std/compress/zstandard/decode/block.zig +++ b/lib/std/compress/zstandard/decode/block.zig @@ -894,7 +894,7 @@ pub fn decodeBlockReader( /// Decode the header of a block. pub fn decodeBlockHeader(src: *const [3]u8) frame.Zstandard.Block.Header { const last_block = src[0] & 1 == 1; - const block_type = @intToEnum(frame.Zstandard.Block.Type, (src[0] & 0b110) >> 1); + const block_type = @enumFromInt(frame.Zstandard.Block.Type, (src[0] & 0b110) >> 1); const block_size = ((src[0] & 0b11111000) >> 3) + (@as(u21, src[1]) << 5) + (@as(u21, src[2]) << 13); return .{ .last_block = last_block, @@ -1058,7 +1058,7 @@ fn decodeStreams(size_format: u2, stream_data: []const u8) !LiteralsSection.Stre /// - `error.EndOfStream` if there are not enough bytes in `source` pub fn decodeLiteralsHeader(source: anytype) !LiteralsSection.Header { const byte0 = try source.readByte(); - const block_type = @intToEnum(LiteralsSection.BlockType, byte0 & 0b11); + const block_type = @enumFromInt(LiteralsSection.BlockType, byte0 & 0b11); const size_format = @intCast(u2, (byte0 & 0b1100) >> 2); var regenerated_size: u20 = undefined; var compressed_size: ?u18 = null; @@ -1132,9 +1132,9 @@ pub fn decodeSequencesHeader( const compression_modes = try source.readByte(); - const matches_mode = @intToEnum(SequencesSection.Header.Mode, (compression_modes & 0b00001100) >> 2); - const offsets_mode = @intToEnum(SequencesSection.Header.Mode, (compression_modes & 0b00110000) >> 4); - const literal_mode = @intToEnum(SequencesSection.Header.Mode, (compression_modes & 0b11000000) >> 6); + const matches_mode = @enumFromInt(SequencesSection.Header.Mode, (compression_modes & 0b00001100) >> 2); + const offsets_mode = @enumFromInt(SequencesSection.Header.Mode, (compression_modes & 0b00110000) >> 4); + const literal_mode = @enumFromInt(SequencesSection.Header.Mode, (compression_modes & 0b11000000) >> 6); if (compression_modes & 0b11 != 0) return error.ReservedBitSet; return SequencesSection.Header{ diff --git a/lib/std/crypto/25519/edwards25519.zig b/lib/std/crypto/25519/edwards25519.zig index b9ce14bc92..50f34c45f3 100644 --- a/lib/std/crypto/25519/edwards25519.zig +++ b/lib/std/crypto/25519/edwards25519.zig @@ -38,11 +38,11 @@ pub const Edwards25519 = struct { const vxx = x.sq().mul(v); const has_m_root = vxx.sub(u).isZero(); const has_p_root = vxx.add(u).isZero(); - if ((@boolToInt(has_m_root) | @boolToInt(has_p_root)) == 0) { // best-effort to avoid two conditional branches + if ((@intFromBool(has_m_root) | @intFromBool(has_p_root)) == 0) { // best-effort to avoid two conditional branches return error.InvalidEncoding; } - x.cMov(x.mul(Fe.sqrtm1), 1 - @boolToInt(has_m_root)); - x.cMov(x.neg(), @boolToInt(x.isNegative()) ^ (s[31] >> 7)); + x.cMov(x.mul(Fe.sqrtm1), 1 - @intFromBool(has_m_root)); + x.cMov(x.neg(), @intFromBool(x.isNegative()) ^ (s[31] >> 7)); const t = x.mul(y); return Edwards25519{ .x = x, .y = y, .z = z, .t = t }; } @@ -51,7 +51,7 @@ pub const Edwards25519 = struct { pub fn toBytes(p: Edwards25519) [encoded_length]u8 { const zi = p.z.invert(); var s = p.y.mul(zi).toBytes(); - s[31] ^= @as(u8, @boolToInt(p.x.mul(zi).isNegative())) << 7; + s[31] ^= @as(u8, @intFromBool(p.x.mul(zi).isNegative())) << 7; return s; } @@ -369,7 +369,7 @@ pub const Edwards25519 = struct { // yed = (x-1)/(x+1) or 1 if the denominator is 0 var yed = x_plus_one_y_inv.mul(y).mul(x_minus_one); - yed.cMov(Fe.one, @boolToInt(x_plus_one_y_inv.isZero())); + yed.cMov(Fe.one, @intFromBool(x_plus_one_y_inv.isZero())); return Edwards25519{ .x = xed, @@ -390,9 +390,9 @@ pub const Edwards25519 = struct { const not_square = !gx1.isSquare(); // gx1 not a square => x = -x1-A - x.cMov(x.neg(), @boolToInt(not_square)); + x.cMov(x.neg(), @intFromBool(not_square)); x2 = Fe.zero; - x2.cMov(Fe.edwards25519a, @boolToInt(not_square)); + x2.cMov(Fe.edwards25519a, @intFromBool(not_square)); x = x.sub(x2); // We have y = sqrt(gx1) or sqrt(gx2) with gx2 = gx1*(A+x1)/(-x1) @@ -408,7 +408,7 @@ pub const Edwards25519 = struct { const y_sign = !elr.not_square; const y_neg = elr.y.neg(); - elr.y.cMov(y_neg, @boolToInt(elr.y.isNegative()) ^ @boolToInt(y_sign)); + elr.y.cMov(y_neg, @intFromBool(elr.y.isNegative()) ^ @intFromBool(y_sign)); return montToEd(elr.x, elr.y).clearCofactor(); } @@ -486,7 +486,7 @@ pub const Edwards25519 = struct { const elr = elligator2(Fe.fromBytes(s)); var p = montToEd(elr.x, elr.y); const p_neg = p.neg(); - p.cMov(p_neg, @boolToInt(p.x.isNegative()) ^ x_sign); + p.cMov(p_neg, @intFromBool(p.x.isNegative()) ^ x_sign); return p.clearCofactor(); } }; diff --git a/lib/std/crypto/25519/field.zig b/lib/std/crypto/25519/field.zig index f6265cba48..eec83f3d2e 100644 --- a/lib/std/crypto/25519/field.zig +++ b/lib/std/crypto/25519/field.zig @@ -387,7 +387,7 @@ pub const Fe = struct { /// Return the absolute value of a field element pub fn abs(a: Fe) Fe { var r = a; - r.cMov(a.neg(), @boolToInt(a.isNegative())); + r.cMov(a.neg(), @intFromBool(a.isNegative())); return r; } @@ -412,7 +412,7 @@ pub const Fe = struct { const m_root2 = m_root.sq(); e = x2.sub(m_root2); var x = p_root; - x.cMov(m_root, @boolToInt(e.isZero())); + x.cMov(m_root, @intFromBool(e.isZero())); return x; } diff --git a/lib/std/crypto/25519/ristretto255.zig b/lib/std/crypto/25519/ristretto255.zig index e33bdb496d..d12a672e7d 100644 --- a/lib/std/crypto/25519/ristretto255.zig +++ b/lib/std/crypto/25519/ristretto255.zig @@ -30,8 +30,8 @@ pub const Ristretto255 = struct { const has_p_root = p_root_check.isZero(); const has_f_root = f_root_check.isZero(); const x_sqrtm1 = x.mul(Fe.sqrtm1); // x*sqrt(-1) - x.cMov(x_sqrtm1, @boolToInt(has_p_root) | @boolToInt(has_f_root)); - return .{ .ratio_is_square = @boolToInt(has_m_root) | @boolToInt(has_p_root), .root = x.abs() }; + x.cMov(x_sqrtm1, @intFromBool(has_p_root) | @intFromBool(has_f_root)); + return .{ .ratio_is_square = @intFromBool(has_m_root) | @intFromBool(has_p_root), .root = x.abs() }; } fn rejectNonCanonical(s: [encoded_length]u8) NonCanonicalError!void { @@ -67,7 +67,7 @@ pub const Ristretto255 = struct { x = x.mul(s_); x = x.add(x).abs(); const t = x.mul(y); - if ((1 - inv_sqrt.ratio_is_square) | @boolToInt(t.isNegative()) | @boolToInt(y.isZero()) != 0) { + if ((1 - inv_sqrt.ratio_is_square) | @intFromBool(t.isNegative()) | @intFromBool(y.isZero()) != 0) { return error.InvalidEncoding; } const p: Curve = .{ @@ -96,7 +96,7 @@ pub const Ristretto255 = struct { const eden = den1.mul(Fe.edwards25519sqrtamd); // den1/sqrt(a-d) const t_z_inv = p.t.mul(z_inv); // T*z_inv - const rotate = @boolToInt(t_z_inv.isNegative()); + const rotate = @intFromBool(t_z_inv.isNegative()); var x = p.x; var y = p.y; var den_inv = den2; @@ -106,7 +106,7 @@ pub const Ristretto255 = struct { const x_z_inv = x.mul(z_inv); const yneg = y.neg(); - y.cMov(yneg, @boolToInt(x_z_inv.isNegative())); + y.cMov(yneg, @intFromBool(x_z_inv.isNegative())); return p.z.sub(y).mul(den_inv).abs().toBytes(); } @@ -163,7 +163,7 @@ pub const Ristretto255 = struct { const q_ = &q.p; const a = p_.x.mul(q_.y).equivalent(p_.y.mul(q_.x)); const b = p_.y.mul(q_.y).equivalent(p_.x.mul(q_.x)); - return (@boolToInt(a) | @boolToInt(b)) != 0; + return (@intFromBool(a) | @intFromBool(b)) != 0; } }; diff --git a/lib/std/crypto/Certificate.zig b/lib/std/crypto/Certificate.zig index b8dc636693..51eb97ab32 100644 --- a/lib/std/crypto/Certificate.zig +++ b/lib/std/crypto/Certificate.zig @@ -312,7 +312,7 @@ pub const Parsed = struct { while (name_i < general_names.slice.end) { const general_name = try der.Element.parse(subject_alt_name, name_i); name_i = general_name.slice.end; - switch (@intToEnum(GeneralNameTag, @enumToInt(general_name.identifier.tag))) { + switch (@enumFromInt(GeneralNameTag, @intFromEnum(general_name.identifier.tag))) { .dNSName => { const dns_name = subject_alt_name[general_name.slice.start..general_name.slice.end]; if (checkHostName(host_name, dns_name)) return; @@ -597,8 +597,8 @@ const Date = struct { var month: u4 = 1; while (month < date.month) : (month += 1) { const days: u64 = std.time.epoch.getDaysInMonth( - @intToEnum(std.time.epoch.YearLeapKind, @boolToInt(is_leap)), - @intToEnum(std.time.epoch.Month, month), + @enumFromInt(std.time.epoch.YearLeapKind, @intFromBool(is_leap)), + @enumFromInt(std.time.epoch.Month, month), ); sec += days * std.time.epoch.secs_per_day; } diff --git a/lib/std/crypto/Certificate/Bundle/macos.zig b/lib/std/crypto/Certificate/Bundle/macos.zig index dba0520795..bd7100eb46 100644 --- a/lib/std/crypto/Certificate/Bundle/macos.zig +++ b/lib/std/crypto/Certificate/Bundle/macos.zig @@ -42,7 +42,7 @@ pub fn rescanMac(cb: *Bundle, gpa: Allocator) RescanMacError!void { const table_header = try reader.readStructBig(TableHeader); - if (@intToEnum(std.os.darwin.cssm.DB_RECORDTYPE, table_header.table_id) != .X509_CERTIFICATE) { + if (@enumFromInt(std.os.darwin.cssm.DB_RECORDTYPE, table_header.table_id) != .X509_CERTIFICATE) { continue; } diff --git a/lib/std/crypto/argon2.zig b/lib/std/crypto/argon2.zig index 43dbe3e332..40df3290c0 100644 --- a/lib/std/crypto/argon2.zig +++ b/lib/std/crypto/argon2.zig @@ -115,7 +115,7 @@ fn initHash( mem.writeIntLittle(u32, parameters[8..12], params.m); mem.writeIntLittle(u32, parameters[12..16], params.t); mem.writeIntLittle(u32, parameters[16..20], version); - mem.writeIntLittle(u32, parameters[20..24], @enumToInt(mode)); + mem.writeIntLittle(u32, parameters[20..24], @intFromEnum(mode)); b2.update(¶meters); mem.writeIntLittle(u32, &tmp, @intCast(u32, password.len)); b2.update(&tmp); @@ -292,7 +292,7 @@ fn processSegment( in[2] = slice; in[3] = memory; in[4] = passes; - in[5] = @enumToInt(mode); + in[5] = @intFromEnum(mode); } var index: u32 = 0; if (n == 0 and slice == 0) { diff --git a/lib/std/crypto/benchmark.zig b/lib/std/crypto/benchmark.zig index 26f5d50979..f47c334ee9 100644 --- a/lib/std/crypto/benchmark.zig +++ b/lib/std/crypto/benchmark.zig @@ -54,8 +54,8 @@ pub fn benchmarkHash(comptime Hash: anytype, comptime bytes: comptime_int) !u64 const end = timer.read(); - const elapsed_s = @intToFloat(f64, end - start) / time.ns_per_s; - const throughput = @floatToInt(u64, bytes / elapsed_s); + const elapsed_s = @floatFromInt(f64, end - start) / time.ns_per_s; + const throughput = @intFromFloat(u64, bytes / elapsed_s); return throughput; } @@ -95,8 +95,8 @@ pub fn benchmarkMac(comptime Mac: anytype, comptime bytes: comptime_int) !u64 { } const end = timer.read(); - const elapsed_s = @intToFloat(f64, end - start) / time.ns_per_s; - const throughput = @floatToInt(u64, bytes / elapsed_s); + const elapsed_s = @floatFromInt(f64, end - start) / time.ns_per_s; + const throughput = @intFromFloat(u64, bytes / elapsed_s); return throughput; } @@ -125,8 +125,8 @@ pub fn benchmarkKeyExchange(comptime DhKeyExchange: anytype, comptime exchange_c } const end = timer.read(); - const elapsed_s = @intToFloat(f64, end - start) / time.ns_per_s; - const throughput = @floatToInt(u64, exchange_count / elapsed_s); + const elapsed_s = @floatFromInt(f64, end - start) / time.ns_per_s; + const throughput = @intFromFloat(u64, exchange_count / elapsed_s); return throughput; } @@ -148,8 +148,8 @@ pub fn benchmarkSignature(comptime Signature: anytype, comptime signatures_count } const end = timer.read(); - const elapsed_s = @intToFloat(f64, end - start) / time.ns_per_s; - const throughput = @floatToInt(u64, signatures_count / elapsed_s); + const elapsed_s = @floatFromInt(f64, end - start) / time.ns_per_s; + const throughput = @intFromFloat(u64, signatures_count / elapsed_s); return throughput; } @@ -172,8 +172,8 @@ pub fn benchmarkSignatureVerification(comptime Signature: anytype, comptime sign } const end = timer.read(); - const elapsed_s = @intToFloat(f64, end - start) / time.ns_per_s; - const throughput = @floatToInt(u64, signatures_count / elapsed_s); + const elapsed_s = @floatFromInt(f64, end - start) / time.ns_per_s; + const throughput = @intFromFloat(u64, signatures_count / elapsed_s); return throughput; } @@ -201,8 +201,8 @@ pub fn benchmarkBatchSignatureVerification(comptime Signature: anytype, comptime } const end = timer.read(); - const elapsed_s = @intToFloat(f64, end - start) / time.ns_per_s; - const throughput = batch.len * @floatToInt(u64, signatures_count / elapsed_s); + const elapsed_s = @floatFromInt(f64, end - start) / time.ns_per_s; + const throughput = batch.len * @intFromFloat(u64, signatures_count / elapsed_s); return throughput; } @@ -227,8 +227,8 @@ pub fn benchmarkKem(comptime Kem: anytype, comptime kems_count: comptime_int) !u } const end = timer.read(); - const elapsed_s = @intToFloat(f64, end - start) / time.ns_per_s; - const throughput = @floatToInt(u64, kems_count / elapsed_s); + const elapsed_s = @floatFromInt(f64, end - start) / time.ns_per_s; + const throughput = @intFromFloat(u64, kems_count / elapsed_s); return throughput; } @@ -249,8 +249,8 @@ pub fn benchmarkKemDecaps(comptime Kem: anytype, comptime kems_count: comptime_i } const end = timer.read(); - const elapsed_s = @intToFloat(f64, end - start) / time.ns_per_s; - const throughput = @floatToInt(u64, kems_count / elapsed_s); + const elapsed_s = @floatFromInt(f64, end - start) / time.ns_per_s; + const throughput = @intFromFloat(u64, kems_count / elapsed_s); return throughput; } @@ -267,8 +267,8 @@ pub fn benchmarkKemKeyGen(comptime Kem: anytype, comptime kems_count: comptime_i } const end = timer.read(); - const elapsed_s = @intToFloat(f64, end - start) / time.ns_per_s; - const throughput = @floatToInt(u64, kems_count / elapsed_s); + const elapsed_s = @floatFromInt(f64, end - start) / time.ns_per_s; + const throughput = @intFromFloat(u64, kems_count / elapsed_s); return throughput; } @@ -309,8 +309,8 @@ pub fn benchmarkAead(comptime Aead: anytype, comptime bytes: comptime_int) !u64 mem.doNotOptimizeAway(&in); const end = timer.read(); - const elapsed_s = @intToFloat(f64, end - start) / time.ns_per_s; - const throughput = @floatToInt(u64, 2 * bytes / elapsed_s); + const elapsed_s = @floatFromInt(f64, end - start) / time.ns_per_s; + const throughput = @intFromFloat(u64, 2 * bytes / elapsed_s); return throughput; } @@ -338,8 +338,8 @@ pub fn benchmarkAes(comptime Aes: anytype, comptime count: comptime_int) !u64 { mem.doNotOptimizeAway(&in); const end = timer.read(); - const elapsed_s = @intToFloat(f64, end - start) / time.ns_per_s; - const throughput = @floatToInt(u64, count / elapsed_s); + const elapsed_s = @floatFromInt(f64, end - start) / time.ns_per_s; + const throughput = @intFromFloat(u64, count / elapsed_s); return throughput; } @@ -367,8 +367,8 @@ pub fn benchmarkAes8(comptime Aes: anytype, comptime count: comptime_int) !u64 { mem.doNotOptimizeAway(&in); const end = timer.read(); - const elapsed_s = @intToFloat(f64, end - start) / time.ns_per_s; - const throughput = @floatToInt(u64, 8 * count / elapsed_s); + const elapsed_s = @floatFromInt(f64, end - start) / time.ns_per_s; + const throughput = @intFromFloat(u64, 8 * count / elapsed_s); return throughput; } @@ -422,7 +422,7 @@ fn benchmarkPwhash( } const end = timer.read(); - const elapsed_s = @intToFloat(f64, end - start) / time.ns_per_s; + const elapsed_s = @floatFromInt(f64, end - start) / time.ns_per_s; const throughput = elapsed_s / count; return throughput; diff --git a/lib/std/crypto/ff.zig b/lib/std/crypto/ff.zig index 37e3d1c1b3..7b298c71c2 100644 --- a/lib/std/crypto/ff.zig +++ b/lib/std/crypto/ff.zig @@ -637,7 +637,7 @@ pub fn Modulus(comptime max_bits: comptime_int) type { assert(x.limbs_count() == self.limbs_count()); assert(y.limbs_count() == self.limbs_count()); const overflow = self.montgomeryLoop(&d, x, y); - const underflow = 1 -% @boolToInt(ct.limbsCmpGeq(d.v, self.v)); + const underflow = 1 -% @intFromBool(ct.limbsCmpGeq(d.v, self.v)); const need_sub = ct.eql(overflow, underflow); _ = d.v.conditionalSubWithOverflow(need_sub, self.v); d.montgomery = x.montgomery == y.montgomery; @@ -649,7 +649,7 @@ pub fn Modulus(comptime max_bits: comptime_int) type { var d = self.zero; assert(x.limbs_count() == self.limbs_count()); const overflow = self.montgomeryLoop(&d, x, x); - const underflow = 1 -% @boolToInt(ct.limbsCmpGeq(d.v, self.v)); + const underflow = 1 -% @intFromBool(ct.limbsCmpGeq(d.v, self.v)); const need_sub = ct.eql(overflow, underflow); _ = d.v.conditionalSubWithOverflow(need_sub, self.v); d.montgomery = true; @@ -763,7 +763,7 @@ const ct = if (std.options.side_channels_mitigations == .none) ct_unprotected el const ct_protected = struct { // Returns x if on is true, otherwise y. fn select(on: bool, x: Limb, y: Limb) Limb { - const mask = @as(Limb, 0) -% @boolToInt(on); + const mask = @as(Limb, 0) -% @intFromBool(on); return y ^ (mask & (y ^ x)); } @@ -789,7 +789,7 @@ const ct_protected = struct { // Compares two big integers in constant time, returning true if x >= y. fn limbsCmpGeq(x: anytype, y: @TypeOf(x)) bool { - return @bitCast(bool, 1 - @boolToInt(ct.limbsCmpLt(x, y))); + return @bitCast(bool, 1 - @intFromBool(ct.limbsCmpLt(x, y))); } // Multiplies two limbs and returns the result as a wide limb. diff --git a/lib/std/crypto/kyber_d00.zig b/lib/std/crypto/kyber_d00.zig index dca4ab7ea7..3cb0f02c0d 100644 --- a/lib/std/crypto/kyber_d00.zig +++ b/lib/std/crypto/kyber_d00.zig @@ -1454,7 +1454,7 @@ fn Mat(comptime K: u8) type { // Returns `true` if a ≠ b. fn ctneq(comptime len: usize, a: [len]u8, b: [len]u8) u1 { - return 1 - @boolToInt(crypto.utils.timingSafeEql([len]u8, a, b)); + return 1 - @intFromBool(crypto.utils.timingSafeEql([len]u8, a, b)); } // Copy src into dst given b = 1. diff --git a/lib/std/crypto/pcurves/p256.zig b/lib/std/crypto/pcurves/p256.zig index efda420284..a797fbce3e 100644 --- a/lib/std/crypto/pcurves/p256.zig +++ b/lib/std/crypto/pcurves/p256.zig @@ -36,8 +36,8 @@ pub const P256 = struct { /// Reject the neutral element. pub fn rejectIdentity(p: P256) IdentityElementError!void { - const affine_0 = @boolToInt(p.x.equivalent(AffineCoordinates.identityElement.x)) & (@boolToInt(p.y.isZero()) | @boolToInt(p.y.equivalent(AffineCoordinates.identityElement.y))); - const is_identity = @boolToInt(p.z.isZero()) | affine_0; + const affine_0 = @intFromBool(p.x.equivalent(AffineCoordinates.identityElement.x)) & (@intFromBool(p.y.isZero()) | @intFromBool(p.y.equivalent(AffineCoordinates.identityElement.y))); + const is_identity = @intFromBool(p.z.isZero()) | affine_0; if (is_identity != 0) { return error.IdentityElement; } @@ -49,8 +49,8 @@ pub const P256 = struct { const y = p.y; const x3AxB = x.sq().mul(x).sub(x).sub(x).sub(x).add(B); const yy = y.sq(); - const on_curve = @boolToInt(x3AxB.equivalent(yy)); - const is_identity = @boolToInt(x.equivalent(AffineCoordinates.identityElement.x)) & @boolToInt(y.equivalent(AffineCoordinates.identityElement.y)); + const on_curve = @intFromBool(x3AxB.equivalent(yy)); + const is_identity = @intFromBool(x.equivalent(AffineCoordinates.identityElement.x)) & @intFromBool(y.equivalent(AffineCoordinates.identityElement.y)); if ((on_curve | is_identity) == 0) { return error.InvalidEncoding; } @@ -71,7 +71,7 @@ pub const P256 = struct { const x3AxB = x.sq().mul(x).sub(x).sub(x).sub(x).add(B); var y = try x3AxB.sqrt(); const yn = y.neg(); - y.cMov(yn, @boolToInt(is_odd) ^ @boolToInt(y.isOdd())); + y.cMov(yn, @intFromBool(is_odd) ^ @intFromBool(y.isOdd())); return y; } @@ -219,7 +219,7 @@ pub const P256 = struct { .y = Y3, .z = Z3, }; - ret.cMov(p, @boolToInt(q.x.isZero())); + ret.cMov(p, @intFromBool(q.x.isZero())); return ret; } @@ -288,8 +288,8 @@ pub const P256 = struct { /// Return affine coordinates. pub fn affineCoordinates(p: P256) AffineCoordinates { - const affine_0 = @boolToInt(p.x.equivalent(AffineCoordinates.identityElement.x)) & (@boolToInt(p.y.isZero()) | @boolToInt(p.y.equivalent(AffineCoordinates.identityElement.y))); - const is_identity = @boolToInt(p.z.isZero()) | affine_0; + const affine_0 = @intFromBool(p.x.equivalent(AffineCoordinates.identityElement.x)) & (@intFromBool(p.y.isZero()) | @intFromBool(p.y.equivalent(AffineCoordinates.identityElement.y))); + const is_identity = @intFromBool(p.z.isZero()) | affine_0; const zinv = p.z.invert(); var ret = AffineCoordinates{ .x = p.x.mul(zinv), diff --git a/lib/std/crypto/pcurves/p384.zig b/lib/std/crypto/pcurves/p384.zig index 958543084e..3d96592f50 100644 --- a/lib/std/crypto/pcurves/p384.zig +++ b/lib/std/crypto/pcurves/p384.zig @@ -36,8 +36,8 @@ pub const P384 = struct { /// Reject the neutral element. pub fn rejectIdentity(p: P384) IdentityElementError!void { - const affine_0 = @boolToInt(p.x.equivalent(AffineCoordinates.identityElement.x)) & (@boolToInt(p.y.isZero()) | @boolToInt(p.y.equivalent(AffineCoordinates.identityElement.y))); - const is_identity = @boolToInt(p.z.isZero()) | affine_0; + const affine_0 = @intFromBool(p.x.equivalent(AffineCoordinates.identityElement.x)) & (@intFromBool(p.y.isZero()) | @intFromBool(p.y.equivalent(AffineCoordinates.identityElement.y))); + const is_identity = @intFromBool(p.z.isZero()) | affine_0; if (is_identity != 0) { return error.IdentityElement; } @@ -49,8 +49,8 @@ pub const P384 = struct { const y = p.y; const x3AxB = x.sq().mul(x).sub(x).sub(x).sub(x).add(B); const yy = y.sq(); - const on_curve = @boolToInt(x3AxB.equivalent(yy)); - const is_identity = @boolToInt(x.equivalent(AffineCoordinates.identityElement.x)) & @boolToInt(y.equivalent(AffineCoordinates.identityElement.y)); + const on_curve = @intFromBool(x3AxB.equivalent(yy)); + const is_identity = @intFromBool(x.equivalent(AffineCoordinates.identityElement.x)) & @intFromBool(y.equivalent(AffineCoordinates.identityElement.y)); if ((on_curve | is_identity) == 0) { return error.InvalidEncoding; } @@ -71,7 +71,7 @@ pub const P384 = struct { const x3AxB = x.sq().mul(x).sub(x).sub(x).sub(x).add(B); var y = try x3AxB.sqrt(); const yn = y.neg(); - y.cMov(yn, @boolToInt(is_odd) ^ @boolToInt(y.isOdd())); + y.cMov(yn, @intFromBool(is_odd) ^ @intFromBool(y.isOdd())); return y; } @@ -219,7 +219,7 @@ pub const P384 = struct { .y = Y3, .z = Z3, }; - ret.cMov(p, @boolToInt(q.x.isZero())); + ret.cMov(p, @intFromBool(q.x.isZero())); return ret; } @@ -288,8 +288,8 @@ pub const P384 = struct { /// Return affine coordinates. pub fn affineCoordinates(p: P384) AffineCoordinates { - const affine_0 = @boolToInt(p.x.equivalent(AffineCoordinates.identityElement.x)) & (@boolToInt(p.y.isZero()) | @boolToInt(p.y.equivalent(AffineCoordinates.identityElement.y))); - const is_identity = @boolToInt(p.z.isZero()) | affine_0; + const affine_0 = @intFromBool(p.x.equivalent(AffineCoordinates.identityElement.x)) & (@intFromBool(p.y.isZero()) | @intFromBool(p.y.equivalent(AffineCoordinates.identityElement.y))); + const is_identity = @intFromBool(p.z.isZero()) | affine_0; const zinv = p.z.invert(); var ret = AffineCoordinates{ .x = p.x.mul(zinv), diff --git a/lib/std/crypto/pcurves/secp256k1.zig b/lib/std/crypto/pcurves/secp256k1.zig index 2d94594f61..f0b086f974 100644 --- a/lib/std/crypto/pcurves/secp256k1.zig +++ b/lib/std/crypto/pcurves/secp256k1.zig @@ -89,8 +89,8 @@ pub const Secp256k1 = struct { /// Reject the neutral element. pub fn rejectIdentity(p: Secp256k1) IdentityElementError!void { - const affine_0 = @boolToInt(p.x.equivalent(AffineCoordinates.identityElement.x)) & (@boolToInt(p.y.isZero()) | @boolToInt(p.y.equivalent(AffineCoordinates.identityElement.y))); - const is_identity = @boolToInt(p.z.isZero()) | affine_0; + const affine_0 = @intFromBool(p.x.equivalent(AffineCoordinates.identityElement.x)) & (@intFromBool(p.y.isZero()) | @intFromBool(p.y.equivalent(AffineCoordinates.identityElement.y))); + const is_identity = @intFromBool(p.z.isZero()) | affine_0; if (is_identity != 0) { return error.IdentityElement; } @@ -102,8 +102,8 @@ pub const Secp256k1 = struct { const y = p.y; const x3B = x.sq().mul(x).add(B); const yy = y.sq(); - const on_curve = @boolToInt(x3B.equivalent(yy)); - const is_identity = @boolToInt(x.equivalent(AffineCoordinates.identityElement.x)) & @boolToInt(y.equivalent(AffineCoordinates.identityElement.y)); + const on_curve = @intFromBool(x3B.equivalent(yy)); + const is_identity = @intFromBool(x.equivalent(AffineCoordinates.identityElement.x)) & @intFromBool(y.equivalent(AffineCoordinates.identityElement.y)); if ((on_curve | is_identity) == 0) { return error.InvalidEncoding; } @@ -124,7 +124,7 @@ pub const Secp256k1 = struct { const x3B = x.sq().mul(x).add(B); var y = try x3B.sqrt(); const yn = y.neg(); - y.cMov(yn, @boolToInt(is_odd) ^ @boolToInt(y.isOdd())); + y.cMov(yn, @intFromBool(is_odd) ^ @intFromBool(y.isOdd())); return y; } @@ -253,7 +253,7 @@ pub const Secp256k1 = struct { .y = Y3, .z = Z3, }; - ret.cMov(p, @boolToInt(q.x.isZero())); + ret.cMov(p, @intFromBool(q.x.isZero())); return ret; } @@ -316,8 +316,8 @@ pub const Secp256k1 = struct { /// Return affine coordinates. pub fn affineCoordinates(p: Secp256k1) AffineCoordinates { - const affine_0 = @boolToInt(p.x.equivalent(AffineCoordinates.identityElement.x)) & (@boolToInt(p.y.isZero()) | @boolToInt(p.y.equivalent(AffineCoordinates.identityElement.y))); - const is_identity = @boolToInt(p.z.isZero()) | affine_0; + const affine_0 = @intFromBool(p.x.equivalent(AffineCoordinates.identityElement.x)) & (@intFromBool(p.y.isZero()) | @intFromBool(p.y.equivalent(AffineCoordinates.identityElement.y))); + const is_identity = @intFromBool(p.z.isZero()) | affine_0; const zinv = p.z.invert(); var ret = AffineCoordinates{ .x = p.x.mul(zinv), diff --git a/lib/std/crypto/tls.zig b/lib/std/crypto/tls.zig index 0498c9c297..4c03c48973 100644 --- a/lib/std/crypto/tls.zig +++ b/lib/std/crypto/tls.zig @@ -48,8 +48,8 @@ pub const hello_retry_request_sequence = [32]u8{ }; pub const close_notify_alert = [_]u8{ - @enumToInt(AlertLevel.warning), - @enumToInt(AlertDescription.close_notify), + @intFromEnum(AlertLevel.warning), + @intFromEnum(AlertDescription.close_notify), }; pub const ProtocolVersion = enum(u16) { @@ -399,7 +399,7 @@ pub fn hmac(comptime Hmac: type, message: []const u8, key: [Hmac.key_length]u8) } pub inline fn extension(comptime et: ExtensionType, bytes: anytype) [2 + 2 + bytes.len]u8 { - return int2(@enumToInt(et)) ++ array(1, bytes); + return int2(@intFromEnum(et)) ++ array(1, bytes); } pub inline fn array(comptime elem_size: comptime_int, bytes: anytype) [2 + bytes.len]u8 { @@ -411,8 +411,8 @@ pub inline fn enum_array(comptime E: type, comptime tags: []const E) [2 + @sizeO assert(@sizeOf(E) == 2); var result: [tags.len * 2]u8 = undefined; for (tags, 0..) |elem, i| { - result[i * 2] = @truncate(u8, @enumToInt(elem) >> 8); - result[i * 2 + 1] = @truncate(u8, @enumToInt(elem)); + result[i * 2] = @truncate(u8, @intFromEnum(elem) >> 8); + result[i * 2 + 1] = @truncate(u8, @intFromEnum(elem)); } return array(2, result); } @@ -513,7 +513,7 @@ pub const Decoder = struct { .Enum => |info| { const int = d.decode(info.tag_type); if (info.is_exhaustive) @compileError("exhaustive enum cannot be used"); - return @intToEnum(T, int); + return @enumFromInt(T, int); }, else => @compileError("unsupported type: " ++ @typeName(T)), } diff --git a/lib/std/crypto/tls/Client.zig b/lib/std/crypto/tls/Client.zig index 5b9b00538a..94ecf0d3ef 100644 --- a/lib/std/crypto/tls/Client.zig +++ b/lib/std/crypto/tls/Client.zig @@ -180,14 +180,14 @@ pub fn init(stream: anytype, ca_bundle: Certificate.Bundle, host: []const u8) In .x25519, })) ++ tls.extension( .key_share, - array(1, int2(@enumToInt(tls.NamedGroup.x25519)) ++ + array(1, int2(@intFromEnum(tls.NamedGroup.x25519)) ++ array(1, x25519_kp.public_key) ++ - int2(@enumToInt(tls.NamedGroup.secp256r1)) ++ + int2(@intFromEnum(tls.NamedGroup.secp256r1)) ++ array(1, secp256r1_kp.public_key.toUncompressedSec1()) ++ - int2(@enumToInt(tls.NamedGroup.x25519_kyber768d00)) ++ + int2(@intFromEnum(tls.NamedGroup.x25519_kyber768d00)) ++ array(1, x25519_kp.public_key ++ kyber768_kp.public_key.toBytes())), ) ++ - int2(@enumToInt(tls.ExtensionType.server_name)) ++ + int2(@intFromEnum(tls.ExtensionType.server_name)) ++ int2(host_len + 5) ++ // byte length of this extension payload int2(host_len + 3) ++ // server_name_list byte count [1]u8{0x00} ++ // name_type @@ -200,7 +200,7 @@ pub fn init(stream: anytype, ca_bundle: Certificate.Bundle, host: []const u8) In const legacy_compression_methods = 0x0100; const client_hello = - int2(@enumToInt(tls.ProtocolVersion.tls_1_2)) ++ + int2(@intFromEnum(tls.ProtocolVersion.tls_1_2)) ++ hello_rand ++ [1]u8{32} ++ legacy_session_id ++ cipher_suites ++ @@ -208,12 +208,12 @@ pub fn init(stream: anytype, ca_bundle: Certificate.Bundle, host: []const u8) In extensions_header; const out_handshake = - [_]u8{@enumToInt(tls.HandshakeType.client_hello)} ++ + [_]u8{@intFromEnum(tls.HandshakeType.client_hello)} ++ int3(@intCast(u24, client_hello.len + host_len)) ++ client_hello; const plaintext_header = [_]u8{ - @enumToInt(tls.ContentType.handshake), + @intFromEnum(tls.ContentType.handshake), 0x03, 0x01, // legacy_record_version } ++ int2(@intCast(u16, out_handshake.len + host_len)) ++ out_handshake; @@ -348,7 +348,7 @@ pub fn init(stream: anytype, ca_bundle: Certificate.Bundle, host: []const u8) In if (!have_shared_key) return error.TlsIllegalParameter; const tls_version = if (supported_version == 0) legacy_version else supported_version; - if (tls_version != @enumToInt(tls.ProtocolVersion.tls_1_3)) + if (tls_version != @intFromEnum(tls.ProtocolVersion.tls_1_3)) return error.TlsIllegalParameter; switch (cipher_suite_tag) { @@ -466,7 +466,7 @@ pub fn init(stream: anytype, ca_bundle: Certificate.Bundle, host: []const u8) In }, }; - const inner_ct = @intToEnum(tls.ContentType, cleartext[cleartext.len - 1]); + const inner_ct = @enumFromInt(tls.ContentType, cleartext[cleartext.len - 1]); if (inner_ct != .handshake) return error.TlsUnexpectedMessage; var ctd = tls.Decoder.fromTheirSlice(cleartext[0 .. cleartext.len - 1]); @@ -624,7 +624,7 @@ pub fn init(stream: anytype, ca_bundle: Certificate.Bundle, host: []const u8) In if (handshake_state != .finished) return error.TlsUnexpectedMessage; // This message is to trick buggy proxies into behaving correctly. const client_change_cipher_spec_msg = [_]u8{ - @enumToInt(tls.ContentType.change_cipher_spec), + @intFromEnum(tls.ContentType.change_cipher_spec), 0x03, 0x03, // legacy protocol version 0x00, 0x01, // length 0x01, @@ -640,14 +640,14 @@ pub fn init(stream: anytype, ca_bundle: Certificate.Bundle, host: []const u8) In const handshake_hash = p.transcript_hash.finalResult(); const verify_data = tls.hmac(P.Hmac, &handshake_hash, p.client_finished_key); const out_cleartext = [_]u8{ - @enumToInt(tls.HandshakeType.finished), + @intFromEnum(tls.HandshakeType.finished), 0, 0, verify_data.len, // length - } ++ verify_data ++ [1]u8{@enumToInt(tls.ContentType.handshake)}; + } ++ verify_data ++ [1]u8{@intFromEnum(tls.ContentType.handshake)}; const wrapped_len = out_cleartext.len + P.AEAD.tag_length; var finished_msg = [_]u8{ - @enumToInt(tls.ContentType.application_data), + @intFromEnum(tls.ContentType.application_data), 0x03, 0x03, // legacy protocol version 0, wrapped_len, // byte length of encrypted record } ++ @as([wrapped_len]u8, undefined); @@ -809,7 +809,7 @@ fn prepareCiphertextRecord( }; @memcpy(cleartext_buf[0..encrypted_content_len], bytes[bytes_i..][0..encrypted_content_len]); - cleartext_buf[encrypted_content_len] = @enumToInt(inner_content_type); + cleartext_buf[encrypted_content_len] = @intFromEnum(inner_content_type); bytes_i += encrypted_content_len; const ciphertext_len = encrypted_content_len + 1; const cleartext = cleartext_buf[0..ciphertext_len]; @@ -817,8 +817,8 @@ fn prepareCiphertextRecord( const record_start = ciphertext_end; const ad = ciphertext_buf[ciphertext_end..][0..5]; ad.* = - [_]u8{@enumToInt(tls.ContentType.application_data)} ++ - int2(@enumToInt(tls.ProtocolVersion.tls_1_2)) ++ + [_]u8{@intFromEnum(tls.ContentType.application_data)} ++ + int2(@intFromEnum(tls.ProtocolVersion.tls_1_2)) ++ int2(ciphertext_len + P.AEAD.tag_length); ciphertext_end += ad.len; const ciphertext = ciphertext_buf[ciphertext_end..][0..ciphertext_len]; @@ -1037,7 +1037,7 @@ pub fn readvAdvanced(c: *Client, stream: anytype, iovecs: []const std.os.iovec) in = 0; continue; } - const ct = @intToEnum(tls.ContentType, frag[in]); + const ct = @enumFromInt(tls.ContentType, frag[in]); in += 1; const legacy_version = mem.readIntBig(u16, frag[in..][0..2]); in += 2; @@ -1070,8 +1070,8 @@ pub fn readvAdvanced(c: *Client, stream: anytype, iovecs: []const std.os.iovec) switch (ct) { .alert => { if (in + 2 > frag.len) return error.TlsDecodeError; - const level = @intToEnum(tls.AlertLevel, frag[in]); - const desc = @intToEnum(tls.AlertDescription, frag[in + 1]); + const level = @enumFromInt(tls.AlertLevel, frag[in]); + const desc = @enumFromInt(tls.AlertDescription, frag[in + 1]); _ = level; try desc.toError(); @@ -1105,11 +1105,11 @@ pub fn readvAdvanced(c: *Client, stream: anytype, iovecs: []const std.os.iovec) c.read_seq = try std.math.add(u64, c.read_seq, 1); - const inner_ct = @intToEnum(tls.ContentType, cleartext[cleartext.len - 1]); + const inner_ct = @enumFromInt(tls.ContentType, cleartext[cleartext.len - 1]); switch (inner_ct) { .alert => { - const level = @intToEnum(tls.AlertLevel, cleartext[0]); - const desc = @intToEnum(tls.AlertDescription, cleartext[1]); + const level = @enumFromInt(tls.AlertLevel, cleartext[0]); + const desc = @enumFromInt(tls.AlertDescription, cleartext[1]); if (desc == .close_notify) { c.received_close_notify = true; c.partial_ciphertext_end = c.partial_ciphertext_idx; @@ -1124,7 +1124,7 @@ pub fn readvAdvanced(c: *Client, stream: anytype, iovecs: []const std.os.iovec) .handshake => { var ct_i: usize = 0; while (true) { - const handshake_type = @intToEnum(tls.HandshakeType, cleartext[ct_i]); + const handshake_type = @enumFromInt(tls.HandshakeType, cleartext[ct_i]); ct_i += 1; const handshake_len = mem.readIntBig(u24, cleartext[ct_i..][0..3]); ct_i += 3; @@ -1148,7 +1148,7 @@ pub fn readvAdvanced(c: *Client, stream: anytype, iovecs: []const std.os.iovec) } c.read_seq = 0; - switch (@intToEnum(tls.KeyUpdateRequest, handshake[0])) { + switch (@enumFromInt(tls.KeyUpdateRequest, handshake[0])) { .update_requested => { switch (c.application_cipher) { inline else => |*p| { diff --git a/lib/std/debug.zig b/lib/std/debug.zig index 3015c30bfb..e0726d5444 100644 --- a/lib/std/debug.zig +++ b/lib/std/debug.zig @@ -461,7 +461,7 @@ pub const StackIterator = struct { if (native_os == .freestanding) return true; const aligned_address = address & ~@intCast(usize, (mem.page_size - 1)); - const aligned_memory = @intToPtr([*]align(mem.page_size) u8, aligned_address)[0..mem.page_size]; + const aligned_memory = @ptrFromInt([*]align(mem.page_size) u8, aligned_address)[0..mem.page_size]; if (native_os != .windows) { if (native_os != .wasi) { @@ -511,7 +511,7 @@ pub const StackIterator = struct { if (fp == 0 or !mem.isAligned(fp, @alignOf(usize)) or !isValidMemory(fp)) return null; - const new_fp = math.add(usize, @intToPtr(*const usize, fp).*, fp_bias) catch return null; + const new_fp = math.add(usize, @ptrFromInt(*const usize, fp).*, fp_bias) catch return null; // Sanity check: the stack grows down thus all the parent frames must be // be at addresses that are greater (or equal) than the previous one. @@ -520,7 +520,7 @@ pub const StackIterator = struct { if (new_fp != 0 and new_fp < self.fp) return null; - const new_pc = @intToPtr( + const new_pc = @ptrFromInt( *const usize, math.add(usize, fp, pc_offset) catch return null, ).*; @@ -584,12 +584,12 @@ pub noinline fn walkStackWindows(addresses: []usize) usize { ); } else { // leaf function - context.setIp(@intToPtr(*u64, current_regs.sp).*); + context.setIp(@ptrFromInt(*u64, current_regs.sp).*); context.setSp(current_regs.sp + @sizeOf(usize)); } const next_regs = context.getRegs(); - if (next_regs.sp < @ptrToInt(tib.StackLimit) or next_regs.sp > @ptrToInt(tib.StackBase)) { + if (next_regs.sp < @intFromPtr(tib.StackLimit) or next_regs.sp > @intFromPtr(tib.StackBase)) { break; } @@ -1216,7 +1216,7 @@ pub const DebugInfo = struct { var module_valid = true; while (module_valid) { const module_info = try debug_info.modules.addOne(allocator); - module_info.base_address = @ptrToInt(module_entry.modBaseAddr); + module_info.base_address = @intFromPtr(module_entry.modBaseAddr); module_info.size = module_entry.modBaseSize; module_info.name = allocator.dupe(u8, mem.sliceTo(&module_entry.szModule, 0)) catch &.{}; module_valid = windows.kernel32.Module32Next(handle, &module_entry) == 1; @@ -1283,9 +1283,9 @@ pub const DebugInfo = struct { var it = macho.LoadCommandIterator{ .ncmds = header.ncmds, - .buffer = @alignCast(@alignOf(u64), @intToPtr( + .buffer = @alignCast(@alignOf(u64), @ptrFromInt( [*]u8, - @ptrToInt(header) + @sizeOf(macho.mach_header_64), + @intFromPtr(header) + @sizeOf(macho.mach_header_64), ))[0..header.sizeofcmds], }; while (it.next()) |cmd| switch (cmd.cmd()) { @@ -1332,7 +1332,7 @@ pub const DebugInfo = struct { return obj_di; } - const mapped_module = @intToPtr([*]const u8, module.base_address)[0..module.size]; + const mapped_module = @ptrFromInt([*]const u8, module.base_address)[0..module.size]; const obj_di = try self.allocator.create(ModuleDebugInfo); errdefer self.allocator.destroy(obj_di); @@ -1897,11 +1897,11 @@ fn handleSegfaultPosix(sig: i32, info: *const os.siginfo_t, ctx_ptr: ?*const any resetSegfaultHandler(); const addr = switch (native_os) { - .linux => @ptrToInt(info.fields.sigfault.addr), - .freebsd, .macos => @ptrToInt(info.addr), - .netbsd => @ptrToInt(info.info.reason.fault.addr), - .openbsd => @ptrToInt(info.data.fault.addr), - .solaris => @ptrToInt(info.reason.fault.addr), + .linux => @intFromPtr(info.fields.sigfault.addr), + .freebsd, .macos => @intFromPtr(info.addr), + .netbsd => @intFromPtr(info.info.reason.fault.addr), + .openbsd => @intFromPtr(info.data.fault.addr), + .solaris => @intFromPtr(info.reason.fault.addr), else => unreachable, }; @@ -2008,7 +2008,7 @@ fn handleSegfaultWindowsExtra( msg: u8, label: ?[]const u8, ) noreturn { - const exception_address = @ptrToInt(info.ExceptionRecord.ExceptionAddress); + const exception_address = @intFromPtr(info.ExceptionRecord.ExceptionAddress); if (@hasDecl(windows, "CONTEXT")) { nosuspend switch (panic_stage) { 0 => { diff --git a/lib/std/dynamic_library.zig b/lib/std/dynamic_library.zig index 928d0cc9c3..38c5de9cad 100644 --- a/lib/std/dynamic_library.zig +++ b/lib/std/dynamic_library.zig @@ -71,18 +71,18 @@ pub fn linkmap_iterator(phdrs: []elf.Phdr) !LinkMap.Iterator { while (_DYNAMIC[i].d_tag != elf.DT_NULL) : (i += 1) { switch (_DYNAMIC[i].d_tag) { elf.DT_DEBUG => { - const ptr = @intToPtr(?*RDebug, _DYNAMIC[i].d_val); + const ptr = @ptrFromInt(?*RDebug, _DYNAMIC[i].d_val); if (ptr) |r_debug| { if (r_debug.r_version != 1) return error.InvalidExe; break :init r_debug.r_map; } }, elf.DT_PLTGOT => { - const ptr = @intToPtr(?[*]usize, _DYNAMIC[i].d_val); + const ptr = @ptrFromInt(?[*]usize, _DYNAMIC[i].d_val); if (ptr) |got_table| { // The address to the link_map structure is stored in // the second slot - break :init @intToPtr(?*LinkMap, got_table[1]); + break :init @ptrFromInt(?*LinkMap, got_table[1]); } }, else => {}, @@ -136,7 +136,7 @@ pub const ElfDynLib = struct { if (!mem.eql(u8, eh.e_ident[0..4], elf.MAGIC)) return error.NotElfFile; if (eh.e_type != elf.ET.DYN) return error.NotDynamicLibrary; - const elf_addr = @ptrToInt(file_bytes.ptr); + const elf_addr = @intFromPtr(file_bytes.ptr); // Iterate over the program header entries to find out the // dynamic vector as well as the total size of the virtual memory. @@ -149,10 +149,10 @@ pub const ElfDynLib = struct { i += 1; ph_addr += eh.e_phentsize; }) { - const ph = @intToPtr(*elf.Phdr, ph_addr); + const ph = @ptrFromInt(*elf.Phdr, ph_addr); switch (ph.p_type) { elf.PT_LOAD => virt_addr_end = @max(virt_addr_end, ph.p_vaddr + ph.p_memsz), - elf.PT_DYNAMIC => maybe_dynv = @intToPtr([*]usize, elf_addr + ph.p_offset), + elf.PT_DYNAMIC => maybe_dynv = @ptrFromInt([*]usize, elf_addr + ph.p_offset), else => {}, } } @@ -170,7 +170,7 @@ pub const ElfDynLib = struct { ); errdefer os.munmap(all_loaded_mem); - const base = @ptrToInt(all_loaded_mem.ptr); + const base = @intFromPtr(all_loaded_mem.ptr); // Now iterate again and actually load all the program sections. { @@ -180,7 +180,7 @@ pub const ElfDynLib = struct { i += 1; ph_addr += eh.e_phentsize; }) { - const ph = @intToPtr(*elf.Phdr, ph_addr); + const ph = @ptrFromInt(*elf.Phdr, ph_addr); switch (ph.p_type) { elf.PT_LOAD => { // The VirtAddr may not be page-aligned; in such case there will be @@ -188,7 +188,7 @@ pub const ElfDynLib = struct { const aligned_addr = (base + ph.p_vaddr) & ~(@as(usize, mem.page_size) - 1); const extra_bytes = (base + ph.p_vaddr) - aligned_addr; const extended_memsz = mem.alignForward(usize, ph.p_memsz + extra_bytes, mem.page_size); - const ptr = @intToPtr([*]align(mem.page_size) u8, aligned_addr); + const ptr = @ptrFromInt([*]align(mem.page_size) u8, aligned_addr); const prot = elfToMmapProt(ph.p_flags); if ((ph.p_flags & elf.PF_W) == 0) { // If it does not need write access, it can be mapped from the fd. @@ -228,11 +228,11 @@ pub const ElfDynLib = struct { while (dynv[i] != 0) : (i += 2) { const p = base + dynv[i + 1]; switch (dynv[i]) { - elf.DT_STRTAB => maybe_strings = @intToPtr([*:0]u8, p), - elf.DT_SYMTAB => maybe_syms = @intToPtr([*]elf.Sym, p), - elf.DT_HASH => maybe_hashtab = @intToPtr([*]os.Elf_Symndx, p), - elf.DT_VERSYM => maybe_versym = @intToPtr([*]u16, p), - elf.DT_VERDEF => maybe_verdef = @intToPtr(*elf.Verdef, p), + elf.DT_STRTAB => maybe_strings = @ptrFromInt([*:0]u8, p), + elf.DT_SYMTAB => maybe_syms = @ptrFromInt([*]elf.Sym, p), + elf.DT_HASH => maybe_hashtab = @ptrFromInt([*]os.Elf_Symndx, p), + elf.DT_VERSYM => maybe_versym = @ptrFromInt([*]u16, p), + elf.DT_VERDEF => maybe_verdef = @ptrFromInt(*elf.Verdef, p), else => {}, } } @@ -261,7 +261,7 @@ pub const ElfDynLib = struct { pub fn lookup(self: *ElfDynLib, comptime T: type, name: [:0]const u8) ?T { if (self.lookupAddress("", name)) |symbol| { - return @intToPtr(T, symbol); + return @ptrFromInt(T, symbol); } else { return null; } @@ -284,7 +284,7 @@ pub const ElfDynLib = struct { if (!checkver(self.verdef.?, versym[i], vername, self.strings)) continue; } - return @ptrToInt(self.memory.ptr) + self.syms[i].st_value; + return @intFromPtr(self.memory.ptr) + self.syms[i].st_value; } return null; @@ -307,9 +307,9 @@ fn checkver(def_arg: *elf.Verdef, vsym_arg: i32, vername: []const u8, strings: [ break; if (def.vd_next == 0) return false; - def = @intToPtr(*elf.Verdef, @ptrToInt(def) + def.vd_next); + def = @ptrFromInt(*elf.Verdef, @intFromPtr(def) + def.vd_next); } - const aux = @intToPtr(*elf.Verdaux, @ptrToInt(def) + def.vd_aux); + const aux = @ptrFromInt(*elf.Verdaux, @intFromPtr(def) + def.vd_aux); return mem.eql(u8, vername, mem.sliceTo(strings + aux.vda_name, 0)); } diff --git a/lib/std/elf.zig b/lib/std/elf.zig index 751f82a9ea..6047abc213 100644 --- a/lib/std/elf.zig +++ b/lib/std/elf.zig @@ -453,8 +453,8 @@ pub const Header = struct { }; const machine = if (need_bswap) blk: { - const value = @enumToInt(hdr32.e_machine); - break :blk @intToEnum(EM, @byteSwap(value)); + const value = @intFromEnum(hdr32.e_machine); + break :blk @enumFromInt(EM, @byteSwap(value)); } else hdr32.e_machine; return @as(Header, .{ diff --git a/lib/std/enums.zig b/lib/std/enums.zig index 757c616b9b..a5ceebc9b1 100644 --- a/lib/std/enums.zig +++ b/lib/std/enums.zig @@ -53,7 +53,7 @@ pub fn values(comptime E: type) []const E { /// Returns the tag name for `e` or null if no tag exists. pub fn tagName(comptime E: type, e: E) ?[]const u8 { return inline for (@typeInfo(E).Enum.fields) |f| { - if (@enumToInt(e) == f.value) break f.name; + if (@intFromEnum(e) == f.value) break f.name; } else null; } @@ -61,11 +61,11 @@ test tagName { const E = enum(u8) { a, b, _ }; try testing.expect(tagName(E, .a) != null); try testing.expectEqualStrings("a", tagName(E, .a).?); - try testing.expect(tagName(E, @intToEnum(E, 42)) == null); + try testing.expect(tagName(E, @enumFromInt(E, 42)) == null); } /// Determines the length of a direct-mapped enum array, indexed by -/// @intCast(usize, @enumToInt(enum_value)). +/// @intCast(usize, @intFromEnum(enum_value)). /// If the enum is non-exhaustive, the resulting length will only be enough /// to hold all explicit fields. /// If the enum contains any fields with values that cannot be represented @@ -100,7 +100,7 @@ pub fn directEnumArrayLen(comptime E: type, comptime max_unused_slots: comptime_ } /// Initializes an array of Data which can be indexed by -/// @intCast(usize, @enumToInt(enum_value)). +/// @intCast(usize, @intFromEnum(enum_value)). /// If the enum is non-exhaustive, the resulting array will only be large enough /// to hold all explicit fields. /// If the enum contains any fields with values that cannot be represented @@ -136,7 +136,7 @@ test "std.enums.directEnumArray" { } /// Initializes an array of Data which can be indexed by -/// @intCast(usize, @enumToInt(enum_value)). The enum must be exhaustive. +/// @intCast(usize, @intFromEnum(enum_value)). The enum must be exhaustive. /// If the enum contains any fields with values that cannot be represented /// by usize, a compile error is issued. The max_unused_slots parameter limits /// the total number of items which have no matching enum key (holes in the enum @@ -156,7 +156,7 @@ pub fn directEnumArrayDefault( var result: [len]Data = if (default) |d| [_]Data{d} ** len else undefined; inline for (@typeInfo(@TypeOf(init_values)).Struct.fields) |f| { const enum_value = @field(E, f.name); - const index = @intCast(usize, @enumToInt(enum_value)); + const index = @intCast(usize, @intFromEnum(enum_value)); result[index] = @field(init_values, f.name); } return result; @@ -341,7 +341,7 @@ pub fn BoundedEnumMultiset(comptime E: type, comptime CountSize: type) type { var self = initWithCount(0); inline for (@typeInfo(E).Enum.fields) |field| { const c = @field(init_counts, field.name); - const key = @intToEnum(E, field.value); + const key = @enumFromInt(E, field.value); self.counts.set(key, c); } return self; @@ -412,7 +412,7 @@ pub fn BoundedEnumMultiset(comptime E: type, comptime CountSize: type) type { /// asserts operation will not overflow any key. pub fn addSetAssertSafe(self: *Self, other: Self) void { inline for (@typeInfo(E).Enum.fields) |field| { - const key = @intToEnum(E, field.value); + const key = @enumFromInt(E, field.value); self.addAssertSafe(key, other.getCount(key)); } } @@ -420,7 +420,7 @@ pub fn BoundedEnumMultiset(comptime E: type, comptime CountSize: type) type { /// Increases the all key counts by given multiset. pub fn addSet(self: *Self, other: Self) error{Overflow}!void { inline for (@typeInfo(E).Enum.fields) |field| { - const key = @intToEnum(E, field.value); + const key = @enumFromInt(E, field.value); try self.add(key, other.getCount(key)); } } @@ -430,7 +430,7 @@ pub fn BoundedEnumMultiset(comptime E: type, comptime CountSize: type) type { /// then that key will have a key count of zero. pub fn removeSet(self: *Self, other: Self) void { inline for (@typeInfo(E).Enum.fields) |field| { - const key = @intToEnum(E, field.value); + const key = @enumFromInt(E, field.value); self.remove(key, other.getCount(key)); } } @@ -439,7 +439,7 @@ pub fn BoundedEnumMultiset(comptime E: type, comptime CountSize: type) type { /// given multiset. pub fn eql(self: Self, other: Self) bool { inline for (@typeInfo(E).Enum.fields) |field| { - const key = @intToEnum(E, field.value); + const key = @enumFromInt(E, field.value); if (self.getCount(key) != other.getCount(key)) { return false; } @@ -451,7 +451,7 @@ pub fn BoundedEnumMultiset(comptime E: type, comptime CountSize: type) type { /// equal to the given multiset. pub fn subsetOf(self: Self, other: Self) bool { inline for (@typeInfo(E).Enum.fields) |field| { - const key = @intToEnum(E, field.value); + const key = @enumFromInt(E, field.value); if (self.getCount(key) > other.getCount(key)) { return false; } @@ -463,7 +463,7 @@ pub fn BoundedEnumMultiset(comptime E: type, comptime CountSize: type) type { /// equal to the given multiset. pub fn supersetOf(self: Self, other: Self) bool { inline for (@typeInfo(E).Enum.fields) |field| { - const key = @intToEnum(E, field.value); + const key = @enumFromInt(E, field.value); if (self.getCount(key) < other.getCount(key)) { return false; } @@ -1323,14 +1323,14 @@ pub fn EnumIndexer(comptime E: type) type { pub const Key = E; pub const count = fields_len; pub fn indexOf(e: E) usize { - return @intCast(usize, @enumToInt(e) - min); + return @intCast(usize, @intFromEnum(e) - min); } pub fn keyForIndex(i: usize) E { // TODO fix addition semantics. This calculation // gives up some safety to avoid artificially limiting // the range of signed enum values to max_isize. const enum_value = if (min < 0) @bitCast(isize, i) +% min else i + min; - return @intToEnum(E, @intCast(std.meta.Tag(E), enum_value)); + return @enumFromInt(E, @intCast(std.meta.Tag(E), enum_value)); } }; } diff --git a/lib/std/event/channel.zig b/lib/std/event/channel.zig index e1c147d25a..3329694da7 100644 --- a/lib/std/event/channel.zig +++ b/lib/std/event/channel.zig @@ -247,7 +247,7 @@ pub fn Channel(comptime T: type) type { // All the "get or null" functions should resume now. var remove_count: usize = 0; while (self.or_null_queue.get()) |or_null_node| { - remove_count += @boolToInt(self.getters.remove(or_null_node.data)); + remove_count += @intFromBool(self.getters.remove(or_null_node.data)); global_event_loop.onNextTick(or_null_node.data.data.tick_node); } if (remove_count != 0) { diff --git a/lib/std/event/lock.zig b/lib/std/event/lock.zig index 9cda7f2aba..9da3943d5d 100644 --- a/lib/std/event/lock.zig +++ b/lib/std/event/lock.zig @@ -55,14 +55,14 @@ pub const Lock = struct { const head = switch (self.head) { UNLOCKED => unreachable, LOCKED => null, - else => @intToPtr(*Waiter, self.head), + else => @ptrFromInt(*Waiter, self.head), }; if (head) |h| { h.tail.next = &waiter; h.tail = &waiter; } else { - self.head = @ptrToInt(&waiter); + self.head = @intFromPtr(&waiter); } suspend { @@ -102,8 +102,8 @@ pub const Lock = struct { break :blk null; }, else => { - const waiter = @intToPtr(*Waiter, self.lock.head); - self.lock.head = if (waiter.next == null) LOCKED else @ptrToInt(waiter.next); + const waiter = @ptrFromInt(*Waiter, self.lock.head); + self.lock.head = if (waiter.next == null) LOCKED else @intFromPtr(waiter.next); if (waiter.next) |next| next.tail = waiter.tail; break :blk waiter; diff --git a/lib/std/event/loop.zig b/lib/std/event/loop.zig index bc0162423b..7eec26a2b1 100644 --- a/lib/std/event/loop.zig +++ b/lib/std/event/loop.zig @@ -244,7 +244,7 @@ pub const Loop = struct { self.os_data.final_eventfd_event = os.linux.epoll_event{ .events = os.linux.EPOLL.IN, - .data = os.linux.epoll_data{ .ptr = @ptrToInt(&self.final_resume_node) }, + .data = os.linux.epoll_data{ .ptr = @intFromPtr(&self.final_resume_node) }, }; try os.epoll_ctl( self.os_data.epollfd, @@ -293,7 +293,7 @@ pub const Loop = struct { .flags = os.system.EV_CLEAR | os.system.EV_ADD | os.system.EV_DISABLE, .fflags = 0, .data = 0, - .udata = @ptrToInt(&eventfd_node.data.base), + .udata = @intFromPtr(&eventfd_node.data.base), }, }, .next = undefined, @@ -313,7 +313,7 @@ pub const Loop = struct { .flags = os.system.EV_ADD | os.system.EV_DISABLE, .fflags = 0, .data = 0, - .udata = @ptrToInt(&self.final_resume_node), + .udata = @intFromPtr(&self.final_resume_node), }; const final_kev_arr = @as(*const [1]os.Kevent, &self.os_data.final_kevent); _ = try os.kevent(self.os_data.kqfd, final_kev_arr, empty_kevs, null); @@ -358,7 +358,7 @@ pub const Loop = struct { .flags = os.system.EV_CLEAR | os.system.EV_ADD | os.system.EV_DISABLE | os.system.EV_ONESHOT, .fflags = 0, .data = 0, - .udata = @ptrToInt(&eventfd_node.data.base), + .udata = @intFromPtr(&eventfd_node.data.base), }, }, .next = undefined, @@ -377,7 +377,7 @@ pub const Loop = struct { .flags = os.system.EV_ADD | os.system.EV_ONESHOT | os.system.EV_DISABLE, .fflags = 0, .data = 0, - .udata = @ptrToInt(&self.final_resume_node), + .udata = @intFromPtr(&self.final_resume_node), }; const final_kev_arr = @as(*const [1]os.Kevent, &self.os_data.final_kevent); _ = try os.kevent(self.os_data.kqfd, final_kev_arr, empty_kevs, null); @@ -418,7 +418,7 @@ pub const Loop = struct { .overlapped = ResumeNode.overlapped_init, }, // this one is for sending events - .completion_key = @ptrToInt(&eventfd_node.data.base), + .completion_key = @intFromPtr(&eventfd_node.data.base), }, .next = undefined, }; @@ -488,7 +488,7 @@ pub const Loop = struct { assert(flags & os.linux.EPOLL.ET == os.linux.EPOLL.ET); var ev = os.linux.epoll_event{ .events = flags, - .data = os.linux.epoll_data{ .ptr = @ptrToInt(resume_node) }, + .data = os.linux.epoll_data{ .ptr = @intFromPtr(resume_node) }, }; try os.epoll_ctl(self.os_data.epollfd, op, fd, &ev); } @@ -619,7 +619,7 @@ pub const Loop = struct { .flags = os.system.EV_ADD | os.system.EV_ENABLE | os.system.EV_CLEAR | flags, .fflags = 0, .data = 0, - .udata = @ptrToInt(&resume_node.base), + .udata = @intFromPtr(&resume_node.base), }}; const empty_kevs = &[0]os.Kevent{}; _ = try os.kevent(self.os_data.kqfd, &kev, empty_kevs, null); @@ -1415,7 +1415,7 @@ pub const Loop = struct { var events: [1]os.linux.epoll_event = undefined; const count = os.epoll_wait(self.os_data.epollfd, events[0..], -1); for (events[0..count]) |ev| { - const resume_node = @intToPtr(*ResumeNode, ev.data.ptr); + const resume_node = @ptrFromInt(*ResumeNode, ev.data.ptr); const handle = resume_node.handle; const resume_node_id = resume_node.id; switch (resume_node_id) { @@ -1439,7 +1439,7 @@ pub const Loop = struct { const empty_kevs = &[0]os.Kevent{}; const count = os.kevent(self.os_data.kqfd, empty_kevs, eventlist[0..], null) catch unreachable; for (eventlist[0..count]) |ev| { - const resume_node = @intToPtr(*ResumeNode, ev.udata); + const resume_node = @ptrFromInt(*ResumeNode, ev.udata); const handle = resume_node.handle; const resume_node_id = resume_node.id; switch (resume_node_id) { diff --git a/lib/std/fmt.zig b/lib/std/fmt.zig index c9d8e611ca..b3b381faee 100644 --- a/lib/std/fmt.zig +++ b/lib/std/fmt.zig @@ -409,15 +409,15 @@ pub fn formatAddress(value: anytype, options: FormatOptions, writer: anytype) @T .Pointer => |info| { try writer.writeAll(@typeName(info.child) ++ "@"); if (info.size == .Slice) - try formatInt(@ptrToInt(value.ptr), 16, .lower, FormatOptions{}, writer) + try formatInt(@intFromPtr(value.ptr), 16, .lower, FormatOptions{}, writer) else - try formatInt(@ptrToInt(value), 16, .lower, FormatOptions{}, writer); + try formatInt(@intFromPtr(value), 16, .lower, FormatOptions{}, writer); return; }, .Optional => |info| { if (@typeInfo(info.child) == .Pointer) { try writer.writeAll(@typeName(info.child) ++ "@"); - try formatInt(@ptrToInt(value), 16, .lower, FormatOptions{}, writer); + try formatInt(@intFromPtr(value), 16, .lower, FormatOptions{}, writer); return; } }, @@ -531,7 +531,7 @@ pub fn formatType( // Use @tagName only if value is one of known fields @setEvalBranchQuota(3 * enumInfo.fields.len); inline for (enumInfo.fields) |enumField| { - if (@enumToInt(value) == enumField.value) { + if (@intFromEnum(value) == enumField.value) { try writer.writeAll("."); try writer.writeAll(@tagName(value)); return; @@ -539,7 +539,7 @@ pub fn formatType( } try writer.writeAll("("); - try formatType(@enumToInt(value), actual_fmt, options, writer, max_depth); + try formatType(@intFromEnum(value), actual_fmt, options, writer, max_depth); try writer.writeAll(")"); }, .Union => |info| { @@ -559,7 +559,7 @@ pub fn formatType( } try writer.writeAll(" }"); } else { - try format(writer, "@{x}", .{@ptrToInt(&value)}); + try format(writer, "@{x}", .{@intFromPtr(&value)}); } }, .Struct => |info| { @@ -624,7 +624,7 @@ pub fn formatType( .Enum, .Union, .Struct => { return formatType(value.*, actual_fmt, options, writer, max_depth); }, - else => return format(writer, "{s}@{x}", .{ @typeName(ptr_info.child), @ptrToInt(value) }), + else => return format(writer, "{s}@{x}", .{ @typeName(ptr_info.child), @intFromPtr(value) }), }, .Many, .C => { if (actual_fmt.len == 0) @@ -1213,7 +1213,7 @@ pub fn formatFloatHexadecimal( extra_bits -= 1; } // Round to nearest, tie to even. - mantissa |= @boolToInt(mantissa & 0b100 != 0); + mantissa |= @intFromBool(mantissa & 0b100 != 0); mantissa += 1; // Drop the excess bits. mantissa >>= 2; @@ -2099,7 +2099,7 @@ test "optional" { try expectFmt("optional: null\n", "optional: {?}\n", .{value}); } { - const value = @intToPtr(?*i32, 0xf000d000); + const value = @ptrFromInt(?*i32, 0xf000d000); try expectFmt("optional: *i32@f000d000\n", "optional: {*}\n", .{value}); } } @@ -2204,7 +2204,7 @@ test "array" { var buf: [100]u8 = undefined; try expectFmt( - try bufPrint(buf[0..], "array: [3]u8@{x}\n", .{@ptrToInt(&value)}), + try bufPrint(buf[0..], "array: [3]u8@{x}\n", .{@intFromPtr(&value)}), "array: {*}\n", .{&value}, ); @@ -2218,7 +2218,7 @@ test "slice" { } { var runtime_zero: usize = 0; - const value = @intToPtr([*]align(1) const []const u8, 0xdeadbeef)[runtime_zero..runtime_zero]; + const value = @ptrFromInt([*]align(1) const []const u8, 0xdeadbeef)[runtime_zero..runtime_zero]; try expectFmt("slice: []const u8@deadbeef\n", "slice: {*}\n", .{value}); } { @@ -2248,17 +2248,17 @@ test "escape non-printable" { test "pointer" { { - const value = @intToPtr(*align(1) i32, 0xdeadbeef); + const value = @ptrFromInt(*align(1) i32, 0xdeadbeef); try expectFmt("pointer: i32@deadbeef\n", "pointer: {}\n", .{value}); try expectFmt("pointer: i32@deadbeef\n", "pointer: {*}\n", .{value}); } const FnPtr = *align(1) const fn () void; { - const value = @intToPtr(FnPtr, 0xdeadbeef); + const value = @ptrFromInt(FnPtr, 0xdeadbeef); try expectFmt("pointer: fn() void@deadbeef\n", "pointer: {}\n", .{value}); } { - const value = @intToPtr(FnPtr, 0xdeadbeef); + const value = @ptrFromInt(FnPtr, 0xdeadbeef); try expectFmt("pointer: fn() void@deadbeef\n", "pointer: {}\n", .{value}); } } @@ -2360,11 +2360,11 @@ test "non-exhaustive enum" { }; try expectFmt("enum: fmt.test.non-exhaustive enum.Enum.One\n", "enum: {}\n", .{Enum.One}); try expectFmt("enum: fmt.test.non-exhaustive enum.Enum.Two\n", "enum: {}\n", .{Enum.Two}); - try expectFmt("enum: fmt.test.non-exhaustive enum.Enum(4660)\n", "enum: {}\n", .{@intToEnum(Enum, 0x1234)}); + try expectFmt("enum: fmt.test.non-exhaustive enum.Enum(4660)\n", "enum: {}\n", .{@enumFromInt(Enum, 0x1234)}); try expectFmt("enum: fmt.test.non-exhaustive enum.Enum.One\n", "enum: {x}\n", .{Enum.One}); try expectFmt("enum: fmt.test.non-exhaustive enum.Enum.Two\n", "enum: {x}\n", .{Enum.Two}); try expectFmt("enum: fmt.test.non-exhaustive enum.Enum.Two\n", "enum: {X}\n", .{Enum.Two}); - try expectFmt("enum: fmt.test.non-exhaustive enum.Enum(1234)\n", "enum: {x}\n", .{@intToEnum(Enum, 0x1234)}); + try expectFmt("enum: fmt.test.non-exhaustive enum.Enum(1234)\n", "enum: {x}\n", .{@enumFromInt(Enum, 0x1234)}); } test "float.scientific" { diff --git a/lib/std/fmt/errol.zig b/lib/std/fmt/errol.zig index 9ad5d218a9..b438733589 100644 --- a/lib/std/fmt/errol.zig +++ b/lib/std/fmt/errol.zig @@ -59,7 +59,7 @@ pub fn roundToPrecision(float_decimal: *FloatDecimal, precision: usize, mode: Ro float_decimal.exp += 1; // Re-size the buffer to use the reserved leading byte. - const one_before = @intToPtr([*]u8, @ptrToInt(&float_decimal.digits[0]) - 1); + const one_before = @ptrFromInt([*]u8, @intFromPtr(&float_decimal.digits[0]) - 1); float_decimal.digits = one_before[0 .. float_decimal.digits.len + 1]; float_decimal.digits[0] = '1'; return; @@ -113,7 +113,7 @@ fn errolSlow(val: f64, buffer: []u8) FloatDecimal { // normalize the midpoint const e = math.frexp(val).exponent; - var exp = @floatToInt(i16, @floor(307 + @intToFloat(f64, e) * 0.30103)); + var exp = @intFromFloat(i16, @floor(307 + @floatFromInt(f64, e) * 0.30103)); if (exp < 20) { exp = 20; } else if (@intCast(usize, exp) >= lookup_table.len) { @@ -171,25 +171,25 @@ fn errolSlow(val: f64, buffer: []u8) FloatDecimal { var buf_index: usize = 0; const bound = buffer.len - 1; while (buf_index < bound) { - var hdig = @floatToInt(u8, @floor(high.val)); - if ((high.val == @intToFloat(f64, hdig)) and (high.off < 0)) hdig -= 1; + var hdig = @intFromFloat(u8, @floor(high.val)); + if ((high.val == @floatFromInt(f64, hdig)) and (high.off < 0)) hdig -= 1; - var ldig = @floatToInt(u8, @floor(low.val)); - if ((low.val == @intToFloat(f64, ldig)) and (low.off < 0)) ldig -= 1; + var ldig = @intFromFloat(u8, @floor(low.val)); + if ((low.val == @floatFromInt(f64, ldig)) and (low.off < 0)) ldig -= 1; if (ldig != hdig) break; buffer[buf_index] = hdig + '0'; buf_index += 1; - high.val -= @intToFloat(f64, hdig); - low.val -= @intToFloat(f64, ldig); + high.val -= @floatFromInt(f64, hdig); + low.val -= @floatFromInt(f64, ldig); hpMul10(&high); hpMul10(&low); } const tmp = (high.val + low.val) / 2.0; - var mdig = @floatToInt(u8, @floor(tmp + 0.5)); - if ((@intToFloat(f64, mdig) - tmp) == 0.5 and (mdig & 0x1) != 0) mdig -= 1; + var mdig = @intFromFloat(u8, @floor(tmp + 0.5)); + if ((@floatFromInt(f64, mdig) - tmp) == 0.5 and (mdig & 0x1) != 0) mdig -= 1; buffer[buf_index] = mdig + '0'; buf_index += 1; @@ -303,7 +303,7 @@ fn errolInt(val: f64, buffer: []u8) FloatDecimal { assert((val > 9.007199254740992e15) and val < (3.40282366920938e38)); - var mid = @floatToInt(u128, val); + var mid = @intFromFloat(u128, val); var low: u128 = mid - fpeint((fpnext(val) - val) / 2.0); var high: u128 = mid + fpeint((val - fpprev(val)) / 2.0); @@ -328,7 +328,7 @@ fn errolInt(val: f64, buffer: []u8) FloatDecimal { var mi: i32 = mismatch10(l64, h64); var x: u64 = 1; { - var i: i32 = @boolToInt(lf == hf); + var i: i32 = @intFromBool(lf == hf); while (i < mi) : (i += 1) { x *= 10; } @@ -342,7 +342,7 @@ fn errolInt(val: f64, buffer: []u8) FloatDecimal { if (mi != 0) { const round_up = buffer[buf_index] >= '5'; if (buf_index == 0 or (round_up and buffer[buf_index - 1] == '9')) return errolSlow(val, buffer); - buffer[buf_index - 1] += @boolToInt(round_up); + buffer[buf_index - 1] += @intFromBool(round_up); } else { buf_index += 1; } @@ -360,8 +360,8 @@ fn errolInt(val: f64, buffer: []u8) FloatDecimal { fn errolFixed(val: f64, buffer: []u8) FloatDecimal { assert((val >= 16.0) and (val < 9.007199254740992e15)); - const u = @floatToInt(u64, val); - const n = @intToFloat(f64, u); + const u = @intFromFloat(u64, val); + const n = @floatFromInt(f64, u); var mid = val - n; var lo = ((fpprev(val) - n) + mid) / 2.0; @@ -375,16 +375,16 @@ fn errolFixed(val: f64, buffer: []u8) FloatDecimal { if (mid != 0.0) { while (mid != 0.0) { lo *= 10.0; - const ldig = @floatToInt(i32, lo); - lo -= @intToFloat(f64, ldig); + const ldig = @intFromFloat(i32, lo); + lo -= @floatFromInt(f64, ldig); mid *= 10.0; - const mdig = @floatToInt(i32, mid); - mid -= @intToFloat(f64, mdig); + const mdig = @intFromFloat(i32, mid); + mid -= @floatFromInt(f64, mdig); hi *= 10.0; - const hdig = @floatToInt(i32, hi); - hi -= @intToFloat(f64, hdig); + const hdig = @intFromFloat(i32, hi); + hi -= @floatFromInt(f64, hdig); buffer[j] = @intCast(u8, mdig + '0'); j += 1; diff --git a/lib/std/fmt/parse_float/convert_eisel_lemire.zig b/lib/std/fmt/parse_float/convert_eisel_lemire.zig index ff71695303..5c49553a14 100644 --- a/lib/std/fmt/parse_float/convert_eisel_lemire.zig +++ b/lib/std/fmt/parse_float/convert_eisel_lemire.zig @@ -74,7 +74,7 @@ pub fn convertEiselLemire(comptime T: type, q: i64, w_: u64) ?BiasedFp(f64) { mantissa = math.shr(u64, mantissa, -power2 + 1); mantissa += mantissa & 1; mantissa >>= 1; - power2 = @boolToInt(mantissa >= (1 << float_info.mantissa_explicit_bits)); + power2 = @intFromBool(mantissa >= (1 << float_info.mantissa_explicit_bits)); return BiasedFp(f64){ .f = mantissa, .e = power2 }; } diff --git a/lib/std/fmt/parse_float/convert_fast.zig b/lib/std/fmt/parse_float/convert_fast.zig index 74beb745de..2124e436ab 100644 --- a/lib/std/fmt/parse_float/convert_fast.zig +++ b/lib/std/fmt/parse_float/convert_fast.zig @@ -108,7 +108,7 @@ pub fn convertFast(comptime T: type, n: Number(T)) ?T { var value: T = 0; if (n.exponent <= info.max_exponent_fast_path) { // normal fast path - value = @intToFloat(T, n.mantissa); + value = @floatFromInt(T, n.mantissa); value = if (n.exponent < 0) value / fastPow10(T, @intCast(usize, -n.exponent)) else @@ -120,7 +120,7 @@ pub fn convertFast(comptime T: type, n: Number(T)) ?T { if (mantissa > info.max_mantissa_fast_path) { return null; } - value = @intToFloat(T, mantissa) * fastPow10(T, info.max_exponent_fast_path); + value = @floatFromInt(T, mantissa) * fastPow10(T, info.max_exponent_fast_path); } if (n.negative) { diff --git a/lib/std/fs.zig b/lib/std/fs.zig index bb0890be4b..8e828fd334 100644 --- a/lib/std/fs.zig +++ b/lib/std/fs.zig @@ -1268,8 +1268,8 @@ pub const Dir = struct { &range_off, &range_len, null, - @boolToInt(flags.lock_nonblocking), - @boolToInt(exclusive), + @intFromBool(flags.lock_nonblocking), + @intFromBool(exclusive), ); return file; } @@ -1429,8 +1429,8 @@ pub const Dir = struct { &range_off, &range_len, null, - @boolToInt(flags.lock_nonblocking), - @boolToInt(exclusive), + @intFromBool(flags.lock_nonblocking), + @intFromBool(exclusive), ); return file; } diff --git a/lib/std/fs/file.zig b/lib/std/fs/file.zig index 7b954399d8..0c6e8a24f7 100644 --- a/lib/std/fs/file.zig +++ b/lib/std/fs/file.zig @@ -516,7 +516,7 @@ pub const File = struct { /// Returns `true` if the chosen class has the selected permission. /// This method is only available on Unix platforms. pub fn unixHas(self: Self, class: Class, permission: Permission) bool { - const mask = @as(Mode, @enumToInt(permission)) << @as(u3, @enumToInt(class)) * 3; + const mask = @as(Mode, @intFromEnum(permission)) << @as(u3, @intFromEnum(class)) * 3; return self.mode & mask != 0; } @@ -527,7 +527,7 @@ pub const File = struct { write: ?bool = null, execute: ?bool = null, }) void { - const shift = @as(u3, @enumToInt(class)) * 3; + const shift = @as(u3, @intFromEnum(class)) * 3; if (permissions.read) |r| { if (r) { self.mode |= @as(Mode, 0o4) << shift; @@ -973,7 +973,7 @@ pub const File = struct { // The file size returned by stat is used as hint to set the buffer // size. If the reported size is zero, as it happens on Linux for files // in /proc, a small buffer is allocated instead. - const initial_cap = (if (size > 0) size else 1024) + @boolToInt(optional_sentinel != null); + const initial_cap = (if (size > 0) size else 1024) + @intFromBool(optional_sentinel != null); var array_list = try std.ArrayListAligned(u8, alignment).initCapacity(allocator, initial_cap); defer array_list.deinit(); @@ -1488,7 +1488,7 @@ pub const File = struct { &range_len, null, windows.FALSE, // non-blocking=false - @boolToInt(exclusive), + @intFromBool(exclusive), ) catch |err| switch (err) { error.WouldBlock => unreachable, // non-blocking=false else => |e| return e, @@ -1555,7 +1555,7 @@ pub const File = struct { &range_len, null, windows.TRUE, // non-blocking=true - @boolToInt(exclusive), + @intFromBool(exclusive), ) catch |err| switch (err) { error.WouldBlock => return false, else => |e| return e, diff --git a/lib/std/fs/path.zig b/lib/std/fs/path.zig index e7a28a7615..012d99f59a 100644 --- a/lib/std/fs/path.zig +++ b/lib/std/fs/path.zig @@ -67,7 +67,7 @@ fn joinSepMaybeZ(allocator: Allocator, separator: u8, comptime sepPredicate: fn if (this_path.len == 0) continue; const prev_sep = sepPredicate(prev_path[prev_path.len - 1]); const this_sep = sepPredicate(this_path[0]); - sum += @boolToInt(!prev_sep and !this_sep); + sum += @intFromBool(!prev_sep and !this_sep); sum += if (prev_sep and this_sep) this_path.len - 1 else this_path.len; prev_path = this_path; } @@ -663,7 +663,7 @@ pub fn resolvePosix(allocator: Allocator, paths: []const []const u8) Allocator.E continue; } else if (mem.eql(u8, component, "..")) { if (result.items.len == 0) { - negative_count += @boolToInt(!is_abs); + negative_count += @intFromBool(!is_abs); continue; } while (true) { @@ -1092,7 +1092,7 @@ pub fn relativeWindows(allocator: Allocator, from: []const u8, to: []const u8) ! while (from_it.next()) |_| { up_index_end += "\\..".len; } - const result = try allocator.alloc(u8, up_index_end + @boolToInt(to_rest.len > 0) + to_rest.len); + const result = try allocator.alloc(u8, up_index_end + @intFromBool(to_rest.len > 0) + to_rest.len); errdefer allocator.free(result); result[0..2].* = "..".*; diff --git a/lib/std/fs/watch.zig b/lib/std/fs/watch.zig index 469244fcd6..0deaa86468 100644 --- a/lib/std/fs/watch.zig +++ b/lib/std/fs/watch.zig @@ -285,7 +285,7 @@ pub fn Watch(comptime V: type) type { os.NOTE_WRITE | os.NOTE_DELETE | os.NOTE_REVOKE, .fflags = 0, .data = 0, - .udata = @ptrToInt(&resume_node.base), + .udata = @intFromPtr(&resume_node.base), }; suspend { global_event_loop.beginOneEvent(); @@ -486,7 +486,7 @@ pub fn Watch(comptime V: type) type { } else { var ptr: [*]u8 = &event_buf; const end_ptr = ptr + bytes_transferred; - while (@ptrToInt(ptr) < @ptrToInt(end_ptr)) { + while (@intFromPtr(ptr) < @intFromPtr(end_ptr)) { const ev = @ptrCast(*const windows.FILE_NOTIFY_INFORMATION, ptr); const emit = switch (ev.Action) { windows.FILE_ACTION_REMOVED => WatchEventId.Delete, @@ -585,7 +585,7 @@ pub fn Watch(comptime V: type) type { var ptr: [*]u8 = &event_buf; const end_ptr = ptr + bytes_read; - while (@ptrToInt(ptr) < @ptrToInt(end_ptr)) { + while (@intFromPtr(ptr) < @intFromPtr(end_ptr)) { const ev = @ptrCast(*const os.linux.inotify_event, ptr); if (ev.mask & os.linux.IN_CLOSE_WRITE == os.linux.IN_CLOSE_WRITE) { const basename_ptr = ptr + @sizeOf(os.linux.inotify_event); diff --git a/lib/std/hash/auto_hash.zig b/lib/std/hash/auto_hash.zig index d7b26ce2ad..f33bd635fc 100644 --- a/lib/std/hash/auto_hash.zig +++ b/lib/std/hash/auto_hash.zig @@ -25,7 +25,7 @@ pub fn hashPointer(hasher: anytype, key: anytype, comptime strat: HashStrategy) switch (info.Pointer.size) { .One => switch (strat) { - .Shallow => hash(hasher, @ptrToInt(key), .Shallow), + .Shallow => hash(hasher, @intFromPtr(key), .Shallow), .Deep => hash(hasher, key.*, .Shallow), .DeepRecursive => hash(hasher, key.*, .DeepRecursive), }, @@ -44,7 +44,7 @@ pub fn hashPointer(hasher: anytype, key: anytype, comptime strat: HashStrategy) .Many, .C, => switch (strat) { - .Shallow => hash(hasher, @ptrToInt(key), .Shallow), + .Shallow => hash(hasher, @intFromPtr(key), .Shallow), else => @compileError( \\ unknown-length pointers and C pointers cannot be hashed deeply. \\ Consider providing your own hash function. @@ -108,10 +108,10 @@ pub fn hash(hasher: anytype, key: anytype, comptime strat: HashStrategy) void { }, }, - .Bool => hash(hasher, @boolToInt(key), strat), - .Enum => hash(hasher, @enumToInt(key), strat), - .ErrorSet => hash(hasher, @errorToInt(key), strat), - .AnyFrame, .Fn => hash(hasher, @ptrToInt(key), strat), + .Bool => hash(hasher, @intFromBool(key), strat), + .Enum => hash(hasher, @intFromEnum(key), strat), + .ErrorSet => hash(hasher, @intFromError(key), strat), + .AnyFrame, .Fn => hash(hasher, @intFromPtr(key), strat), .Pointer => @call(.always_inline, hashPointer, .{ hasher, key, strat }), diff --git a/lib/std/hash/benchmark.zig b/lib/std/hash/benchmark.zig index cf2f18d22f..62df89f0ae 100644 --- a/lib/std/hash/benchmark.zig +++ b/lib/std/hash/benchmark.zig @@ -127,8 +127,8 @@ pub fn benchmarkHash(comptime H: anytype, bytes: usize, allocator: std.mem.Alloc const end = timer.read(); - const elapsed_s = @intToFloat(f64, end - start) / time.ns_per_s; - const throughput = @floatToInt(u64, @intToFloat(f64, bytes) / elapsed_s); + const elapsed_s = @floatFromInt(f64, end - start) / time.ns_per_s; + const throughput = @intFromFloat(u64, @floatFromInt(f64, bytes) / elapsed_s); return Result{ .hash = final, @@ -166,8 +166,8 @@ pub fn benchmarkHashSmallKeys(comptime H: anytype, key_size: usize, bytes: usize } const end = timer.read(); - const elapsed_s = @intToFloat(f64, end - start) / time.ns_per_s; - const throughput = @floatToInt(u64, @intToFloat(f64, bytes) / elapsed_s); + const elapsed_s = @floatFromInt(f64, end - start) / time.ns_per_s; + const throughput = @intFromFloat(u64, @floatFromInt(f64, bytes) / elapsed_s); std.mem.doNotOptimizeAway(sum); diff --git a/lib/std/hash/crc.zig b/lib/std/hash/crc.zig index 0ad154abef..da250af1bf 100644 --- a/lib/std/hash/crc.zig +++ b/lib/std/hash/crc.zig @@ -129,7 +129,7 @@ pub fn Crc32WithPoly(comptime poly: Polynomial) type { var j: usize = 0; while (j < 8) : (j += 1) { if (crc & 1 == 1) { - crc = (crc >> 1) ^ @enumToInt(poly); + crc = (crc >> 1) ^ @intFromEnum(poly); } else { crc = (crc >> 1); } @@ -222,7 +222,7 @@ pub fn Crc32SmallWithPoly(comptime poly: Polynomial) type { var j: usize = 0; while (j < 8) : (j += 1) { if (crc & 1 == 1) { - crc = (crc >> 1) ^ @enumToInt(poly); + crc = (crc >> 1) ^ @intFromEnum(poly); } else { crc = (crc >> 1); } diff --git a/lib/std/hash_map.zig b/lib/std/hash_map.zig index 8c05dfeca5..4f1639cd60 100644 --- a/lib/std/hash_map.zig +++ b/lib/std/hash_map.zig @@ -1442,7 +1442,7 @@ pub fn HashMapUnmanaged( // map, which is assumed to exist as keyPtr must be valid. This // item must be at index 0. const idx = if (@sizeOf(K) > 0) - (@ptrToInt(keyPtr) - @ptrToInt(self.keys())) / @sizeOf(K) + (@intFromPtr(keyPtr) - @intFromPtr(self.keys())) / @sizeOf(K) else 0; @@ -1554,19 +1554,19 @@ pub fn HashMapUnmanaged( const total_size = std.mem.alignForward(usize, vals_end, max_align); const slice = try allocator.alignedAlloc(u8, max_align, total_size); - const ptr = @ptrToInt(slice.ptr); + const ptr = @intFromPtr(slice.ptr); const metadata = ptr + @sizeOf(Header); - const hdr = @intToPtr(*Header, ptr); + const hdr = @ptrFromInt(*Header, ptr); if (@sizeOf([*]V) != 0) { - hdr.values = @intToPtr([*]V, ptr + vals_start); + hdr.values = @ptrFromInt([*]V, ptr + vals_start); } if (@sizeOf([*]K) != 0) { - hdr.keys = @intToPtr([*]K, ptr + keys_start); + hdr.keys = @ptrFromInt([*]K, ptr + keys_start); } hdr.capacity = new_capacity; - self.metadata = @intToPtr([*]Metadata, metadata); + self.metadata = @ptrFromInt([*]Metadata, metadata); } fn deallocate(self: *Self, allocator: Allocator) void { @@ -1589,7 +1589,7 @@ pub fn HashMapUnmanaged( const total_size = std.mem.alignForward(usize, vals_end, max_align); - const slice = @intToPtr([*]align(max_align) u8, @ptrToInt(self.header()))[0..total_size]; + const slice = @ptrFromInt([*]align(max_align) u8, @intFromPtr(self.header()))[0..total_size]; allocator.free(slice); self.metadata = null; diff --git a/lib/std/heap.zig b/lib/std/heap.zig index 7b4bf3af21..fd5b0754fe 100644 --- a/lib/std/heap.zig +++ b/lib/std/heap.zig @@ -61,7 +61,7 @@ const CAllocator = struct { pub const supports_posix_memalign = @hasDecl(c, "posix_memalign"); fn getHeader(ptr: [*]u8) *[*]u8 { - return @intToPtr(*[*]u8, @ptrToInt(ptr) - @sizeOf(usize)); + return @ptrFromInt(*[*]u8, @intFromPtr(ptr) - @sizeOf(usize)); } fn alignedAlloc(len: usize, log2_align: u8) ?[*]u8 { @@ -82,7 +82,7 @@ const CAllocator = struct { // alignment padding and store the original malloc()'ed pointer before // the aligned address. var unaligned_ptr = @ptrCast([*]u8, c.malloc(len + alignment - 1 + @sizeOf(usize)) orelse return null); - const unaligned_addr = @ptrToInt(unaligned_ptr); + const unaligned_addr = @intFromPtr(unaligned_ptr); const aligned_addr = mem.alignForward(usize, unaligned_addr + @sizeOf(usize), alignment); var aligned_ptr = unaligned_ptr + (aligned_addr - unaligned_addr); getHeader(aligned_ptr).* = unaligned_ptr; @@ -105,7 +105,7 @@ const CAllocator = struct { } const unaligned_ptr = getHeader(ptr).*; - const delta = @ptrToInt(ptr) - @ptrToInt(unaligned_ptr); + const delta = @intFromPtr(ptr) - @intFromPtr(unaligned_ptr); return CAllocator.malloc_size(unaligned_ptr) - delta; } @@ -283,7 +283,7 @@ pub const HeapAllocator = switch (builtin.os.tag) { } fn getRecordPtr(buf: []u8) *align(1) usize { - return @intToPtr(*align(1) usize, @ptrToInt(buf.ptr) + buf.len); + return @ptrFromInt(*align(1) usize, @intFromPtr(buf.ptr) + buf.len); } fn alloc( @@ -306,9 +306,9 @@ pub const HeapAllocator = switch (builtin.os.tag) { break :blk other_hh.?; // can't be null because of the cmpxchg }; const ptr = os.windows.kernel32.HeapAlloc(heap_handle, 0, amt) orelse return null; - const root_addr = @ptrToInt(ptr); + const root_addr = @intFromPtr(ptr); const aligned_addr = mem.alignForward(usize, root_addr, ptr_align); - const buf = @intToPtr([*]u8, aligned_addr)[0..n]; + const buf = @ptrFromInt([*]u8, aligned_addr)[0..n]; getRecordPtr(buf).* = root_addr; return buf.ptr; } @@ -325,15 +325,15 @@ pub const HeapAllocator = switch (builtin.os.tag) { const self = @ptrCast(*HeapAllocator, @alignCast(@alignOf(HeapAllocator), ctx)); const root_addr = getRecordPtr(buf).*; - const align_offset = @ptrToInt(buf.ptr) - root_addr; + const align_offset = @intFromPtr(buf.ptr) - root_addr; const amt = align_offset + new_size + @sizeOf(usize); const new_ptr = os.windows.kernel32.HeapReAlloc( self.heap_handle.?, os.windows.HEAP_REALLOC_IN_PLACE_ONLY, - @intToPtr(*anyopaque, root_addr), + @ptrFromInt(*anyopaque, root_addr), amt, ) orelse return false; - assert(new_ptr == @intToPtr(*anyopaque, root_addr)); + assert(new_ptr == @ptrFromInt(*anyopaque, root_addr)); getRecordPtr(buf.ptr[0..new_size]).* = root_addr; return true; } @@ -347,20 +347,20 @@ pub const HeapAllocator = switch (builtin.os.tag) { _ = log2_buf_align; _ = return_address; const self = @ptrCast(*HeapAllocator, @alignCast(@alignOf(HeapAllocator), ctx)); - os.windows.HeapFree(self.heap_handle.?, 0, @intToPtr(*anyopaque, getRecordPtr(buf).*)); + os.windows.HeapFree(self.heap_handle.?, 0, @ptrFromInt(*anyopaque, getRecordPtr(buf).*)); } }, else => @compileError("Unsupported OS"), }; fn sliceContainsPtr(container: []u8, ptr: [*]u8) bool { - return @ptrToInt(ptr) >= @ptrToInt(container.ptr) and - @ptrToInt(ptr) < (@ptrToInt(container.ptr) + container.len); + return @intFromPtr(ptr) >= @intFromPtr(container.ptr) and + @intFromPtr(ptr) < (@intFromPtr(container.ptr) + container.len); } fn sliceContainsSlice(container: []u8, slice: []u8) bool { - return @ptrToInt(slice.ptr) >= @ptrToInt(container.ptr) and - (@ptrToInt(slice.ptr) + slice.len) <= (@ptrToInt(container.ptr) + container.len); + return @intFromPtr(slice.ptr) >= @intFromPtr(container.ptr) and + (@intFromPtr(slice.ptr) + slice.len) <= (@intFromPtr(container.ptr) + container.len); } pub const FixedBufferAllocator = struct { @@ -804,21 +804,21 @@ pub fn testAllocatorLargeAlignment(base_allocator: mem.Allocator) !void { align_mask = @shlWithOverflow(~@as(usize, 0), @as(Allocator.Log2Align, @ctz(large_align)))[0]; var slice = try allocator.alignedAlloc(u8, large_align, 500); - try testing.expect(@ptrToInt(slice.ptr) & align_mask == @ptrToInt(slice.ptr)); + try testing.expect(@intFromPtr(slice.ptr) & align_mask == @intFromPtr(slice.ptr)); if (allocator.resize(slice, 100)) { slice = slice[0..100]; } slice = try allocator.realloc(slice, 5000); - try testing.expect(@ptrToInt(slice.ptr) & align_mask == @ptrToInt(slice.ptr)); + try testing.expect(@intFromPtr(slice.ptr) & align_mask == @intFromPtr(slice.ptr)); if (allocator.resize(slice, 10)) { slice = slice[0..10]; } slice = try allocator.realloc(slice, 20000); - try testing.expect(@ptrToInt(slice.ptr) & align_mask == @ptrToInt(slice.ptr)); + try testing.expect(@intFromPtr(slice.ptr) & align_mask == @intFromPtr(slice.ptr)); allocator.free(slice); } @@ -840,7 +840,7 @@ pub fn testAllocatorAlignedShrink(base_allocator: mem.Allocator) !void { // which is 16 pages, hence the 32. This test may require to increase // the size of the allocations feeding the `allocator` parameter if they // fail, because of this high over-alignment we want to have. - while (@ptrToInt(slice.ptr) == mem.alignForward(usize, @ptrToInt(slice.ptr), mem.page_size * 32)) { + while (@intFromPtr(slice.ptr) == mem.alignForward(usize, @intFromPtr(slice.ptr), mem.page_size * 32)) { try stuff_to_free.append(slice); slice = try allocator.alignedAlloc(u8, 16, alloc_size); } diff --git a/lib/std/heap/PageAllocator.zig b/lib/std/heap/PageAllocator.zig index 5da570fa42..12a0bdcf30 100644 --- a/lib/std/heap/PageAllocator.zig +++ b/lib/std/heap/PageAllocator.zig @@ -39,7 +39,7 @@ fn alloc(_: *anyopaque, n: usize, log2_align: u8, ra: usize) ?[*]u8 { -1, 0, ) catch return null; - assert(mem.isAligned(@ptrToInt(slice.ptr), mem.page_size)); + assert(mem.isAligned(@intFromPtr(slice.ptr), mem.page_size)); const new_hint = @alignCast(mem.page_size, slice.ptr + aligned_len); _ = @cmpxchgStrong(@TypeOf(std.heap.next_mmap_addr_hint), &std.heap.next_mmap_addr_hint, hint, new_hint, .Monotonic, .Monotonic); return slice.ptr; @@ -59,14 +59,14 @@ fn resize( if (builtin.os.tag == .windows) { const w = os.windows; if (new_size <= buf_unaligned.len) { - const base_addr = @ptrToInt(buf_unaligned.ptr); + const base_addr = @intFromPtr(buf_unaligned.ptr); const old_addr_end = base_addr + buf_unaligned.len; const new_addr_end = mem.alignForward(usize, base_addr + new_size, mem.page_size); if (old_addr_end > new_addr_end) { // For shrinking that is not releasing, we will only // decommit the pages not needed anymore. w.VirtualFree( - @intToPtr(*anyopaque, new_addr_end), + @ptrFromInt(*anyopaque, new_addr_end), old_addr_end - new_addr_end, w.MEM_DECOMMIT, ); diff --git a/lib/std/heap/WasmAllocator.zig b/lib/std/heap/WasmAllocator.zig index efec116db4..e3e436fd2b 100644 --- a/lib/std/heap/WasmAllocator.zig +++ b/lib/std/heap/WasmAllocator.zig @@ -55,7 +55,7 @@ fn alloc(ctx: *anyopaque, len: usize, log2_align: u8, return_address: usize) ?[* const addr = a: { const top_free_ptr = frees[class]; if (top_free_ptr != 0) { - const node = @intToPtr(*usize, top_free_ptr + (slot_size - @sizeOf(usize))); + const node = @ptrFromInt(*usize, top_free_ptr + (slot_size - @sizeOf(usize))); frees[class] = node.*; break :a top_free_ptr; } @@ -74,11 +74,11 @@ fn alloc(ctx: *anyopaque, len: usize, log2_align: u8, return_address: usize) ?[* break :a next_addr; } }; - return @intToPtr([*]u8, addr); + return @ptrFromInt([*]u8, addr); } const bigpages_needed = bigPagesNeeded(actual_len); const addr = allocBigPages(bigpages_needed); - return @intToPtr([*]u8, addr); + return @ptrFromInt([*]u8, addr); } fn resize( @@ -121,16 +121,16 @@ fn free( const actual_len = @max(buf.len + @sizeOf(usize), buf_align); const slot_size = math.ceilPowerOfTwoAssert(usize, actual_len); const class = math.log2(slot_size) - min_class; - const addr = @ptrToInt(buf.ptr); + const addr = @intFromPtr(buf.ptr); if (class < size_class_count) { - const node = @intToPtr(*usize, addr + (slot_size - @sizeOf(usize))); + const node = @ptrFromInt(*usize, addr + (slot_size - @sizeOf(usize))); node.* = frees[class]; frees[class] = addr; } else { const bigpages_needed = bigPagesNeeded(actual_len); const pow2_pages = math.ceilPowerOfTwoAssert(usize, bigpages_needed); const big_slot_size_bytes = pow2_pages * bigpage_size; - const node = @intToPtr(*usize, addr + (big_slot_size_bytes - @sizeOf(usize))); + const node = @ptrFromInt(*usize, addr + (big_slot_size_bytes - @sizeOf(usize))); const big_class = math.log2(pow2_pages); node.* = big_frees[big_class]; big_frees[big_class] = addr; @@ -148,7 +148,7 @@ fn allocBigPages(n: usize) usize { const top_free_ptr = big_frees[class]; if (top_free_ptr != 0) { - const node = @intToPtr(*usize, top_free_ptr + (slot_size_bytes - @sizeOf(usize))); + const node = @ptrFromInt(*usize, top_free_ptr + (slot_size_bytes - @sizeOf(usize))); big_frees[class] = node.*; return top_free_ptr; } diff --git a/lib/std/heap/WasmPageAllocator.zig b/lib/std/heap/WasmPageAllocator.zig index 63ae226196..c77164ee2d 100644 --- a/lib/std/heap/WasmPageAllocator.zig +++ b/lib/std/heap/WasmPageAllocator.zig @@ -40,14 +40,14 @@ const FreeBlock = struct { fn getBit(self: FreeBlock, idx: usize) PageStatus { const bit_offset = 0; - return @intToEnum(PageStatus, Io.get(mem.sliceAsBytes(self.data), idx, bit_offset)); + return @enumFromInt(PageStatus, Io.get(mem.sliceAsBytes(self.data), idx, bit_offset)); } fn setBits(self: FreeBlock, start_idx: usize, len: usize, val: PageStatus) void { const bit_offset = 0; var i: usize = 0; while (i < len) : (i += 1) { - Io.set(mem.sliceAsBytes(self.data), start_idx + i, bit_offset, @enumToInt(val)); + Io.set(mem.sliceAsBytes(self.data), start_idx + i, bit_offset, @intFromEnum(val)); } } @@ -109,7 +109,7 @@ fn alloc(ctx: *anyopaque, len: usize, log2_align: u8, ra: usize) ?[*]u8 { if (len > maxInt(usize) - (mem.page_size - 1)) return null; const page_count = nPages(len); const page_idx = allocPages(page_count, log2_align) catch return null; - return @intToPtr([*]u8, page_idx * mem.page_size); + return @ptrFromInt([*]u8, page_idx * mem.page_size); } fn allocPages(page_count: usize, log2_align: u8) !usize { @@ -151,7 +151,7 @@ fn freePages(start: usize, end: usize) void { // TODO: would it be better if we use the first page instead? new_end -= 1; - extended.data = @intToPtr([*]u128, new_end * mem.page_size)[0 .. mem.page_size / @sizeOf(u128)]; + extended.data = @ptrFromInt([*]u128, new_end * mem.page_size)[0 .. mem.page_size / @sizeOf(u128)]; // Since this is the first page being freed and we consume it, assume *nothing* is free. @memset(extended.data, PageStatus.none_free); } @@ -175,7 +175,7 @@ fn resize( const current_n = nPages(aligned_len); const new_n = nPages(new_len); if (new_n != current_n) { - const base = nPages(@ptrToInt(buf.ptr)); + const base = nPages(@intFromPtr(buf.ptr)); freePages(base + new_n, base + current_n); } return true; @@ -192,7 +192,7 @@ fn free( _ = return_address; const aligned_len = mem.alignForward(usize, buf.len, mem.page_size); const current_n = nPages(aligned_len); - const base = nPages(@ptrToInt(buf.ptr)); + const base = nPages(@intFromPtr(buf.ptr)); freePages(base, base + current_n); } @@ -202,7 +202,7 @@ test "internals" { const conventional_memsize = WasmPageAllocator.conventional.totalPages() * mem.page_size; const initial = try page_allocator.alloc(u8, mem.page_size); - try testing.expect(@ptrToInt(initial.ptr) < conventional_memsize); // If this isn't conventional, the rest of these tests don't make sense. Also we have a serious memory leak in the test suite. + try testing.expect(@intFromPtr(initial.ptr) < conventional_memsize); // If this isn't conventional, the rest of these tests don't make sense. Also we have a serious memory leak in the test suite. var inplace = try page_allocator.realloc(initial, 1); try testing.expectEqual(initial.ptr, inplace.ptr); @@ -219,7 +219,7 @@ test "internals" { page_allocator.free(padding); const ext = try page_allocator.alloc(u8, conventional_memsize); - try testing.expect(@ptrToInt(ext.ptr) >= conventional_memsize); + try testing.expect(@intFromPtr(ext.ptr) >= conventional_memsize); const use_small = try page_allocator.alloc(u8, 1); try testing.expectEqual(initial.ptr, use_small.ptr); diff --git a/lib/std/heap/arena_allocator.zig b/lib/std/heap/arena_allocator.zig index f858510bcf..a8d6641d8d 100644 --- a/lib/std/heap/arena_allocator.zig +++ b/lib/std/heap/arena_allocator.zig @@ -185,7 +185,7 @@ pub const ArenaAllocator = struct { while (true) { const cur_alloc_buf = @ptrCast([*]u8, cur_node)[0..cur_node.data]; const cur_buf = cur_alloc_buf[@sizeOf(BufNode)..]; - const addr = @ptrToInt(cur_buf.ptr) + self.state.end_index; + const addr = @intFromPtr(cur_buf.ptr) + self.state.end_index; const adjusted_addr = mem.alignForward(usize, addr, ptr_align); const adjusted_index = self.state.end_index + (adjusted_addr - addr); const new_end_index = adjusted_index + n; @@ -214,7 +214,7 @@ pub const ArenaAllocator = struct { const cur_node = self.state.buffer_list.first orelse return false; const cur_buf = @ptrCast([*]u8, cur_node)[@sizeOf(BufNode)..cur_node.data]; - if (@ptrToInt(cur_buf.ptr) + self.state.end_index != @ptrToInt(buf.ptr) + buf.len) { + if (@intFromPtr(cur_buf.ptr) + self.state.end_index != @intFromPtr(buf.ptr) + buf.len) { // It's not the most recent allocation, so it cannot be expanded, // but it's fine if they want to make it smaller. return new_len <= buf.len; @@ -240,7 +240,7 @@ pub const ArenaAllocator = struct { const cur_node = self.state.buffer_list.first orelse return; const cur_buf = @ptrCast([*]u8, cur_node)[@sizeOf(BufNode)..cur_node.data]; - if (@ptrToInt(cur_buf.ptr) + self.state.end_index == @ptrToInt(buf.ptr) + buf.len) { + if (@intFromPtr(cur_buf.ptr) + self.state.end_index == @intFromPtr(buf.ptr) + buf.len) { self.state.end_index -= buf.len; } } @@ -262,7 +262,7 @@ test "ArenaAllocator (reset with preheating)" { const size = random.intRangeAtMost(usize, 16, 256); const alignment = 32; const slice = try arena_allocator.allocator().alignedAlloc(u8, alignment, size); - try std.testing.expect(std.mem.isAligned(@ptrToInt(slice.ptr), alignment)); + try std.testing.expect(std.mem.isAligned(@intFromPtr(slice.ptr), alignment)); try std.testing.expectEqual(size, slice.len); alloced_bytes += slice.len; } diff --git a/lib/std/heap/general_purpose_allocator.zig b/lib/std/heap/general_purpose_allocator.zig index 51b6c1744f..98375c850e 100644 --- a/lib/std/heap/general_purpose_allocator.zig +++ b/lib/std/heap/general_purpose_allocator.zig @@ -216,8 +216,8 @@ pub fn GeneralPurposeAllocator(comptime config: Config) type { } fn getStackTrace(self: *LargeAlloc, trace_kind: TraceKind) std.builtin.StackTrace { - assert(@enumToInt(trace_kind) < trace_n); - const stack_addresses = &self.stack_addresses[@enumToInt(trace_kind)]; + assert(@intFromEnum(trace_kind) < trace_n); + const stack_addresses = &self.stack_addresses[@intFromEnum(trace_kind)]; var len: usize = 0; while (len < stack_n and stack_addresses[len] != 0) { len += 1; @@ -229,8 +229,8 @@ pub fn GeneralPurposeAllocator(comptime config: Config) type { } fn captureStackTrace(self: *LargeAlloc, ret_addr: usize, trace_kind: TraceKind) void { - assert(@enumToInt(trace_kind) < trace_n); - const stack_addresses = &self.stack_addresses[@enumToInt(trace_kind)]; + assert(@intFromEnum(trace_kind) < trace_n); + const stack_addresses = &self.stack_addresses[@intFromEnum(trace_kind)]; collectStackTrace(ret_addr, stack_addresses); } }; @@ -250,7 +250,7 @@ pub fn GeneralPurposeAllocator(comptime config: Config) type { used_count: SlotIndex, fn usedBits(bucket: *BucketHeader, index: usize) *u8 { - return @intToPtr(*u8, @ptrToInt(bucket) + @sizeOf(BucketHeader) + index); + return @ptrFromInt(*u8, @intFromPtr(bucket) + @sizeOf(BucketHeader) + index); } fn stackTracePtr( @@ -261,7 +261,7 @@ pub fn GeneralPurposeAllocator(comptime config: Config) type { ) *[stack_n]usize { const start_ptr = @ptrCast([*]u8, bucket) + bucketStackFramesStart(size_class); const addr = start_ptr + one_trace_size * traces_per_slot * slot_index + - @enumToInt(trace_kind) * @as(usize, one_trace_size); + @intFromEnum(trace_kind) * @as(usize, one_trace_size); return @ptrCast(*[stack_n]usize, @alignCast(@alignOf(usize), addr)); } @@ -344,7 +344,7 @@ pub fn GeneralPurposeAllocator(comptime config: Config) type { const stack_trace = bucketStackTrace(bucket, size_class, slot_index, .alloc); const addr = bucket.page + slot_index * size_class; log.err("memory address 0x{x} leaked: {}", .{ - @ptrToInt(addr), stack_trace, + @intFromPtr(addr), stack_trace, }); leaks = true; } @@ -376,7 +376,7 @@ pub fn GeneralPurposeAllocator(comptime config: Config) type { if (config.retain_metadata and large_alloc.freed) continue; const stack_trace = large_alloc.getStackTrace(.alloc); log.err("memory address 0x{x} leaked: {}", .{ - @ptrToInt(large_alloc.bytes.ptr), stack_trace, + @intFromPtr(large_alloc.bytes.ptr), stack_trace, }); leaks = true; } @@ -427,7 +427,7 @@ pub fn GeneralPurposeAllocator(comptime config: Config) type { var it = self.large_allocations.iterator(); while (it.next()) |large| { if (large.value_ptr.freed) { - _ = self.large_allocations.remove(@ptrToInt(large.value_ptr.bytes.ptr)); + _ = self.large_allocations.remove(@intFromPtr(large.value_ptr.bytes.ptr)); } } } @@ -444,7 +444,7 @@ pub fn GeneralPurposeAllocator(comptime config: Config) type { self.small_allocations.deinit(self.backing_allocator); } self.* = undefined; - return @intToEnum(Check, @boolToInt(leaks)); + return @enumFromInt(Check, @intFromBool(leaks)); } fn collectStackTrace(first_trace_addr: usize, addresses: *[stack_n]usize) void { @@ -510,8 +510,8 @@ pub fn GeneralPurposeAllocator(comptime config: Config) type { const first_bucket = bucket_list orelse return null; var bucket = first_bucket; while (true) { - const in_bucket_range = (addr >= @ptrToInt(bucket.page) and - addr < @ptrToInt(bucket.page) + page_size); + const in_bucket_range = (addr >= @intFromPtr(bucket.page) and + addr < @intFromPtr(bucket.page) + page_size); if (in_bucket_range) return bucket; bucket = bucket.prev; if (bucket == first_bucket) { @@ -529,7 +529,7 @@ pub fn GeneralPurposeAllocator(comptime config: Config) type { new_size: usize, ret_addr: usize, ) bool { - const entry = self.large_allocations.getEntry(@ptrToInt(old_mem.ptr)) orelse { + const entry = self.large_allocations.getEntry(@intFromPtr(old_mem.ptr)) orelse { if (config.safety) { @panic("Invalid free"); } else { @@ -604,7 +604,7 @@ pub fn GeneralPurposeAllocator(comptime config: Config) type { log2_old_align: u8, ret_addr: usize, ) void { - const entry = self.large_allocations.getEntry(@ptrToInt(old_mem.ptr)) orelse { + const entry = self.large_allocations.getEntry(@intFromPtr(old_mem.ptr)) orelse { if (config.safety) { @panic("Invalid free"); } else { @@ -649,7 +649,7 @@ pub fn GeneralPurposeAllocator(comptime config: Config) type { } if (!config.retain_metadata) { - assert(self.large_allocations.remove(@ptrToInt(old_mem.ptr))); + assert(self.large_allocations.remove(@intFromPtr(old_mem.ptr))); } else { entry.value_ptr.freed = true; entry.value_ptr.captureStackTrace(ret_addr, .free); @@ -683,7 +683,7 @@ pub fn GeneralPurposeAllocator(comptime config: Config) type { var bucket_index = math.log2(size_class_hint); var size_class: usize = size_class_hint; const bucket = while (bucket_index < small_bucket_count) : (bucket_index += 1) { - if (searchBucket(self.buckets[bucket_index], @ptrToInt(old_mem.ptr))) |bucket| { + if (searchBucket(self.buckets[bucket_index], @intFromPtr(old_mem.ptr))) |bucket| { // move bucket to head of list to optimize search for nearby allocations self.buckets[bucket_index] = bucket; break bucket; @@ -691,9 +691,9 @@ pub fn GeneralPurposeAllocator(comptime config: Config) type { size_class *= 2; } else blk: { if (config.retain_metadata) { - if (!self.large_allocations.contains(@ptrToInt(old_mem.ptr))) { + if (!self.large_allocations.contains(@intFromPtr(old_mem.ptr))) { // object not in active buckets or a large allocation, so search empty buckets - if (searchBucket(self.empty_buckets, @ptrToInt(old_mem.ptr))) |bucket| { + if (searchBucket(self.empty_buckets, @intFromPtr(old_mem.ptr))) |bucket| { // bucket is empty so is_used below will always be false and we exit there break :blk bucket; } else { @@ -703,7 +703,7 @@ pub fn GeneralPurposeAllocator(comptime config: Config) type { } return self.resizeLarge(old_mem, log2_old_align, new_size, ret_addr); }; - const byte_offset = @ptrToInt(old_mem.ptr) - @ptrToInt(bucket.page); + const byte_offset = @intFromPtr(old_mem.ptr) - @intFromPtr(bucket.page); const slot_index = @intCast(SlotIndex, byte_offset / size_class); const used_byte_index = slot_index / 8; const used_bit_index = @intCast(u3, slot_index % 8); @@ -720,7 +720,7 @@ pub fn GeneralPurposeAllocator(comptime config: Config) type { // Definitely an in-use small alloc now. if (config.safety) { - const entry = self.small_allocations.getEntry(@ptrToInt(old_mem.ptr)) orelse + const entry = self.small_allocations.getEntry(@intFromPtr(old_mem.ptr)) orelse @panic("Invalid free"); if (old_mem.len != entry.value_ptr.requested_size or log2_old_align != entry.value_ptr.log2_ptr_align) { var addresses: [stack_n]usize = [1]usize{0} ** stack_n; @@ -768,7 +768,7 @@ pub fn GeneralPurposeAllocator(comptime config: Config) type { }); } if (config.safety) { - const entry = self.small_allocations.getEntry(@ptrToInt(old_mem.ptr)).?; + const entry = self.small_allocations.getEntry(@intFromPtr(old_mem.ptr)).?; entry.value_ptr.requested_size = new_size; } return true; @@ -803,7 +803,7 @@ pub fn GeneralPurposeAllocator(comptime config: Config) type { var bucket_index = math.log2(size_class_hint); var size_class: usize = size_class_hint; const bucket = while (bucket_index < small_bucket_count) : (bucket_index += 1) { - if (searchBucket(self.buckets[bucket_index], @ptrToInt(old_mem.ptr))) |bucket| { + if (searchBucket(self.buckets[bucket_index], @intFromPtr(old_mem.ptr))) |bucket| { // move bucket to head of list to optimize search for nearby allocations self.buckets[bucket_index] = bucket; break bucket; @@ -811,9 +811,9 @@ pub fn GeneralPurposeAllocator(comptime config: Config) type { size_class *= 2; } else blk: { if (config.retain_metadata) { - if (!self.large_allocations.contains(@ptrToInt(old_mem.ptr))) { + if (!self.large_allocations.contains(@intFromPtr(old_mem.ptr))) { // object not in active buckets or a large allocation, so search empty buckets - if (searchBucket(self.empty_buckets, @ptrToInt(old_mem.ptr))) |bucket| { + if (searchBucket(self.empty_buckets, @intFromPtr(old_mem.ptr))) |bucket| { // bucket is empty so is_used below will always be false and we exit there break :blk bucket; } else { @@ -824,7 +824,7 @@ pub fn GeneralPurposeAllocator(comptime config: Config) type { self.freeLarge(old_mem, log2_old_align, ret_addr); return; }; - const byte_offset = @ptrToInt(old_mem.ptr) - @ptrToInt(bucket.page); + const byte_offset = @intFromPtr(old_mem.ptr) - @intFromPtr(bucket.page); const slot_index = @intCast(SlotIndex, byte_offset / size_class); const used_byte_index = slot_index / 8; const used_bit_index = @intCast(u3, slot_index % 8); @@ -842,7 +842,7 @@ pub fn GeneralPurposeAllocator(comptime config: Config) type { // Definitely an in-use small alloc now. if (config.safety) { - const entry = self.small_allocations.getEntry(@ptrToInt(old_mem.ptr)) orelse + const entry = self.small_allocations.getEntry(@intFromPtr(old_mem.ptr)) orelse @panic("Invalid free"); if (old_mem.len != entry.value_ptr.requested_size or log2_old_align != entry.value_ptr.log2_ptr_align) { var addresses: [stack_n]usize = [1]usize{0} ** stack_n; @@ -915,7 +915,7 @@ pub fn GeneralPurposeAllocator(comptime config: Config) type { @memset(old_mem, undefined); } if (config.safety) { - assert(self.small_allocations.remove(@ptrToInt(old_mem.ptr))); + assert(self.small_allocations.remove(@intFromPtr(old_mem.ptr))); } if (config.verbose_log) { log.info("small free {d} bytes at {*}", .{ old_mem.len, old_mem.ptr }); @@ -956,7 +956,7 @@ pub fn GeneralPurposeAllocator(comptime config: Config) type { return error.OutOfMemory; const slice = ptr[0..len]; - const gop = self.large_allocations.getOrPutAssumeCapacity(@ptrToInt(slice.ptr)); + const gop = self.large_allocations.getOrPutAssumeCapacity(@intFromPtr(slice.ptr)); if (config.retain_metadata and !config.never_unmap) { // Backing allocator may be reusing memory that we're retaining metadata for assert(!gop.found_existing or gop.value_ptr.freed); @@ -986,7 +986,7 @@ pub fn GeneralPurposeAllocator(comptime config: Config) type { const new_size_class = math.ceilPowerOfTwoAssert(usize, new_aligned_size); const ptr = try self.allocSlot(new_size_class, ret_addr); if (config.safety) { - const gop = self.small_allocations.getOrPutAssumeCapacity(@ptrToInt(ptr)); + const gop = self.small_allocations.getOrPutAssumeCapacity(@intFromPtr(ptr)); gop.value_ptr.requested_size = len; gop.value_ptr.log2_ptr_align = log2_ptr_align; } @@ -1212,7 +1212,7 @@ test "shrink large object to large object with larger alignment" { // alignment. Then we shrink the allocation after the loop, but increase the // alignment to the higher one, that we know will force it to realloc. var stuff_to_free = std.ArrayList([]align(16) u8).init(debug_allocator); - while (mem.isAligned(@ptrToInt(slice.ptr), big_alignment)) { + while (mem.isAligned(@intFromPtr(slice.ptr), big_alignment)) { try stuff_to_free.append(slice); slice = try allocator.alignedAlloc(u8, 16, alloc_size); } @@ -1281,7 +1281,7 @@ test "realloc large object to larger alignment" { }; // This loop allocates until we find a page that is not aligned to the big alignment. var stuff_to_free = std.ArrayList([]align(16) u8).init(debug_allocator); - while (mem.isAligned(@ptrToInt(slice.ptr), big_alignment)) { + while (mem.isAligned(@intFromPtr(slice.ptr), big_alignment)) { try stuff_to_free.append(slice); slice = try allocator.alignedAlloc(u8, 16, page_size * 2 + 50); } @@ -1375,18 +1375,18 @@ test "double frees" { const index: usize = 6; const size_class: usize = @as(usize, 1) << 6; const small = try allocator.alloc(u8, size_class); - try std.testing.expect(GPA.searchBucket(gpa.buckets[index], @ptrToInt(small.ptr)) != null); + try std.testing.expect(GPA.searchBucket(gpa.buckets[index], @intFromPtr(small.ptr)) != null); allocator.free(small); - try std.testing.expect(GPA.searchBucket(gpa.buckets[index], @ptrToInt(small.ptr)) == null); - try std.testing.expect(GPA.searchBucket(gpa.empty_buckets, @ptrToInt(small.ptr)) != null); + try std.testing.expect(GPA.searchBucket(gpa.buckets[index], @intFromPtr(small.ptr)) == null); + try std.testing.expect(GPA.searchBucket(gpa.empty_buckets, @intFromPtr(small.ptr)) != null); // detect a large allocation double free const large = try allocator.alloc(u8, 2 * page_size); - try std.testing.expect(gpa.large_allocations.contains(@ptrToInt(large.ptr))); - try std.testing.expectEqual(gpa.large_allocations.getEntry(@ptrToInt(large.ptr)).?.value_ptr.bytes, large); + try std.testing.expect(gpa.large_allocations.contains(@intFromPtr(large.ptr))); + try std.testing.expectEqual(gpa.large_allocations.getEntry(@intFromPtr(large.ptr)).?.value_ptr.bytes, large); allocator.free(large); - try std.testing.expect(gpa.large_allocations.contains(@ptrToInt(large.ptr))); - try std.testing.expect(gpa.large_allocations.getEntry(@ptrToInt(large.ptr)).?.value_ptr.freed); + try std.testing.expect(gpa.large_allocations.contains(@intFromPtr(large.ptr))); + try std.testing.expect(gpa.large_allocations.getEntry(@intFromPtr(large.ptr)).?.value_ptr.freed); const normal_small = try allocator.alloc(u8, size_class); defer allocator.free(normal_small); @@ -1396,9 +1396,9 @@ test "double frees" { // check that flushing retained metadata doesn't disturb live allocations gpa.flushRetainedMetadata(); try std.testing.expect(gpa.empty_buckets == null); - try std.testing.expect(GPA.searchBucket(gpa.buckets[index], @ptrToInt(normal_small.ptr)) != null); - try std.testing.expect(gpa.large_allocations.contains(@ptrToInt(normal_large.ptr))); - try std.testing.expect(!gpa.large_allocations.contains(@ptrToInt(large.ptr))); + try std.testing.expect(GPA.searchBucket(gpa.buckets[index], @intFromPtr(normal_small.ptr)) != null); + try std.testing.expect(gpa.large_allocations.contains(@intFromPtr(normal_large.ptr))); + try std.testing.expect(!gpa.large_allocations.contains(@intFromPtr(large.ptr))); } test "bug 9995 fix, large allocs count requested size not backing size" { diff --git a/lib/std/http.zig b/lib/std/http.zig index e9c62705b5..c09341c701 100644 --- a/lib/std/http.zig +++ b/lib/std/http.zig @@ -232,7 +232,7 @@ pub const Status = enum(u10) { }; pub fn class(self: Status) Class { - return switch (@enumToInt(self)) { + return switch (@intFromEnum(self)) { 100...199 => .informational, 200...299 => .success, 300...399 => .redirect, diff --git a/lib/std/http/Client.zig b/lib/std/http/Client.zig index 975375a2b9..0c627642b8 100644 --- a/lib/std/http/Client.zig +++ b/lib/std/http/Client.zig @@ -343,7 +343,7 @@ pub const Response = struct { else => return error.HttpHeadersInvalid, }; if (first_line[8] != ' ') return error.HttpHeadersInvalid; - const status = @intToEnum(http.Status, parseInt3(first_line[9..12].*)); + const status = @enumFromInt(http.Status, parseInt3(first_line[9..12].*)); const reason = mem.trimLeft(u8, first_line[12..], " "); res.version = version; diff --git a/lib/std/http/Server.zig b/lib/std/http/Server.zig index 60f6243fce..fe57b5735d 100644 --- a/lib/std/http/Server.zig +++ b/lib/std/http/Server.zig @@ -402,7 +402,7 @@ pub const Response = struct { try w.writeAll(@tagName(res.version)); try w.writeByte(' '); - try w.print("{d}", .{@enumToInt(res.status)}); + try w.print("{d}", .{@intFromEnum(res.status)}); try w.writeByte(' '); if (res.reason) |reason| { try w.writeAll(reason); diff --git a/lib/std/io.zig b/lib/std/io.zig index fb8b0b9d14..f2804a3107 100644 --- a/lib/std/io.zig +++ b/lib/std/io.zig @@ -257,7 +257,7 @@ pub fn Poller(comptime StreamEnum: type) type { } pub inline fn fifo(self: *Self, comptime which: StreamEnum) *PollFifo { - return &self.fifos[@enumToInt(which)]; + return &self.fifos[@intFromEnum(which)]; } fn pollWindows(self: *Self) !bool { @@ -275,7 +275,7 @@ pub fn Poller(comptime StreamEnum: type) type { )) { .pending => { self.windows.active.handles_buf[self.windows.active.count] = handle; - self.windows.active.stream_map[self.windows.active.count] = @intToEnum(StreamEnum, i); + self.windows.active.stream_map[self.windows.active.count] = @enumFromInt(StreamEnum, i); self.windows.active.count += 1; }, .closed => {}, // don't add to the wait_objects list @@ -302,7 +302,7 @@ pub fn Poller(comptime StreamEnum: type) type { const active_idx = status - os.windows.WAIT_OBJECT_0; const handle = self.windows.active.handles_buf[active_idx]; - const stream_idx = @enumToInt(self.windows.active.stream_map[active_idx]); + const stream_idx = @intFromEnum(self.windows.active.stream_map[active_idx]); var read_bytes: u32 = undefined; if (0 == os.windows.kernel32.GetOverlappedResult( handle, diff --git a/lib/std/io/bit_reader.zig b/lib/std/io/bit_reader.zig index e897850b83..4bdb0b9194 100644 --- a/lib/std/io/bit_reader.zig +++ b/lib/std/io/bit_reader.zig @@ -143,7 +143,7 @@ pub fn BitReader(comptime endian: std.builtin.Endian, comptime ReaderType: type) b.* = try self.readBits(u8, u8_bit_count, &out_bits); out_bits_total += out_bits; } - const incomplete_byte = @boolToInt(out_bits_total % u8_bit_count > 0); + const incomplete_byte = @intFromBool(out_bits_total % u8_bit_count > 0); return (out_bits_total / u8_bit_count) + incomplete_byte; } diff --git a/lib/std/io/c_writer.zig b/lib/std/io/c_writer.zig index 80dcba3f6f..62c73d3714 100644 --- a/lib/std/io/c_writer.zig +++ b/lib/std/io/c_writer.zig @@ -13,7 +13,7 @@ pub fn cWriter(c_file: *std.c.FILE) CWriter { fn cWriterWrite(c_file: *std.c.FILE, bytes: []const u8) std.fs.File.WriteError!usize { const amt_written = std.c.fwrite(bytes.ptr, 1, bytes.len, c_file); if (amt_written >= 0) return amt_written; - switch (@intToEnum(os.E, std.c._errno().*)) { + switch (@enumFromInt(os.E, std.c._errno().*)) { .SUCCESS => unreachable, .INVAL => unreachable, .FAULT => unreachable, diff --git a/lib/std/json/static.zig b/lib/std/json/static.zig index 73a209ebc0..3a3af8f8d9 100644 --- a/lib/std/json/static.zig +++ b/lib/std/json/static.zig @@ -176,7 +176,7 @@ fn parseInternal( const float = try std.fmt.parseFloat(f128, slice); if (@round(float) != float) return error.InvalidNumber; if (float > std.math.maxInt(T) or float < std.math.minInt(T)) return error.Overflow; - return @floatToInt(T, float); + return @intFromFloat(T, float); }, .Optional => |optionalInfo| { switch (try source.peekNextTokenType()) { diff --git a/lib/std/leb128.zig b/lib/std/leb128.zig index bc5955d16a..859d753a6a 100644 --- a/lib/std/leb128.zig +++ b/lib/std/leb128.zig @@ -318,7 +318,7 @@ fn test_write_leb128(value: anytype) !void { if (@typeInfo(T).Int.bits <= 7) break :bn @as(u16, 1); const unused_bits = if (value < 0) @clz(~value) else @clz(value); - const used_bits: u16 = (@typeInfo(T).Int.bits - unused_bits) + @boolToInt(t_signed); + const used_bits: u16 = (@typeInfo(T).Int.bits - unused_bits) + @intFromBool(t_signed); if (used_bits <= 7) break :bn @as(u16, 1); break :bn ((used_bits + 6) / 7); }; diff --git a/lib/std/log.zig b/lib/std/log.zig index dc45df9ea3..1c5b60ff1a 100644 --- a/lib/std/log.zig +++ b/lib/std/log.zig @@ -36,7 +36,7 @@ //! // .my_project, .nice_library and the default //! const scope_prefix = "(" ++ switch (scope) { //! .my_project, .nice_library, std.log.default_log_scope => @tagName(scope), -//! else => if (@enumToInt(level) <= @enumToInt(std.log.Level.err)) +//! else => if (@intFromEnum(level) <= @intFromEnum(std.log.Level.err)) //! @tagName(scope) //! else //! return, @@ -128,9 +128,9 @@ fn log( /// Determine if a specific log message level and scope combination are enabled for logging. pub fn logEnabled(comptime message_level: Level, comptime scope: @Type(.EnumLiteral)) bool { inline for (scope_levels) |scope_level| { - if (scope_level.scope == scope) return @enumToInt(message_level) <= @enumToInt(scope_level.level); + if (scope_level.scope == scope) return @intFromEnum(message_level) <= @intFromEnum(scope_level.level); } - return @enumToInt(message_level) <= @enumToInt(level); + return @intFromEnum(message_level) <= @intFromEnum(level); } /// Determine if a specific log message level using the default log scope is enabled for logging. diff --git a/lib/std/math.zig b/lib/std/math.zig index e62a208d0b..c7d354f787 100644 --- a/lib/std/math.zig +++ b/lib/std/math.zig @@ -1104,7 +1104,7 @@ pub const AlignCastError = error{UnalignedMemory}; /// Align cast a pointer but return an error if it's the wrong alignment pub fn alignCast(comptime alignment: u29, ptr: anytype) AlignCastError!@TypeOf(@alignCast(alignment, ptr)) { - const addr = @ptrToInt(ptr); + const addr = @intFromPtr(ptr); if (addr % alignment != 0) { return error.UnalignedMemory; } @@ -1311,7 +1311,7 @@ pub fn lossyCast(comptime T: type, value: anytype) T { switch (@typeInfo(T)) { .Float => { switch (@typeInfo(@TypeOf(value))) { - .Int => return @intToFloat(T, value), + .Int => return @floatFromInt(T, value), .Float => return @floatCast(T, value), .ComptimeInt => return @as(T, value), .ComptimeFloat => return @as(T, value), @@ -1335,7 +1335,7 @@ pub fn lossyCast(comptime T: type, value: anytype) T { } else if (value <= minInt(T)) { return @as(T, minInt(T)); } else { - return @floatToInt(T, value); + return @intFromFloat(T, value); } }, else => @compileError("bad type"), @@ -1401,7 +1401,7 @@ pub fn maxInt(comptime T: type) comptime_int { const info = @typeInfo(T); const bit_count = info.Int.bits; if (bit_count == 0) return 0; - return (1 << (bit_count - @boolToInt(info.Int.signedness == .signed))) - 1; + return (1 << (bit_count - @intFromBool(info.Int.signedness == .signed))) - 1; } /// Returns the minimum value of integer type T. @@ -1624,7 +1624,7 @@ test "order.compare" { test "compare.reverse" { inline for (@typeInfo(CompareOperator).Enum.fields) |op_field| { - const op = @intToEnum(CompareOperator, op_field.value); + const op = @enumFromInt(CompareOperator, op_field.value); try testing.expect(compare(2, op, 3) == compare(3, op.reverse(), 2)); try testing.expect(compare(3, op, 3) == compare(3, op.reverse(), 3)); try testing.expect(compare(4, op, 3) == compare(3, op.reverse(), 4)); @@ -1643,13 +1643,13 @@ pub inline fn boolMask(comptime MaskInt: type, value: bool) MaskInt { // The u1 and i1 cases tend to overflow, // so we special case them here. - if (MaskInt == u1) return @boolToInt(value); + if (MaskInt == u1) return @intFromBool(value); if (MaskInt == i1) { // The @as here is a workaround for #7950 - return @bitCast(i1, @as(u1, @boolToInt(value))); + return @bitCast(i1, @as(u1, @intFromBool(value))); } - return -%@intCast(MaskInt, @boolToInt(value)); + return -%@intCast(MaskInt, @intFromBool(value)); } test "boolMask" { @@ -1708,8 +1708,8 @@ pub fn break_f80(x: f80) F80 { pub inline fn sign(i: anytype) @TypeOf(i) { const T = @TypeOf(i); return switch (@typeInfo(T)) { - .Int, .ComptimeInt => @as(T, @boolToInt(i > 0)) - @as(T, @boolToInt(i < 0)), - .Float, .ComptimeFloat => @intToFloat(T, @boolToInt(i > 0)) - @intToFloat(T, @boolToInt(i < 0)), + .Int, .ComptimeInt => @as(T, @intFromBool(i > 0)) - @as(T, @intFromBool(i < 0)), + .Float, .ComptimeFloat => @floatFromInt(T, @intFromBool(i > 0)) - @floatFromInt(T, @intFromBool(i < 0)), .Vector => |vinfo| blk: { switch (@typeInfo(vinfo.child)) { .Int, .Float => { diff --git a/lib/std/math/big/int.zig b/lib/std/math/big/int.zig index 487812e1de..846a809e05 100644 --- a/lib/std/math/big/int.zig +++ b/lib/std/math/big/int.zig @@ -1127,7 +1127,7 @@ pub const Mutable = struct { return; } - const checkbit = bit_count - shift - @boolToInt(signedness == .signed); + const checkbit = bit_count - shift - @intFromBool(signedness == .signed); // If `checkbit` and more significant bits are zero, no overflow will take place. if (checkbit >= a.limbs.len * limb_bits) { @@ -1274,10 +1274,10 @@ pub const Mutable = struct { if (a.limbs.len > b.limbs.len) { r.positive = llsignedxor(r.limbs, a.limbs, a.positive, b.limbs, b.positive); - r.normalize(a.limbs.len + @boolToInt(a.positive != b.positive)); + r.normalize(a.limbs.len + @intFromBool(a.positive != b.positive)); } else { r.positive = llsignedxor(r.limbs, b.limbs, b.positive, a.limbs, a.positive); - r.normalize(b.limbs.len + @boolToInt(a.positive != b.positive)); + r.normalize(b.limbs.len + @intFromBool(a.positive != b.positive)); } } @@ -2128,7 +2128,7 @@ pub const Const = struct { return false; } - const req_bits = self.bitCountTwosComp() + @boolToInt(self.positive and signedness == .signed); + const req_bits = self.bitCountTwosComp() + @intFromBool(self.positive and signedness == .signed); return bit_count >= req_bits; } @@ -2143,7 +2143,7 @@ pub const Const = struct { /// value. It is inexact and may exceed the given value by ~1-2 bytes. /// TODO See if we can make this exact. pub fn sizeInBaseUpperBound(self: Const, base: usize) usize { - const bit_count = @as(usize, @boolToInt(!self.positive)) + self.bitCountAbs(); + const bit_count = @as(usize, @intFromBool(!self.positive)) + self.bitCountAbs(); return (bit_count / math.log2(base)) + 2; } @@ -3143,7 +3143,7 @@ pub const Managed = struct { /// r = a ^ b pub fn bitXor(r: *Managed, a: *const Managed, b: *const Managed) !void { - var cap = @max(a.len(), b.len()) + @boolToInt(a.isPositive() != b.isPositive()); + var cap = @max(a.len(), b.len()) + @intFromBool(a.isPositive() != b.isPositive()); try r.ensureCapacity(cap); var m = r.toMutable(); @@ -4048,9 +4048,9 @@ fn llsignedxor(r: []Limb, a: []const Limb, a_positive: bool, b: []const Limb, b_ // - if the result is supposed to be negative, add 1. var i: usize = 0; - var a_borrow = @boolToInt(!a_positive); - var b_borrow = @boolToInt(!b_positive); - var r_carry = @boolToInt(a_positive != b_positive); + var a_borrow = @intFromBool(!a_positive); + var b_borrow = @intFromBool(!b_positive); + var r_carry = @intFromBool(a_positive != b_positive); while (i < b.len) : (i += 1) { const ov1 = @subWithOverflow(a[i], a_borrow); diff --git a/lib/std/math/big/rational.zig b/lib/std/math/big/rational.zig index cdc33e351d..22f7ba183f 100644 --- a/lib/std/math/big/rational.zig +++ b/lib/std/math/big/rational.zig @@ -276,7 +276,7 @@ pub const Rational = struct { } mantissa >>= 1; - const f = math.scalbn(@intToFloat(T, mantissa), @intCast(i32, exp - msize1)); + const f = math.scalbn(@floatFromInt(T, mantissa), @intCast(i32, exp - msize1)); if (math.isInf(f)) { exact = false; } @@ -289,7 +289,7 @@ pub const Rational = struct { try self.p.set(p); try self.q.set(q); - self.p.setSign(@boolToInt(self.p.isPositive()) ^ @boolToInt(self.q.isPositive()) == 0); + self.p.setSign(@intFromBool(self.p.isPositive()) ^ @intFromBool(self.q.isPositive()) == 0); self.q.setSign(true); try self.reduce(); @@ -310,7 +310,7 @@ pub const Rational = struct { try self.p.copy(a.toConst()); try self.q.copy(b.toConst()); - self.p.setSign(@boolToInt(self.p.isPositive()) ^ @boolToInt(self.q.isPositive()) == 0); + self.p.setSign(@intFromBool(self.p.isPositive()) ^ @intFromBool(self.q.isPositive()) == 0); self.q.setSign(true); try self.reduce(); diff --git a/lib/std/math/complex/atan.zig b/lib/std/math/complex/atan.zig index 929b98aebd..56c199016d 100644 --- a/lib/std/math/complex/atan.zig +++ b/lib/std/math/complex/atan.zig @@ -32,7 +32,7 @@ fn redupif32(x: f32) f32 { t -= 0.5; } - const u = @intToFloat(f32, @floatToInt(i32, t)); + const u = @floatFromInt(f32, @intFromFloat(i32, t)); return ((x - u * DP1) - u * DP2) - t * DP3; } @@ -81,7 +81,7 @@ fn redupif64(x: f64) f64 { t -= 0.5; } - const u = @intToFloat(f64, @floatToInt(i64, t)); + const u = @floatFromInt(f64, @intFromFloat(i64, t)); return ((x - u * DP1) - u * DP2) - t * DP3; } diff --git a/lib/std/math/expm1.zig b/lib/std/math/expm1.zig index 5911edf36f..5c4052db56 100644 --- a/lib/std/math/expm1.zig +++ b/lib/std/math/expm1.zig @@ -88,8 +88,8 @@ fn expm1_32(x_: f32) f32 { kf += 0.5; } - k = @floatToInt(i32, kf); - const t = @intToFloat(f32, k); + k = @intFromFloat(i32, kf); + const t = @floatFromInt(f32, k); hi = x - t * ln2_hi; lo = t * ln2_lo; } @@ -219,8 +219,8 @@ fn expm1_64(x_: f64) f64 { kf += 0.5; } - k = @floatToInt(i32, kf); - const t = @intToFloat(f64, k); + k = @intFromFloat(i32, kf); + const t = @floatFromInt(f64, k); hi = x - t * ln2_hi; lo = t * ln2_lo; } diff --git a/lib/std/math/ilogb.zig b/lib/std/math/ilogb.zig index c091619f3a..7c58be2ec5 100644 --- a/lib/std/math/ilogb.zig +++ b/lib/std/math/ilogb.zig @@ -48,7 +48,7 @@ fn ilogbX(comptime T: type, x: T) i32 { } // offset sign bit, exponent bits, and integer bit (if present) + bias - const offset = 1 + exponentBits + @as(comptime_int, @boolToInt(T == f80)) - exponentBias; + const offset = 1 + exponentBits + @as(comptime_int, @intFromBool(T == f80)) - exponentBias; return offset - @intCast(i32, @clz(u)); } diff --git a/lib/std/math/ldexp.zig b/lib/std/math/ldexp.zig index 8947475159..448e94f8e5 100644 --- a/lib/std/math/ldexp.zig +++ b/lib/std/math/ldexp.zig @@ -24,7 +24,7 @@ pub fn ldexp(x: anytype, n: i32) @TypeOf(x) { var exponent: i32 = @intCast(i32, (repr << 1) >> (mantissa_bits + 1)); if (exponent == 0) - exponent += (@as(i32, exponent_bits) + @boolToInt(T == f80)) - @clz(repr << 1); + exponent += (@as(i32, exponent_bits) + @intFromBool(T == f80)) - @clz(repr << 1); if (n >= 0) { if (n > max_biased_exponent - exponent) { @@ -53,11 +53,11 @@ pub fn ldexp(x: anytype, n: i32) @TypeOf(x) { var result = repr & mantissa_mask; if (T != f80) // Include integer bit - result |= @as(TBits, @boolToInt(exponent > 0)) << fractional_bits; + result |= @as(TBits, @intFromBool(exponent > 0)) << fractional_bits; result = @intCast(TBits, (result >> (shift - 1))); // Round result, including round-to-even for exact ties - result = ((result + 1) >> 1) & ~@as(TBits, @boolToInt(exact_tie)); + result = ((result + 1) >> 1) & ~@as(TBits, @intFromBool(exact_tie)); return @bitCast(T, result | sign_bit); } diff --git a/lib/std/math/log.zig b/lib/std/math/log.zig index ad2763fa54..c1a0f5c8e4 100644 --- a/lib/std/math/log.zig +++ b/lib/std/math/log.zig @@ -30,7 +30,7 @@ pub fn log(comptime T: type, base: T, x: T) T { // TODO implement integer log without using float math .Int => |IntType| switch (IntType.signedness) { .signed => @compileError("log not implemented for signed integers"), - .unsigned => return @floatToInt(T, @floor(@log(@intToFloat(f64, x)) / @log(float_base))), + .unsigned => return @intFromFloat(T, @floor(@log(@floatFromInt(f64, x)) / @log(float_base))), }, .Float => { diff --git a/lib/std/math/log10.zig b/lib/std/math/log10.zig index 6b5758763c..44e5a88445 100644 --- a/lib/std/math/log10.zig +++ b/lib/std/math/log10.zig @@ -134,7 +134,7 @@ inline fn less_than_5(x: u32) u32 { } fn oldlog10(x: anytype) u8 { - return @floatToInt(u8, @log10(@intToFloat(f64, x))); + return @intFromFloat(u8, @log10(@floatFromInt(f64, x))); } test "oldlog10 doesn't work" { diff --git a/lib/std/math/log1p.zig b/lib/std/math/log1p.zig index e186b2795a..ad67955a8d 100644 --- a/lib/std/math/log1p.zig +++ b/lib/std/math/log1p.zig @@ -96,7 +96,7 @@ fn log1p_32(x: f32) f32 { const t2 = z * (Lg1 + w * Lg3); const R = t2 + t1; const hfsq = 0.5 * f * f; - const dk = @intToFloat(f32, k); + const dk = @floatFromInt(f32, k); return s * (hfsq + R) + (dk * ln2_lo + c) - hfsq + f + dk * ln2_hi; } @@ -176,7 +176,7 @@ fn log1p_64(x: f64) f64 { const t1 = w * (Lg2 + w * (Lg4 + w * Lg6)); const t2 = z * (Lg1 + w * (Lg3 + w * (Lg5 + w * Lg7))); const R = t2 + t1; - const dk = @intToFloat(f64, k); + const dk = @floatFromInt(f64, k); return s * (hfsq + R) + (dk * ln2_lo + c) - hfsq + f + dk * ln2_hi; } diff --git a/lib/std/math/pow.zig b/lib/std/math/pow.zig index 9cedf50e13..7643e143e3 100644 --- a/lib/std/math/pow.zig +++ b/lib/std/math/pow.zig @@ -144,7 +144,7 @@ pub fn pow(comptime T: type, x: T, y: T) T { var xe = r2.exponent; var x1 = r2.significand; - var i = @floatToInt(std.meta.Int(.signed, @typeInfo(T).Float.bits), yi); + var i = @intFromFloat(std.meta.Int(.signed, @typeInfo(T).Float.bits), yi); while (i != 0) : (i >>= 1) { const overflow_shift = math.floatExponentBits(T) + 1; if (xe < -(1 << overflow_shift) or (1 << overflow_shift) < xe) { @@ -179,7 +179,7 @@ pub fn pow(comptime T: type, x: T, y: T) T { fn isOddInteger(x: f64) bool { const r = math.modf(x); - return r.fpart == 0.0 and @floatToInt(i64, r.ipart) & 1 == 1; + return r.fpart == 0.0 and @intFromFloat(i64, r.ipart) & 1 == 1; } test "math.pow" { diff --git a/lib/std/mem.zig b/lib/std/mem.zig index b320f579c6..bbeecdda23 100644 --- a/lib/std/mem.zig +++ b/lib/std/mem.zig @@ -73,7 +73,7 @@ pub fn ValidationAllocator(comptime T: type) type { const underlying = self.getUnderlyingAllocatorPtr(); const result = underlying.rawAlloc(n, log2_ptr_align, ret_addr) orelse return null; - assert(mem.isAlignedLog2(@ptrToInt(result), log2_ptr_align)); + assert(mem.isAlignedLog2(@intFromPtr(result), log2_ptr_align)); return result; } @@ -185,7 +185,7 @@ test "Allocator.resize" { var values = try testing.allocator.alloc(T, 100); defer testing.allocator.free(values); - for (values, 0..) |*v, i| v.* = @intToFloat(T, i); + for (values, 0..) |*v, i| v.* = @floatFromInt(T, i); if (!testing.allocator.resize(values, values.len + 10)) return error.OutOfMemory; values = values.ptr[0 .. values.len + 10]; try testing.expect(values.len == 110); @@ -233,7 +233,7 @@ pub fn zeroes(comptime T: type) T { return @as(T, 0); }, .Enum, .EnumLiteral => { - return @intToEnum(T, 0); + return @enumFromInt(T, 0); }, .Void => { return {}; @@ -1374,7 +1374,7 @@ pub fn readVarPackedInt( const value = if (read_size == 1) b: { break :b @truncate(uN, read_bytes[0] >> bit_shift); } else b: { - const i: u1 = @boolToInt(endian == .Big); + const i: u1 = @intFromBool(endian == .Big); const head = @truncate(uN, read_bytes[i] >> bit_shift); const tail_shift = @intCast(Log2N, @as(u4, 8) - bit_shift); const tail = @truncate(uN, read_bytes[1 - i]); @@ -3778,7 +3778,7 @@ pub fn alignPointerOffset(ptr: anytype, align_to: usize) ?usize { return 0; // Calculate the aligned base address with an eye out for overflow. - const addr = @ptrToInt(ptr); + const addr = @intFromPtr(ptr); var ov = @addWithOverflow(addr, align_to - 1); if (ov[1] != 0) return null; ov[0] &= ~@as(usize, align_to - 1); @@ -3800,16 +3800,16 @@ pub fn alignPointerOffset(ptr: anytype, align_to: usize) ?usize { pub fn alignPointer(ptr: anytype, align_to: usize) ?@TypeOf(ptr) { const adjust_off = alignPointerOffset(ptr, align_to) orelse return null; const T = @TypeOf(ptr); - // Avoid the use of intToPtr to avoid losing the pointer provenance info. + // Avoid the use of ptrFromInt to avoid losing the pointer provenance info. return @alignCast(@typeInfo(T).Pointer.alignment, ptr + adjust_off); } test "alignPointer" { const S = struct { fn checkAlign(comptime T: type, base: usize, align_to: usize, expected: usize) !void { - var ptr = @intToPtr(T, base); + var ptr = @ptrFromInt(T, base); var aligned = alignPointer(ptr, align_to); - try testing.expectEqual(expected, @ptrToInt(aligned)); + try testing.expectEqual(expected, @intFromPtr(aligned)); } }; @@ -4236,8 +4236,8 @@ pub fn doNotOptimizeAway(val: anytype) void { const t = @typeInfo(@TypeOf(val)); switch (t) { .Void, .Null, .ComptimeInt, .ComptimeFloat => return, - .Enum => doNotOptimizeAway(@enumToInt(val)), - .Bool => doNotOptimizeAway(@boolToInt(val)), + .Enum => doNotOptimizeAway(@intFromEnum(val)), + .Bool => doNotOptimizeAway(@intFromBool(val)), .Int => { const bits = t.Int.bits; if (bits <= max_gp_register_bits and builtin.zig_backend != .stage2_c) { @@ -4425,7 +4425,7 @@ fn AlignedSlice(comptime AttributeSource: type, comptime new_alignment: usize) t /// Returns the largest slice in the given bytes that conforms to the new alignment, /// or `null` if the given bytes contain no conforming address. pub fn alignInBytes(bytes: []u8, comptime new_alignment: usize) ?[]align(new_alignment) u8 { - const begin_address = @ptrToInt(bytes.ptr); + const begin_address = @intFromPtr(bytes.ptr); const end_address = begin_address + bytes.len; const begin_address_aligned = mem.alignForward(usize, begin_address, new_alignment); diff --git a/lib/std/mem/Allocator.zig b/lib/std/mem/Allocator.zig index 4a1ff86721..301480f662 100644 --- a/lib/std/mem/Allocator.zig +++ b/lib/std/mem/Allocator.zig @@ -101,7 +101,7 @@ pub inline fn rawFree(self: Allocator, buf: []u8, log2_buf_align: u8, ret_addr: /// Returns a pointer to undefined memory. /// Call `destroy` with the result to free the memory. pub fn create(self: Allocator, comptime T: type) Error!*T { - if (@sizeOf(T) == 0) return @intToPtr(*T, math.maxInt(usize)); + if (@sizeOf(T) == 0) return @ptrFromInt(*T, math.maxInt(usize)); const slice = try self.allocAdvancedWithRetAddr(T, null, 1, @returnAddress()); return &slice[0]; } @@ -209,7 +209,7 @@ pub fn allocAdvancedWithRetAddr( if (n == 0) { const ptr = comptime std.mem.alignBackward(usize, math.maxInt(usize), a); - return @intToPtr([*]align(a) T, ptr)[0..0]; + return @ptrFromInt([*]align(a) T, ptr)[0..0]; } const byte_count = math.mul(usize, @sizeOf(T), n) catch return Error.OutOfMemory; @@ -268,13 +268,13 @@ pub fn reallocAdvanced( if (new_n == 0) { self.free(old_mem); const ptr = comptime std.mem.alignBackward(usize, math.maxInt(usize), Slice.alignment); - return @intToPtr([*]align(Slice.alignment) T, ptr)[0..0]; + return @ptrFromInt([*]align(Slice.alignment) T, ptr)[0..0]; } const old_byte_slice = mem.sliceAsBytes(old_mem); const byte_count = math.mul(usize, @sizeOf(T), new_n) catch return Error.OutOfMemory; // Note: can't set shrunk memory to undefined as memory shouldn't be modified on realloc failure - if (mem.isAligned(@ptrToInt(old_byte_slice.ptr), Slice.alignment)) { + if (mem.isAligned(@intFromPtr(old_byte_slice.ptr), Slice.alignment)) { if (self.rawResize(old_byte_slice, log2a(Slice.alignment), byte_count, return_address)) { return mem.bytesAsSlice(T, @alignCast(Slice.alignment, old_byte_slice.ptr[0..byte_count])); } diff --git a/lib/std/meta.zig b/lib/std/meta.zig index db415199ed..fedbd1a40d 100644 --- a/lib/std/meta.zig +++ b/lib/std/meta.zig @@ -453,7 +453,7 @@ pub fn fieldInfo(comptime T: type, comptime field: FieldEnum(T)) switch (@typeIn .Enum => Type.EnumField, else => @compileError("Expected struct, union, error set or enum type, found '" ++ @typeName(T) ++ "'"), } { - return fields(T)[@enumToInt(field)]; + return fields(T)[@intFromEnum(field)]; } test "std.meta.fieldInfo" { @@ -591,7 +591,7 @@ pub fn FieldEnum(comptime T: type) type { if (@typeInfo(T) == .Union) { if (@typeInfo(T).Union.tag_type) |tag_type| { for (std.enums.values(tag_type), 0..) |v, i| { - if (@enumToInt(v) != i) break; // enum values not consecutive + if (@intFromEnum(v) != i) break; // enum values not consecutive if (!std.mem.eql(u8, @tagName(v), field_infos[i].name)) break; // fields out of order } else { return tag_type; @@ -929,8 +929,8 @@ test "intToEnum with error return" { try testing.expect(intToEnum(E1, zero) catch unreachable == E1.A); try testing.expect(intToEnum(E2, one) catch unreachable == E2.B); try testing.expect(intToEnum(E3, zero) catch unreachable == E3.A); - try testing.expect(intToEnum(E3, 127) catch unreachable == @intToEnum(E3, 127)); - try testing.expect(intToEnum(E3, -128) catch unreachable == @intToEnum(E3, -128)); + try testing.expect(intToEnum(E3, 127) catch unreachable == @enumFromInt(E3, 127)); + try testing.expect(intToEnum(E3, -128) catch unreachable == @enumFromInt(E3, -128)); try testing.expectError(error.InvalidEnumTag, intToEnum(E1, one)); try testing.expectError(error.InvalidEnumTag, intToEnum(E3, 128)); try testing.expectError(error.InvalidEnumTag, intToEnum(E3, -129)); @@ -943,14 +943,14 @@ pub fn intToEnum(comptime EnumTag: type, tag_int: anytype) IntToEnumError!EnumTa if (!enum_info.is_exhaustive) { if (std.math.cast(enum_info.tag_type, tag_int)) |tag| { - return @intToEnum(EnumTag, tag); + return @enumFromInt(EnumTag, tag); } return error.InvalidEnumTag; } inline for (enum_info.fields) |f| { const this_tag_value = @field(EnumTag, f.name); - if (tag_int == @enumToInt(this_tag_value)) { + if (tag_int == @intFromEnum(this_tag_value)) { return this_tag_value; } } diff --git a/lib/std/meta/trailer_flags.zig b/lib/std/meta/trailer_flags.zig index a4d83dcbb3..cf37fc5adf 100644 --- a/lib/std/meta/trailer_flags.zig +++ b/lib/std/meta/trailer_flags.zig @@ -43,7 +43,7 @@ pub fn TrailerFlags(comptime Fields: type) type { pub const Self = @This(); pub fn has(self: Self, comptime field: FieldEnum) bool { - const field_index = @enumToInt(field); + const field_index = @intFromEnum(field); return (self.bits & (1 << field_index)) != 0; } @@ -54,7 +54,7 @@ pub fn TrailerFlags(comptime Fields: type) type { } pub fn setFlag(self: *Self, comptime field: FieldEnum) void { - const field_index = @enumToInt(field); + const field_index = @intFromEnum(field); self.bits |= 1 << field_index; } @@ -72,7 +72,7 @@ pub fn TrailerFlags(comptime Fields: type) type { pub fn setMany(self: Self, p: [*]align(@alignOf(Fields)) u8, fields: FieldValues) void { inline for (@typeInfo(Fields).Struct.fields, 0..) |field, i| { if (@field(fields, field.name)) |value| - self.set(p, @intToEnum(FieldEnum, i), value); + self.set(p, @enumFromInt(FieldEnum, i), value); } } @@ -103,7 +103,7 @@ pub fn TrailerFlags(comptime Fields: type) type { var off: usize = 0; inline for (@typeInfo(Fields).Struct.fields, 0..) |field_info, i| { const active = (self.bits & (1 << i)) != 0; - if (i == @enumToInt(field)) { + if (i == @intFromEnum(field)) { assert(active); return mem.alignForward(usize, off, @alignOf(field_info.type)); } else if (active) { @@ -114,7 +114,7 @@ pub fn TrailerFlags(comptime Fields: type) type { } pub fn Field(comptime field: FieldEnum) type { - return @typeInfo(Fields).Struct.fields[@enumToInt(field)].type; + return @typeInfo(Fields).Struct.fields[@intFromEnum(field)].type; } pub fn sizeInBytes(self: Self) usize { diff --git a/lib/std/multi_array_list.zig b/lib/std/multi_array_list.zig index e9011c3c63..26ba6cc919 100644 --- a/lib/std/multi_array_list.zig +++ b/lib/std/multi_array_list.zig @@ -64,7 +64,7 @@ pub fn MultiArrayList(comptime T: type) type { /// and then get the field arrays from the slice. pub const Slice = struct { /// This array is indexed by the field index which can be obtained - /// by using @enumToInt() on the Field enum + /// by using @intFromEnum() on the Field enum ptrs: [fields.len][*]u8, len: usize, capacity: usize, @@ -74,7 +74,7 @@ pub fn MultiArrayList(comptime T: type) type { if (self.capacity == 0) { return &[_]F{}; } - const byte_ptr = self.ptrs[@enumToInt(field)]; + const byte_ptr = self.ptrs[@intFromEnum(field)]; const casted_ptr: [*]F = if (@sizeOf(F) == 0) undefined else @@ -89,14 +89,14 @@ pub fn MultiArrayList(comptime T: type) type { else => unreachable, }; inline for (fields, 0..) |field_info, i| { - self.items(@intToEnum(Field, i))[index] = @field(e, field_info.name); + self.items(@enumFromInt(Field, i))[index] = @field(e, field_info.name); } } pub fn get(self: Slice, index: usize) T { var result: Elem = undefined; inline for (fields, 0..) |field_info, i| { - @field(result, field_info.name) = self.items(@intToEnum(Field, i))[index]; + @field(result, field_info.name) = self.items(@enumFromInt(Field, i))[index]; } return switch (@typeInfo(T)) { .Struct => result, @@ -294,7 +294,7 @@ pub fn MultiArrayList(comptime T: type) type { }; const slices = self.slice(); inline for (fields, 0..) |field_info, field_index| { - const field_slice = slices.items(@intToEnum(Field, field_index)); + const field_slice = slices.items(@enumFromInt(Field, field_index)); var i: usize = self.len - 1; while (i > index) : (i -= 1) { field_slice[i] = field_slice[i - 1]; @@ -309,7 +309,7 @@ pub fn MultiArrayList(comptime T: type) type { pub fn swapRemove(self: *Self, index: usize) void { const slices = self.slice(); inline for (fields, 0..) |_, i| { - const field_slice = slices.items(@intToEnum(Field, i)); + const field_slice = slices.items(@enumFromInt(Field, i)); field_slice[index] = field_slice[self.len - 1]; field_slice[self.len - 1] = undefined; } @@ -321,7 +321,7 @@ pub fn MultiArrayList(comptime T: type) type { pub fn orderedRemove(self: *Self, index: usize) void { const slices = self.slice(); inline for (fields, 0..) |_, field_index| { - const field_slice = slices.items(@intToEnum(Field, field_index)); + const field_slice = slices.items(@enumFromInt(Field, field_index)); var i = index; while (i < self.len - 1) : (i += 1) { field_slice[i] = field_slice[i + 1]; @@ -358,7 +358,7 @@ pub fn MultiArrayList(comptime T: type) type { const self_slice = self.slice(); inline for (fields, 0..) |field_info, i| { if (@sizeOf(field_info.type) != 0) { - const field = @intToEnum(Field, i); + const field = @enumFromInt(Field, i); const dest_slice = self_slice.items(field)[new_len..]; // We use memset here for more efficient codegen in safety-checked, // valgrind-enabled builds. Otherwise the valgrind client request @@ -379,7 +379,7 @@ pub fn MultiArrayList(comptime T: type) type { const other_slice = other.slice(); inline for (fields, 0..) |field_info, i| { if (@sizeOf(field_info.type) != 0) { - const field = @intToEnum(Field, i); + const field = @enumFromInt(Field, i); @memcpy(other_slice.items(field), self_slice.items(field)); } } @@ -440,7 +440,7 @@ pub fn MultiArrayList(comptime T: type) type { const other_slice = other.slice(); inline for (fields, 0..) |field_info, i| { if (@sizeOf(field_info.type) != 0) { - const field = @intToEnum(Field, i); + const field = @enumFromInt(Field, i); @memcpy(other_slice.items(field), self_slice.items(field)); } } @@ -459,7 +459,7 @@ pub fn MultiArrayList(comptime T: type) type { const result_slice = result.slice(); inline for (fields, 0..) |field_info, i| { if (@sizeOf(field_info.type) != 0) { - const field = @intToEnum(Field, i); + const field = @enumFromInt(Field, i); @memcpy(result_slice.items(field), self_slice.items(field)); } } @@ -476,7 +476,7 @@ pub fn MultiArrayList(comptime T: type) type { pub fn swap(sc: @This(), a_index: usize, b_index: usize) void { inline for (fields, 0..) |field_info, i| { if (@sizeOf(field_info.type) != 0) { - const field = @intToEnum(Field, i); + const field = @enumFromInt(Field, i); const ptr = sc.slice.items(field); mem.swap(field_info.type, &ptr[a_index], &ptr[b_index]); } diff --git a/lib/std/net.zig b/lib/std/net.zig index dfd6fe4a9e..0f8ecbf21e 100644 --- a/lib/std/net.zig +++ b/lib/std/net.zig @@ -804,8 +804,8 @@ pub fn getAddressList(allocator: mem.Allocator, name: []const u8, port: u16) Get var first = true; while (true) { const rc = ws2_32.getaddrinfo(name_c.ptr, port_c.ptr, &hints, &res); - switch (@intToEnum(os.windows.ws2_32.WinsockError, @intCast(u16, rc))) { - @intToEnum(os.windows.ws2_32.WinsockError, 0) => break, + switch (@enumFromInt(os.windows.ws2_32.WinsockError, @intCast(u16, rc))) { + @enumFromInt(os.windows.ws2_32.WinsockError, 0) => break, .WSATRY_AGAIN => return error.TemporaryNameServerFailure, .WSANO_RECOVERY => return error.NameServerFailure, .WSAEAFNOSUPPORT => return error.AddressFamilyNotSupported, @@ -874,7 +874,7 @@ pub fn getAddressList(allocator: mem.Allocator, name: []const u8, port: u16) Get }; var res: ?*os.addrinfo = null; switch (sys.getaddrinfo(name_c.ptr, port_c.ptr, &hints, &res)) { - @intToEnum(sys.EAI, 0) => {}, + @enumFromInt(sys.EAI, 0) => {}, .ADDRFAMILY => return error.HostLacksNetworkAddresses, .AGAIN => return error.TemporaryNameServerFailure, .BADFLAGS => unreachable, // Invalid hints @@ -1688,19 +1688,19 @@ fn dnsParse( if (qdcount + ancount > 64) return error.InvalidDnsPacket; while (qdcount != 0) { qdcount -= 1; - while (@ptrToInt(p) - @ptrToInt(r.ptr) < r.len and p[0] -% 1 < 127) p += 1; - if (p[0] > 193 or (p[0] == 193 and p[1] > 254) or @ptrToInt(p) > @ptrToInt(r.ptr) + r.len - 6) + while (@intFromPtr(p) - @intFromPtr(r.ptr) < r.len and p[0] -% 1 < 127) p += 1; + if (p[0] > 193 or (p[0] == 193 and p[1] > 254) or @intFromPtr(p) > @intFromPtr(r.ptr) + r.len - 6) return error.InvalidDnsPacket; - p += @as(usize, 5) + @boolToInt(p[0] != 0); + p += @as(usize, 5) + @intFromBool(p[0] != 0); } while (ancount != 0) { ancount -= 1; - while (@ptrToInt(p) - @ptrToInt(r.ptr) < r.len and p[0] -% 1 < 127) p += 1; - if (p[0] > 193 or (p[0] == 193 and p[1] > 254) or @ptrToInt(p) > @ptrToInt(r.ptr) + r.len - 6) + while (@intFromPtr(p) - @intFromPtr(r.ptr) < r.len and p[0] -% 1 < 127) p += 1; + if (p[0] > 193 or (p[0] == 193 and p[1] > 254) or @intFromPtr(p) > @intFromPtr(r.ptr) + r.len - 6) return error.InvalidDnsPacket; - p += @as(usize, 1) + @boolToInt(p[0] != 0); + p += @as(usize, 1) + @intFromBool(p[0] != 0); const len = p[8] * @as(usize, 256) + p[9]; - if (@ptrToInt(p) + len > @ptrToInt(r.ptr) + r.len) return error.InvalidDnsPacket; + if (@intFromPtr(p) + len > @intFromPtr(r.ptr) + r.len) return error.InvalidDnsPacket; try callback(ctx, p[1], p[10..][0..len], r); p += 10 + len; } diff --git a/lib/std/os.zig b/lib/std/os.zig index 802bb1d8df..2bfea02c21 100644 --- a/lib/std/os.zig +++ b/lib/std/os.zig @@ -608,7 +608,7 @@ pub fn abort() noreturn { sigprocmask(SIG.UNBLOCK, &sigabrtmask, null); // Beyond this point should be unreachable. - @intToPtr(*allowzero volatile u8, 0).* = 0; + @ptrFromInt(*allowzero volatile u8, 0).* = 0; raise(SIG.KILL) catch {}; exit(127); // Pid 1 might not be signalled in some containers. } @@ -678,10 +678,10 @@ pub fn exit(status: u8) noreturn { // exit() is only available if exitBootServices() has not been called yet. // This call to exit should not fail, so we don't care about its return value. if (uefi.system_table.boot_services) |bs| { - _ = bs.exit(uefi.handle, @intToEnum(uefi.Status, status), 0, null); + _ = bs.exit(uefi.handle, @enumFromInt(uefi.Status, status), 0, null); } // If we can't exit, reboot the system instead. - uefi.system_table.runtime_services.resetSystem(uefi.tables.ResetType.ResetCold, @intToEnum(uefi.Status, status), 0, null); + uefi.system_table.runtime_services.resetSystem(uefi.tables.ResetType.ResetCold, @enumFromInt(uefi.Status, status), 0, null); } system.exit(status); } @@ -2045,7 +2045,7 @@ pub fn getcwd(out_buffer: []u8) GetCwdError![]u8 { const err = if (builtin.link_libc) blk: { const c_err = if (std.c.getcwd(out_buffer.ptr, out_buffer.len)) |_| 0 else std.c._errno().*; - break :blk @intToEnum(E, c_err); + break :blk @enumFromInt(E, c_err); } else blk: { break :blk errno(system.getcwd(out_buffer.ptr, out_buffer.len)); }; @@ -3249,7 +3249,7 @@ pub fn isatty(handle: fd_t) bool { while (true) { var wsz: linux.winsize = undefined; const fd = @bitCast(usize, @as(isize, handle)); - const rc = linux.syscall3(.ioctl, fd, linux.T.IOCGWINSZ, @ptrToInt(&wsz)); + const rc = linux.syscall3(.ioctl, fd, linux.T.IOCGWINSZ, @intFromPtr(&wsz)); switch (linux.getErrno(rc)) { .SUCCESS => return true, .INTR => continue, @@ -4016,7 +4016,7 @@ pub fn getsockoptError(sockfd: fd_t) ConnectError!void { const rc = system.getsockopt(sockfd, SOL.SOCKET, SO.ERROR, @ptrCast([*]u8, &err_code), &size); assert(size == 4); switch (errno(rc)) { - .SUCCESS => switch (@intToEnum(E, err_code)) { + .SUCCESS => switch (@enumFromInt(E, err_code)) { .SUCCESS => return, .ACCES => return error.PermissionDenied, .PERM => return error.PermissionDenied, @@ -4425,10 +4425,10 @@ pub fn mmap( const rc = mmap_sym(ptr, length, prot, flags, fd, ioffset); const err = if (builtin.link_libc) blk: { if (rc != std.c.MAP.FAILED) return @ptrCast([*]align(mem.page_size) u8, @alignCast(mem.page_size, rc))[0..length]; - break :blk @intToEnum(E, system._errno().*); + break :blk @enumFromInt(E, system._errno().*); } else blk: { const err = errno(rc); - if (err == .SUCCESS) return @intToPtr([*]align(mem.page_size) u8, rc)[0..length]; + if (err == .SUCCESS) return @ptrFromInt([*]align(mem.page_size) u8, rc)[0..length]; break :blk err; }; switch (err) { @@ -5164,7 +5164,7 @@ pub fn realpathZ(pathname: [*:0]const u8, out_buffer: *[MAX_PATH_BYTES]u8) RealP return getFdPath(fd, out_buffer); } - const result_path = std.c.realpath(pathname, out_buffer) orelse switch (@intToEnum(E, std.c._errno().*)) { + const result_path = std.c.realpath(pathname, out_buffer) orelse switch (@enumFromInt(E, std.c._errno().*)) { .SUCCESS => unreachable, .INVAL => unreachable, .BADF => unreachable, @@ -5275,7 +5275,7 @@ pub fn getFdPath(fd: fd_t, out_buffer: *[MAX_PATH_BYTES]u8) RealPathError![]u8 { if (comptime builtin.os.version_range.semver.max.order(.{ .major = 13, .minor = 0, .patch = 0 }) == .gt) { var kfile: system.kinfo_file = undefined; kfile.structsize = system.KINFO_FILE_SIZE; - switch (errno(system.fcntl(fd, system.F.KINFO, @ptrToInt(&kfile)))) { + switch (errno(system.fcntl(fd, system.F.KINFO, @intFromPtr(&kfile)))) { .SUCCESS => {}, .BADF => return error.FileNotFound, else => |err| return unexpectedErrno(err), @@ -5400,21 +5400,21 @@ pub fn dl_iterate_phdr( switch (system.dl_iterate_phdr(struct { fn callbackC(info: *dl_phdr_info, size: usize, data: ?*anyopaque) callconv(.C) c_int { const context_ptr = @ptrCast(*const Context, @alignCast(@alignOf(*const Context), data)); - callback(info, size, context_ptr.*) catch |err| return @errorToInt(err); + callback(info, size, context_ptr.*) catch |err| return @intFromError(err); return 0; } - }.callbackC, @intToPtr(?*anyopaque, @ptrToInt(&context)))) { + }.callbackC, @ptrFromInt(?*anyopaque, @intFromPtr(&context)))) { 0 => return, - else => |err| return @errSetCast(Error, @intToError(@intCast(u16, err))), // TODO don't hardcode u16 + else => |err| return @errSetCast(Error, @errorFromInt(@intCast(u16, err))), // TODO don't hardcode u16 } } const elf_base = std.process.getBaseAddress(); - const ehdr = @intToPtr(*elf.Ehdr, elf_base); + const ehdr = @ptrFromInt(*elf.Ehdr, elf_base); // Make sure the base address points to an ELF image. assert(mem.eql(u8, ehdr.e_ident[0..4], elf.MAGIC)); const n_phdr = ehdr.e_phnum; - const phdrs = (@intToPtr([*]elf.Phdr, elf_base + ehdr.e_phoff))[0..n_phdr]; + const phdrs = (@ptrFromInt([*]elf.Phdr, elf_base + ehdr.e_phoff))[0..n_phdr]; var it = dl.linkmap_iterator(phdrs) catch unreachable; @@ -5425,7 +5425,7 @@ pub fn dl_iterate_phdr( // is non-zero. const base_address = for (phdrs) |*phdr| { if (phdr.p_type == elf.PT_PHDR) { - break @ptrToInt(phdrs.ptr) - phdr.p_vaddr; + break @intFromPtr(phdrs.ptr) - phdr.p_vaddr; // We could try computing the difference between _DYNAMIC and // the p_vaddr of the PT_DYNAMIC section, but using the phdr is // good enough (Is it?). @@ -5448,12 +5448,12 @@ pub fn dl_iterate_phdr( var dlpi_phnum: u16 = undefined; if (entry.l_addr != 0) { - const elf_header = @intToPtr(*elf.Ehdr, entry.l_addr); - dlpi_phdr = @intToPtr([*]elf.Phdr, entry.l_addr + elf_header.e_phoff); + const elf_header = @ptrFromInt(*elf.Ehdr, entry.l_addr); + dlpi_phdr = @ptrFromInt([*]elf.Phdr, entry.l_addr + elf_header.e_phoff); dlpi_phnum = elf_header.e_phnum; } else { // This is the running ELF image - dlpi_phdr = @intToPtr([*]elf.Phdr, elf_base + ehdr.e_phoff); + dlpi_phdr = @ptrFromInt([*]elf.Phdr, elf_base + ehdr.e_phoff); dlpi_phnum = ehdr.e_phnum; } @@ -5626,7 +5626,7 @@ pub const UnexpectedError = error{ /// and you get an unexpected error. pub fn unexpectedErrno(err: E) UnexpectedError { if (unexpected_error_tracing) { - std.debug.print("unexpected errno: {d}\n", .{@enumToInt(err)}); + std.debug.print("unexpected errno: {d}\n", .{@intFromEnum(err)}); std.debug.dumpCurrentStackTrace(null); } return error.Unexpected; @@ -5773,7 +5773,7 @@ pub fn res_mkquery( var name = dname; if (mem.endsWith(u8, name, ".")) name.len -= 1; assert(name.len <= 253); - const n = 17 + name.len + @boolToInt(name.len != 0); + const n = 17 + name.len + @intFromBool(name.len != 0); // Construct query template - ID will be filled later var q: [280]u8 = undefined; @@ -6673,7 +6673,7 @@ pub fn dn_expand( if ((p[0] & 0xc0) != 0) { if (p + 1 == end) return error.InvalidDnsPacket; var j = ((p[0] & @as(usize, 0x3f)) << 8) | p[1]; - if (len == std.math.maxInt(usize)) len = @ptrToInt(p) + 2 - @ptrToInt(comp_dn.ptr); + if (len == std.math.maxInt(usize)) len = @intFromPtr(p) + 2 - @intFromPtr(comp_dn.ptr); if (j >= msg.len) return error.InvalidDnsPacket; p = msg.ptr + j; } else if (p[0] != 0) { @@ -6683,7 +6683,7 @@ pub fn dn_expand( } var j = p[0]; p += 1; - if (j >= @ptrToInt(end) - @ptrToInt(p) or j >= @ptrToInt(dend) - @ptrToInt(dest)) { + if (j >= @intFromPtr(end) - @intFromPtr(p) or j >= @intFromPtr(dend) - @intFromPtr(dest)) { return error.InvalidDnsPacket; } while (j != 0) { @@ -6694,7 +6694,7 @@ pub fn dn_expand( } } else { dest[0] = 0; - if (len == std.math.maxInt(usize)) len = @ptrToInt(p) + 1 - @ptrToInt(comp_dn.ptr); + if (len == std.math.maxInt(usize)) len = @intFromPtr(p) + 1 - @intFromPtr(comp_dn.ptr); return len; } } @@ -6908,7 +6908,7 @@ pub const IoCtl_SIOCGIFINDEX_Error = error{ pub fn ioctl_SIOCGIFINDEX(fd: fd_t, ifr: *ifreq) IoCtl_SIOCGIFINDEX_Error!void { while (true) { - switch (errno(system.ioctl(fd, SIOCGIFINDEX, @ptrToInt(ifr)))) { + switch (errno(system.ioctl(fd, SIOCGIFINDEX, @intFromPtr(ifr)))) { .SUCCESS => return, .INVAL => unreachable, // Bad parameters. .NOTTY => unreachable, @@ -7032,7 +7032,7 @@ pub fn prctl(option: PR, args: anytype) PrctlError!u31 { inline while (i < args.len) : (i += 1) buf[i] = args[i]; } - const rc = system.prctl(@enumToInt(option), buf[0], buf[1], buf[2], buf[3]); + const rc = system.prctl(@intFromEnum(option), buf[0], buf[1], buf[2], buf[3]); switch (errno(rc)) { .SUCCESS => return @intCast(u31, rc), .ACCES => return error.AccessDenied, @@ -7318,7 +7318,7 @@ pub fn ptrace(request: u32, pid: pid_t, addr: usize, signal: usize) PtraceError! .macos, .ios, .tvos, .watchos => switch (errno(darwin.ptrace( math.cast(i32, request) orelse return error.Overflow, pid, - @intToPtr(?[*]u8, addr), + @ptrFromInt(?[*]u8, addr), math.cast(i32, signal) orelse return error.Overflow, ))) { .SUCCESS => {}, diff --git a/lib/std/os/linux.zig b/lib/std/os/linux.zig index e4d6790505..b7ec29383b 100644 --- a/lib/std/os/linux.zig +++ b/lib/std/os/linux.zig @@ -206,7 +206,7 @@ fn splitValue64(val: i64) [2]u32 { pub fn getErrno(r: usize) E { const signed_r = @bitCast(isize, r); const int = if (signed_r > -4096 and signed_r < 0) -signed_r else 0; - return @intToEnum(E, int); + return @enumFromInt(E, int); } pub fn dup(old: i32) usize { @@ -234,7 +234,7 @@ pub fn dup3(old: i32, new: i32, flags: u32) usize { } pub fn chdir(path: [*:0]const u8) usize { - return syscall1(.chdir, @ptrToInt(path)); + return syscall1(.chdir, @intFromPtr(path)); } pub fn fchdir(fd: fd_t) usize { @@ -242,11 +242,11 @@ pub fn fchdir(fd: fd_t) usize { } pub fn chroot(path: [*:0]const u8) usize { - return syscall1(.chroot, @ptrToInt(path)); + return syscall1(.chroot, @intFromPtr(path)); } pub fn execve(path: [*:0]const u8, argv: [*:null]const ?[*:0]const u8, envp: [*:null]const ?[*:0]const u8) usize { - return syscall3(.execve, @ptrToInt(path), @ptrToInt(argv), @ptrToInt(envp)); + return syscall3(.execve, @intFromPtr(path), @intFromPtr(argv), @intFromPtr(envp)); } pub fn fork() usize { @@ -273,7 +273,7 @@ pub fn futimens(fd: i32, times: *const [2]timespec) usize { } pub fn utimensat(dirfd: i32, path: ?[*:0]const u8, times: *const [2]timespec, flags: u32) usize { - return syscall4(.utimensat, @bitCast(usize, @as(isize, dirfd)), @ptrToInt(path), @ptrToInt(times), flags); + return syscall4(.utimensat, @bitCast(usize, @as(isize, dirfd)), @intFromPtr(path), @intFromPtr(times), flags); } pub fn fallocate(fd: i32, mode: i32, offset: i64, length: i64) usize { @@ -301,22 +301,22 @@ pub fn fallocate(fd: i32, mode: i32, offset: i64, length: i64) usize { } pub fn futex_wait(uaddr: *const i32, futex_op: u32, val: i32, timeout: ?*const timespec) usize { - return syscall4(.futex, @ptrToInt(uaddr), futex_op, @bitCast(u32, val), @ptrToInt(timeout)); + return syscall4(.futex, @intFromPtr(uaddr), futex_op, @bitCast(u32, val), @intFromPtr(timeout)); } pub fn futex_wake(uaddr: *const i32, futex_op: u32, val: i32) usize { - return syscall3(.futex, @ptrToInt(uaddr), futex_op, @bitCast(u32, val)); + return syscall3(.futex, @intFromPtr(uaddr), futex_op, @bitCast(u32, val)); } pub fn getcwd(buf: [*]u8, size: usize) usize { - return syscall2(.getcwd, @ptrToInt(buf), size); + return syscall2(.getcwd, @intFromPtr(buf), size); } pub fn getdents(fd: i32, dirp: [*]u8, len: usize) usize { return syscall3( .getdents, @bitCast(usize, @as(isize, fd)), - @ptrToInt(dirp), + @intFromPtr(dirp), @min(len, maxInt(c_int)), ); } @@ -325,7 +325,7 @@ pub fn getdents64(fd: i32, dirp: [*]u8, len: usize) usize { return syscall3( .getdents64, @bitCast(usize, @as(isize, fd)), - @ptrToInt(dirp), + @intFromPtr(dirp), @min(len, maxInt(c_int)), ); } @@ -335,7 +335,7 @@ pub fn inotify_init1(flags: u32) usize { } pub fn inotify_add_watch(fd: i32, pathname: [*:0]const u8, mask: u32) usize { - return syscall3(.inotify_add_watch, @bitCast(usize, @as(isize, fd)), @ptrToInt(pathname), mask); + return syscall3(.inotify_add_watch, @bitCast(usize, @as(isize, fd)), @intFromPtr(pathname), mask); } pub fn inotify_rm_watch(fd: i32, wd: i32) usize { @@ -344,61 +344,61 @@ pub fn inotify_rm_watch(fd: i32, wd: i32) usize { pub fn readlink(noalias path: [*:0]const u8, noalias buf_ptr: [*]u8, buf_len: usize) usize { if (@hasField(SYS, "readlink")) { - return syscall3(.readlink, @ptrToInt(path), @ptrToInt(buf_ptr), buf_len); + return syscall3(.readlink, @intFromPtr(path), @intFromPtr(buf_ptr), buf_len); } else { - return syscall4(.readlinkat, @bitCast(usize, @as(isize, AT.FDCWD)), @ptrToInt(path), @ptrToInt(buf_ptr), buf_len); + return syscall4(.readlinkat, @bitCast(usize, @as(isize, AT.FDCWD)), @intFromPtr(path), @intFromPtr(buf_ptr), buf_len); } } pub fn readlinkat(dirfd: i32, noalias path: [*:0]const u8, noalias buf_ptr: [*]u8, buf_len: usize) usize { - return syscall4(.readlinkat, @bitCast(usize, @as(isize, dirfd)), @ptrToInt(path), @ptrToInt(buf_ptr), buf_len); + return syscall4(.readlinkat, @bitCast(usize, @as(isize, dirfd)), @intFromPtr(path), @intFromPtr(buf_ptr), buf_len); } pub fn mkdir(path: [*:0]const u8, mode: u32) usize { if (@hasField(SYS, "mkdir")) { - return syscall2(.mkdir, @ptrToInt(path), mode); + return syscall2(.mkdir, @intFromPtr(path), mode); } else { - return syscall3(.mkdirat, @bitCast(usize, @as(isize, AT.FDCWD)), @ptrToInt(path), mode); + return syscall3(.mkdirat, @bitCast(usize, @as(isize, AT.FDCWD)), @intFromPtr(path), mode); } } pub fn mkdirat(dirfd: i32, path: [*:0]const u8, mode: u32) usize { - return syscall3(.mkdirat, @bitCast(usize, @as(isize, dirfd)), @ptrToInt(path), mode); + return syscall3(.mkdirat, @bitCast(usize, @as(isize, dirfd)), @intFromPtr(path), mode); } pub fn mknod(path: [*:0]const u8, mode: u32, dev: u32) usize { if (@hasField(SYS, "mknod")) { - return syscall3(.mknod, @ptrToInt(path), mode, dev); + return syscall3(.mknod, @intFromPtr(path), mode, dev); } else { return mknodat(AT.FDCWD, path, mode, dev); } } pub fn mknodat(dirfd: i32, path: [*:0]const u8, mode: u32, dev: u32) usize { - return syscall4(.mknodat, @bitCast(usize, @as(isize, dirfd)), @ptrToInt(path), mode, dev); + return syscall4(.mknodat, @bitCast(usize, @as(isize, dirfd)), @intFromPtr(path), mode, dev); } pub fn mount(special: [*:0]const u8, dir: [*:0]const u8, fstype: ?[*:0]const u8, flags: u32, data: usize) usize { - return syscall5(.mount, @ptrToInt(special), @ptrToInt(dir), @ptrToInt(fstype), flags, data); + return syscall5(.mount, @intFromPtr(special), @intFromPtr(dir), @intFromPtr(fstype), flags, data); } pub fn umount(special: [*:0]const u8) usize { - return syscall2(.umount2, @ptrToInt(special), 0); + return syscall2(.umount2, @intFromPtr(special), 0); } pub fn umount2(special: [*:0]const u8, flags: u32) usize { - return syscall2(.umount2, @ptrToInt(special), flags); + return syscall2(.umount2, @intFromPtr(special), flags); } pub fn mmap(address: ?[*]u8, length: usize, prot: usize, flags: u32, fd: i32, offset: i64) usize { if (@hasField(SYS, "mmap2")) { // Make sure the offset is also specified in multiples of page size if ((offset & (MMAP2_UNIT - 1)) != 0) - return @bitCast(usize, -@as(isize, @enumToInt(E.INVAL))); + return @bitCast(usize, -@as(isize, @intFromEnum(E.INVAL))); return syscall6( .mmap2, - @ptrToInt(address), + @intFromPtr(address), length, prot, flags, @@ -408,7 +408,7 @@ pub fn mmap(address: ?[*]u8, length: usize, prot: usize, flags: u32, fd: i32, of } else { return syscall6( .mmap, - @ptrToInt(address), + @intFromPtr(address), length, prot, flags, @@ -419,7 +419,7 @@ pub fn mmap(address: ?[*]u8, length: usize, prot: usize, flags: u32, fd: i32, of } pub fn mprotect(address: [*]const u8, length: usize, protection: usize) usize { - return syscall3(.mprotect, @ptrToInt(address), length, protection); + return syscall3(.mprotect, @intFromPtr(address), length, protection); } pub const MSF = struct { @@ -429,22 +429,22 @@ pub const MSF = struct { }; pub fn msync(address: [*]const u8, length: usize, flags: i32) usize { - return syscall3(.msync, @ptrToInt(address), length, @bitCast(u32, flags)); + return syscall3(.msync, @intFromPtr(address), length, @bitCast(u32, flags)); } pub fn munmap(address: [*]const u8, length: usize) usize { - return syscall2(.munmap, @ptrToInt(address), length); + return syscall2(.munmap, @intFromPtr(address), length); } pub fn poll(fds: [*]pollfd, n: nfds_t, timeout: i32) usize { if (@hasField(SYS, "poll")) { - return syscall3(.poll, @ptrToInt(fds), n, @bitCast(u32, timeout)); + return syscall3(.poll, @intFromPtr(fds), n, @bitCast(u32, timeout)); } else { return syscall5( .ppoll, - @ptrToInt(fds), + @intFromPtr(fds), n, - @ptrToInt(if (timeout >= 0) + @intFromPtr(if (timeout >= 0) ×pec{ .tv_sec = @divTrunc(timeout, 1000), .tv_nsec = @rem(timeout, 1000) * 1000000, @@ -458,11 +458,11 @@ pub fn poll(fds: [*]pollfd, n: nfds_t, timeout: i32) usize { } pub fn ppoll(fds: [*]pollfd, n: nfds_t, timeout: ?*timespec, sigmask: ?*const sigset_t) usize { - return syscall5(.ppoll, @ptrToInt(fds), n, @ptrToInt(timeout), @ptrToInt(sigmask), NSIG / 8); + return syscall5(.ppoll, @intFromPtr(fds), n, @intFromPtr(timeout), @intFromPtr(sigmask), NSIG / 8); } pub fn read(fd: i32, buf: [*]u8, count: usize) usize { - return syscall3(.read, @bitCast(usize, @as(isize, fd)), @ptrToInt(buf), count); + return syscall3(.read, @bitCast(usize, @as(isize, fd)), @intFromPtr(buf), count); } pub fn preadv(fd: i32, iov: [*]const iovec, count: usize, offset: i64) usize { @@ -470,7 +470,7 @@ pub fn preadv(fd: i32, iov: [*]const iovec, count: usize, offset: i64) usize { return syscall5( .preadv, @bitCast(usize, @as(isize, fd)), - @ptrToInt(iov), + @intFromPtr(iov), count, // Kernel expects the offset is split into largest natural word-size. // See following link for detail: @@ -485,7 +485,7 @@ pub fn preadv2(fd: i32, iov: [*]const iovec, count: usize, offset: i64, flags: k return syscall6( .preadv2, @bitCast(usize, @as(isize, fd)), - @ptrToInt(iov), + @intFromPtr(iov), count, // See comments in preadv @truncate(usize, offset_u), @@ -495,11 +495,11 @@ pub fn preadv2(fd: i32, iov: [*]const iovec, count: usize, offset: i64, flags: k } pub fn readv(fd: i32, iov: [*]const iovec, count: usize) usize { - return syscall3(.readv, @bitCast(usize, @as(isize, fd)), @ptrToInt(iov), count); + return syscall3(.readv, @bitCast(usize, @as(isize, fd)), @intFromPtr(iov), count); } pub fn writev(fd: i32, iov: [*]const iovec_const, count: usize) usize { - return syscall3(.writev, @bitCast(usize, @as(isize, fd)), @ptrToInt(iov), count); + return syscall3(.writev, @bitCast(usize, @as(isize, fd)), @intFromPtr(iov), count); } pub fn pwritev(fd: i32, iov: [*]const iovec_const, count: usize, offset: i64) usize { @@ -507,7 +507,7 @@ pub fn pwritev(fd: i32, iov: [*]const iovec_const, count: usize, offset: i64) us return syscall5( .pwritev, @bitCast(usize, @as(isize, fd)), - @ptrToInt(iov), + @intFromPtr(iov), count, // See comments in preadv @truncate(usize, offset_u), @@ -520,7 +520,7 @@ pub fn pwritev2(fd: i32, iov: [*]const iovec_const, count: usize, offset: i64, f return syscall6( .pwritev2, @bitCast(usize, @as(isize, fd)), - @ptrToInt(iov), + @intFromPtr(iov), count, // See comments in preadv @truncate(usize, offset_u), @@ -531,22 +531,22 @@ pub fn pwritev2(fd: i32, iov: [*]const iovec_const, count: usize, offset: i64, f pub fn rmdir(path: [*:0]const u8) usize { if (@hasField(SYS, "rmdir")) { - return syscall1(.rmdir, @ptrToInt(path)); + return syscall1(.rmdir, @intFromPtr(path)); } else { - return syscall3(.unlinkat, @bitCast(usize, @as(isize, AT.FDCWD)), @ptrToInt(path), AT.REMOVEDIR); + return syscall3(.unlinkat, @bitCast(usize, @as(isize, AT.FDCWD)), @intFromPtr(path), AT.REMOVEDIR); } } pub fn symlink(existing: [*:0]const u8, new: [*:0]const u8) usize { if (@hasField(SYS, "symlink")) { - return syscall2(.symlink, @ptrToInt(existing), @ptrToInt(new)); + return syscall2(.symlink, @intFromPtr(existing), @intFromPtr(new)); } else { - return syscall3(.symlinkat, @ptrToInt(existing), @bitCast(usize, @as(isize, AT.FDCWD)), @ptrToInt(new)); + return syscall3(.symlinkat, @intFromPtr(existing), @bitCast(usize, @as(isize, AT.FDCWD)), @intFromPtr(new)); } } pub fn symlinkat(existing: [*:0]const u8, newfd: i32, newpath: [*:0]const u8) usize { - return syscall3(.symlinkat, @ptrToInt(existing), @bitCast(usize, @as(isize, newfd)), @ptrToInt(newpath)); + return syscall3(.symlinkat, @intFromPtr(existing), @bitCast(usize, @as(isize, newfd)), @intFromPtr(newpath)); } pub fn pread(fd: i32, buf: [*]u8, count: usize, offset: i64) usize { @@ -556,7 +556,7 @@ pub fn pread(fd: i32, buf: [*]u8, count: usize, offset: i64) usize { return syscall6( .pread64, @bitCast(usize, @as(isize, fd)), - @ptrToInt(buf), + @intFromPtr(buf), count, 0, offset_halves[0], @@ -566,7 +566,7 @@ pub fn pread(fd: i32, buf: [*]u8, count: usize, offset: i64) usize { return syscall5( .pread64, @bitCast(usize, @as(isize, fd)), - @ptrToInt(buf), + @intFromPtr(buf), count, offset_halves[0], offset_halves[1], @@ -581,7 +581,7 @@ pub fn pread(fd: i32, buf: [*]u8, count: usize, offset: i64) usize { return syscall4( syscall_number, @bitCast(usize, @as(isize, fd)), - @ptrToInt(buf), + @intFromPtr(buf), count, @bitCast(u64, offset), ); @@ -590,32 +590,32 @@ pub fn pread(fd: i32, buf: [*]u8, count: usize, offset: i64) usize { pub fn access(path: [*:0]const u8, mode: u32) usize { if (@hasField(SYS, "access")) { - return syscall2(.access, @ptrToInt(path), mode); + return syscall2(.access, @intFromPtr(path), mode); } else { - return syscall4(.faccessat, @bitCast(usize, @as(isize, AT.FDCWD)), @ptrToInt(path), mode, 0); + return syscall4(.faccessat, @bitCast(usize, @as(isize, AT.FDCWD)), @intFromPtr(path), mode, 0); } } pub fn faccessat(dirfd: i32, path: [*:0]const u8, mode: u32, flags: u32) usize { - return syscall4(.faccessat, @bitCast(usize, @as(isize, dirfd)), @ptrToInt(path), mode, flags); + return syscall4(.faccessat, @bitCast(usize, @as(isize, dirfd)), @intFromPtr(path), mode, flags); } pub fn pipe(fd: *[2]i32) usize { if (comptime (native_arch.isMIPS() or native_arch.isSPARC())) { return syscall_pipe(fd); } else if (@hasField(SYS, "pipe")) { - return syscall1(.pipe, @ptrToInt(fd)); + return syscall1(.pipe, @intFromPtr(fd)); } else { - return syscall2(.pipe2, @ptrToInt(fd), 0); + return syscall2(.pipe2, @intFromPtr(fd), 0); } } pub fn pipe2(fd: *[2]i32, flags: u32) usize { - return syscall2(.pipe2, @ptrToInt(fd), flags); + return syscall2(.pipe2, @intFromPtr(fd), flags); } pub fn write(fd: i32, buf: [*]const u8, count: usize) usize { - return syscall3(.write, @bitCast(usize, @as(isize, fd)), @ptrToInt(buf), count); + return syscall3(.write, @bitCast(usize, @as(isize, fd)), @intFromPtr(buf), count); } pub fn ftruncate(fd: i32, length: i64) usize { @@ -654,7 +654,7 @@ pub fn pwrite(fd: i32, buf: [*]const u8, count: usize, offset: i64) usize { return syscall6( .pwrite64, @bitCast(usize, @as(isize, fd)), - @ptrToInt(buf), + @intFromPtr(buf), count, 0, offset_halves[0], @@ -664,7 +664,7 @@ pub fn pwrite(fd: i32, buf: [*]const u8, count: usize, offset: i64) usize { return syscall5( .pwrite64, @bitCast(usize, @as(isize, fd)), - @ptrToInt(buf), + @intFromPtr(buf), count, offset_halves[0], offset_halves[1], @@ -679,7 +679,7 @@ pub fn pwrite(fd: i32, buf: [*]const u8, count: usize, offset: i64) usize { return syscall4( syscall_number, @bitCast(usize, @as(isize, fd)), - @ptrToInt(buf), + @intFromPtr(buf), count, @bitCast(u64, offset), ); @@ -688,11 +688,11 @@ pub fn pwrite(fd: i32, buf: [*]const u8, count: usize, offset: i64) usize { pub fn rename(old: [*:0]const u8, new: [*:0]const u8) usize { if (@hasField(SYS, "rename")) { - return syscall2(.rename, @ptrToInt(old), @ptrToInt(new)); + return syscall2(.rename, @intFromPtr(old), @intFromPtr(new)); } else if (@hasField(SYS, "renameat")) { - return syscall4(.renameat, @bitCast(usize, @as(isize, AT.FDCWD)), @ptrToInt(old), @bitCast(usize, @as(isize, AT.FDCWD)), @ptrToInt(new)); + return syscall4(.renameat, @bitCast(usize, @as(isize, AT.FDCWD)), @intFromPtr(old), @bitCast(usize, @as(isize, AT.FDCWD)), @intFromPtr(new)); } else { - return syscall5(.renameat2, @bitCast(usize, @as(isize, AT.FDCWD)), @ptrToInt(old), @bitCast(usize, @as(isize, AT.FDCWD)), @ptrToInt(new), 0); + return syscall5(.renameat2, @bitCast(usize, @as(isize, AT.FDCWD)), @intFromPtr(old), @bitCast(usize, @as(isize, AT.FDCWD)), @intFromPtr(new), 0); } } @@ -701,17 +701,17 @@ pub fn renameat(oldfd: i32, oldpath: [*]const u8, newfd: i32, newpath: [*]const return syscall4( .renameat, @bitCast(usize, @as(isize, oldfd)), - @ptrToInt(oldpath), + @intFromPtr(oldpath), @bitCast(usize, @as(isize, newfd)), - @ptrToInt(newpath), + @intFromPtr(newpath), ); } else { return syscall5( .renameat2, @bitCast(usize, @as(isize, oldfd)), - @ptrToInt(oldpath), + @intFromPtr(oldpath), @bitCast(usize, @as(isize, newfd)), - @ptrToInt(newpath), + @intFromPtr(newpath), 0, ); } @@ -721,21 +721,21 @@ pub fn renameat2(oldfd: i32, oldpath: [*:0]const u8, newfd: i32, newpath: [*:0]c return syscall5( .renameat2, @bitCast(usize, @as(isize, oldfd)), - @ptrToInt(oldpath), + @intFromPtr(oldpath), @bitCast(usize, @as(isize, newfd)), - @ptrToInt(newpath), + @intFromPtr(newpath), flags, ); } pub fn open(path: [*:0]const u8, flags: u32, perm: mode_t) usize { if (@hasField(SYS, "open")) { - return syscall3(.open, @ptrToInt(path), flags, perm); + return syscall3(.open, @intFromPtr(path), flags, perm); } else { return syscall4( .openat, @bitCast(usize, @as(isize, AT.FDCWD)), - @ptrToInt(path), + @intFromPtr(path), flags, perm, ); @@ -743,17 +743,17 @@ pub fn open(path: [*:0]const u8, flags: u32, perm: mode_t) usize { } pub fn create(path: [*:0]const u8, perm: mode_t) usize { - return syscall2(.creat, @ptrToInt(path), perm); + return syscall2(.creat, @intFromPtr(path), perm); } pub fn openat(dirfd: i32, path: [*:0]const u8, flags: u32, mode: mode_t) usize { // dirfd could be negative, for example AT.FDCWD is -100 - return syscall4(.openat, @bitCast(usize, @as(isize, dirfd)), @ptrToInt(path), flags, mode); + return syscall4(.openat, @bitCast(usize, @as(isize, dirfd)), @intFromPtr(path), flags, mode); } /// See also `clone` (from the arch-specific include) pub fn clone5(flags: usize, child_stack_ptr: usize, parent_tid: *i32, child_tid: *i32, newtls: usize) usize { - return syscall5(.clone, flags, child_stack_ptr, @ptrToInt(parent_tid), @ptrToInt(child_tid), newtls); + return syscall5(.clone, flags, child_stack_ptr, @intFromPtr(parent_tid), @intFromPtr(child_tid), newtls); } /// See also `clone` (from the arch-specific include) @@ -771,12 +771,12 @@ pub fn fchmod(fd: i32, mode: mode_t) usize { pub fn chmod(path: [*:0]const u8, mode: mode_t) usize { if (@hasField(SYS, "chmod")) { - return syscall2(.chmod, @ptrToInt(path), mode); + return syscall2(.chmod, @intFromPtr(path), mode); } else { return syscall4( .fchmodat, @bitCast(usize, @as(isize, AT.FDCWD)), - @ptrToInt(path), + @intFromPtr(path), mode, 0, ); @@ -792,7 +792,7 @@ pub fn fchown(fd: i32, owner: uid_t, group: gid_t) usize { } pub fn fchmodat(fd: i32, path: [*:0]const u8, mode: mode_t, flags: u32) usize { - return syscall4(.fchmodat, @bitCast(usize, @as(isize, fd)), @ptrToInt(path), mode, flags); + return syscall4(.fchmodat, @bitCast(usize, @as(isize, fd)), @intFromPtr(path), mode, flags); } /// Can only be called on 32 bit systems. For 64 bit see `lseek`. @@ -804,7 +804,7 @@ pub fn llseek(fd: i32, offset: u64, result: ?*u64, whence: usize) usize { @bitCast(usize, @as(isize, fd)), @truncate(usize, offset >> 32), @truncate(usize, offset), - @ptrToInt(result), + @intFromPtr(result), whence, ); } @@ -874,15 +874,15 @@ pub const LINUX_REBOOT = struct { pub fn reboot(magic: LINUX_REBOOT.MAGIC1, magic2: LINUX_REBOOT.MAGIC2, cmd: LINUX_REBOOT.CMD, arg: ?*const anyopaque) usize { return std.os.linux.syscall4( .reboot, - @enumToInt(magic), - @enumToInt(magic2), - @enumToInt(cmd), - @ptrToInt(arg), + @intFromEnum(magic), + @intFromEnum(magic2), + @intFromEnum(cmd), + @intFromPtr(arg), ); } pub fn getrandom(buf: [*]u8, count: usize, flags: u32) usize { - return syscall3(.getrandom, @ptrToInt(buf), count, flags); + return syscall3(.getrandom, @intFromPtr(buf), count, flags); } pub fn kill(pid: pid_t, sig: i32) usize { @@ -901,17 +901,17 @@ pub fn link(oldpath: [*:0]const u8, newpath: [*:0]const u8, flags: i32) usize { if (@hasField(SYS, "link")) { return syscall3( .link, - @ptrToInt(oldpath), - @ptrToInt(newpath), + @intFromPtr(oldpath), + @intFromPtr(newpath), @bitCast(usize, @as(isize, flags)), ); } else { return syscall5( .linkat, @bitCast(usize, @as(isize, AT.FDCWD)), - @ptrToInt(oldpath), + @intFromPtr(oldpath), @bitCast(usize, @as(isize, AT.FDCWD)), - @ptrToInt(newpath), + @intFromPtr(newpath), @bitCast(usize, @as(isize, flags)), ); } @@ -921,41 +921,41 @@ pub fn linkat(oldfd: fd_t, oldpath: [*:0]const u8, newfd: fd_t, newpath: [*:0]co return syscall5( .linkat, @bitCast(usize, @as(isize, oldfd)), - @ptrToInt(oldpath), + @intFromPtr(oldpath), @bitCast(usize, @as(isize, newfd)), - @ptrToInt(newpath), + @intFromPtr(newpath), @bitCast(usize, @as(isize, flags)), ); } pub fn unlink(path: [*:0]const u8) usize { if (@hasField(SYS, "unlink")) { - return syscall1(.unlink, @ptrToInt(path)); + return syscall1(.unlink, @intFromPtr(path)); } else { - return syscall3(.unlinkat, @bitCast(usize, @as(isize, AT.FDCWD)), @ptrToInt(path), 0); + return syscall3(.unlinkat, @bitCast(usize, @as(isize, AT.FDCWD)), @intFromPtr(path), 0); } } pub fn unlinkat(dirfd: i32, path: [*:0]const u8, flags: u32) usize { - return syscall3(.unlinkat, @bitCast(usize, @as(isize, dirfd)), @ptrToInt(path), flags); + return syscall3(.unlinkat, @bitCast(usize, @as(isize, dirfd)), @intFromPtr(path), flags); } pub fn waitpid(pid: pid_t, status: *u32, flags: u32) usize { - return syscall4(.wait4, @bitCast(usize, @as(isize, pid)), @ptrToInt(status), flags, 0); + return syscall4(.wait4, @bitCast(usize, @as(isize, pid)), @intFromPtr(status), flags, 0); } pub fn wait4(pid: pid_t, status: *u32, flags: u32, usage: ?*rusage) usize { return syscall4( .wait4, @bitCast(usize, @as(isize, pid)), - @ptrToInt(status), + @intFromPtr(status), flags, - @ptrToInt(usage), + @intFromPtr(usage), ); } pub fn waitid(id_type: P, id: i32, infop: *siginfo_t, flags: u32) usize { - return syscall5(.waitid, @enumToInt(id_type), @bitCast(usize, @as(isize, id)), @ptrToInt(infop), flags, 0); + return syscall5(.waitid, @intFromEnum(id_type), @bitCast(usize, @as(isize, id)), @intFromPtr(infop), flags, 0); } pub fn fcntl(fd: fd_t, cmd: i32, arg: usize) usize { @@ -978,16 +978,16 @@ pub fn clock_gettime(clk_id: i32, tp: *timespec) usize { const f = @ptrCast(vdso_clock_gettime_ty, fn_ptr); const rc = f(clk_id, tp); switch (rc) { - 0, @bitCast(usize, -@as(isize, @enumToInt(E.INVAL))) => return rc, + 0, @bitCast(usize, -@as(isize, @intFromEnum(E.INVAL))) => return rc, else => {}, } } } - return syscall2(.clock_gettime, @bitCast(usize, @as(isize, clk_id)), @ptrToInt(tp)); + return syscall2(.clock_gettime, @bitCast(usize, @as(isize, clk_id)), @intFromPtr(tp)); } fn init_vdso_clock_gettime(clk: i32, ts: *timespec) callconv(.C) usize { - const ptr = @intToPtr(?*const anyopaque, vdso.lookup(VDSO.CGT_VER, VDSO.CGT_SYM)); + const ptr = @ptrFromInt(?*const anyopaque, vdso.lookup(VDSO.CGT_VER, VDSO.CGT_SYM)); // Note that we may not have a VDSO at all, update the stub address anyway // so that clock_gettime will fall back on the good old (and slow) syscall @atomicStore(?*const anyopaque, &vdso_clock_gettime, ptr, .Monotonic); @@ -996,27 +996,27 @@ fn init_vdso_clock_gettime(clk: i32, ts: *timespec) callconv(.C) usize { const f = @ptrCast(vdso_clock_gettime_ty, fn_ptr); return f(clk, ts); } - return @bitCast(usize, -@as(isize, @enumToInt(E.NOSYS))); + return @bitCast(usize, -@as(isize, @intFromEnum(E.NOSYS))); } pub fn clock_getres(clk_id: i32, tp: *timespec) usize { - return syscall2(.clock_getres, @bitCast(usize, @as(isize, clk_id)), @ptrToInt(tp)); + return syscall2(.clock_getres, @bitCast(usize, @as(isize, clk_id)), @intFromPtr(tp)); } pub fn clock_settime(clk_id: i32, tp: *const timespec) usize { - return syscall2(.clock_settime, @bitCast(usize, @as(isize, clk_id)), @ptrToInt(tp)); + return syscall2(.clock_settime, @bitCast(usize, @as(isize, clk_id)), @intFromPtr(tp)); } pub fn gettimeofday(tv: *timeval, tz: *timezone) usize { - return syscall2(.gettimeofday, @ptrToInt(tv), @ptrToInt(tz)); + return syscall2(.gettimeofday, @intFromPtr(tv), @intFromPtr(tz)); } pub fn settimeofday(tv: *const timeval, tz: *const timezone) usize { - return syscall2(.settimeofday, @ptrToInt(tv), @ptrToInt(tz)); + return syscall2(.settimeofday, @intFromPtr(tv), @intFromPtr(tz)); } pub fn nanosleep(req: *const timespec, rem: ?*timespec) usize { - return syscall2(.nanosleep, @ptrToInt(req), @ptrToInt(rem)); + return syscall2(.nanosleep, @intFromPtr(req), @intFromPtr(rem)); } pub fn setuid(uid: uid_t) usize { @@ -1107,17 +1107,17 @@ pub fn setegid(egid: gid_t) usize { pub fn getresuid(ruid: *uid_t, euid: *uid_t, suid: *uid_t) usize { if (@hasField(SYS, "getresuid32")) { - return syscall3(.getresuid32, @ptrToInt(ruid), @ptrToInt(euid), @ptrToInt(suid)); + return syscall3(.getresuid32, @intFromPtr(ruid), @intFromPtr(euid), @intFromPtr(suid)); } else { - return syscall3(.getresuid, @ptrToInt(ruid), @ptrToInt(euid), @ptrToInt(suid)); + return syscall3(.getresuid, @intFromPtr(ruid), @intFromPtr(euid), @intFromPtr(suid)); } } pub fn getresgid(rgid: *gid_t, egid: *gid_t, sgid: *gid_t) usize { if (@hasField(SYS, "getresgid32")) { - return syscall3(.getresgid32, @ptrToInt(rgid), @ptrToInt(egid), @ptrToInt(sgid)); + return syscall3(.getresgid32, @intFromPtr(rgid), @intFromPtr(egid), @intFromPtr(sgid)); } else { - return syscall3(.getresgid, @ptrToInt(rgid), @ptrToInt(egid), @ptrToInt(sgid)); + return syscall3(.getresgid, @intFromPtr(rgid), @intFromPtr(egid), @intFromPtr(sgid)); } } @@ -1139,17 +1139,17 @@ pub fn setresgid(rgid: gid_t, egid: gid_t, sgid: gid_t) usize { pub fn getgroups(size: usize, list: *gid_t) usize { if (@hasField(SYS, "getgroups32")) { - return syscall2(.getgroups32, size, @ptrToInt(list)); + return syscall2(.getgroups32, size, @intFromPtr(list)); } else { - return syscall2(.getgroups, size, @ptrToInt(list)); + return syscall2(.getgroups, size, @intFromPtr(list)); } } pub fn setgroups(size: usize, list: [*]const gid_t) usize { if (@hasField(SYS, "setgroups32")) { - return syscall2(.setgroups32, size, @ptrToInt(list)); + return syscall2(.setgroups32, size, @intFromPtr(list)); } else { - return syscall2(.setgroups, size, @ptrToInt(list)); + return syscall2(.setgroups, size, @intFromPtr(list)); } } @@ -1162,7 +1162,7 @@ pub fn gettid() pid_t { } pub fn sigprocmask(flags: u32, noalias set: ?*const sigset_t, noalias oldset: ?*sigset_t) usize { - return syscall4(.rt_sigprocmask, flags, @ptrToInt(set), @ptrToInt(oldset), NSIG / 8); + return syscall4(.rt_sigprocmask, flags, @intFromPtr(set), @intFromPtr(oldset), NSIG / 8); } pub fn sigaction(sig: u6, noalias act: ?*const Sigaction, noalias oact: ?*Sigaction) usize { @@ -1187,12 +1187,12 @@ pub fn sigaction(sig: u6, noalias act: ?*const Sigaction, noalias oact: ?*Sigact @memcpy(@ptrCast([*]u8, &ksa.mask)[0..mask_size], @ptrCast([*]const u8, &new.mask)); } - const ksa_arg = if (act != null) @ptrToInt(&ksa) else 0; - const oldksa_arg = if (oact != null) @ptrToInt(&oldksa) else 0; + const ksa_arg = if (act != null) @intFromPtr(&ksa) else 0; + const oldksa_arg = if (oact != null) @intFromPtr(&oldksa) else 0; const result = switch (native_arch) { // The sparc version of rt_sigaction needs the restorer function to be passed as an argument too. - .sparc, .sparc64 => syscall5(.rt_sigaction, sig, ksa_arg, oldksa_arg, @ptrToInt(ksa.restorer), mask_size), + .sparc, .sparc64 => syscall5(.rt_sigaction, sig, ksa_arg, oldksa_arg, @intFromPtr(ksa.restorer), mask_size), else => syscall4(.rt_sigaction, sig, ksa_arg, oldksa_arg, mask_size), }; if (getErrno(result) != .SUCCESS) return result; @@ -1223,16 +1223,16 @@ pub fn sigismember(set: *const sigset_t, sig: u6) bool { pub fn getsockname(fd: i32, noalias addr: *sockaddr, noalias len: *socklen_t) usize { if (native_arch == .x86) { - return socketcall(SC.getsockname, &[3]usize{ @bitCast(usize, @as(isize, fd)), @ptrToInt(addr), @ptrToInt(len) }); + return socketcall(SC.getsockname, &[3]usize{ @bitCast(usize, @as(isize, fd)), @intFromPtr(addr), @intFromPtr(len) }); } - return syscall3(.getsockname, @bitCast(usize, @as(isize, fd)), @ptrToInt(addr), @ptrToInt(len)); + return syscall3(.getsockname, @bitCast(usize, @as(isize, fd)), @intFromPtr(addr), @intFromPtr(len)); } pub fn getpeername(fd: i32, noalias addr: *sockaddr, noalias len: *socklen_t) usize { if (native_arch == .x86) { - return socketcall(SC.getpeername, &[3]usize{ @bitCast(usize, @as(isize, fd)), @ptrToInt(addr), @ptrToInt(len) }); + return socketcall(SC.getpeername, &[3]usize{ @bitCast(usize, @as(isize, fd)), @intFromPtr(addr), @intFromPtr(len) }); } - return syscall3(.getpeername, @bitCast(usize, @as(isize, fd)), @ptrToInt(addr), @ptrToInt(len)); + return syscall3(.getpeername, @bitCast(usize, @as(isize, fd)), @intFromPtr(addr), @intFromPtr(len)); } pub fn socket(domain: u32, socket_type: u32, protocol: u32) usize { @@ -1244,21 +1244,21 @@ pub fn socket(domain: u32, socket_type: u32, protocol: u32) usize { pub fn setsockopt(fd: i32, level: u32, optname: u32, optval: [*]const u8, optlen: socklen_t) usize { if (native_arch == .x86) { - return socketcall(SC.setsockopt, &[5]usize{ @bitCast(usize, @as(isize, fd)), level, optname, @ptrToInt(optval), @intCast(usize, optlen) }); + return socketcall(SC.setsockopt, &[5]usize{ @bitCast(usize, @as(isize, fd)), level, optname, @intFromPtr(optval), @intCast(usize, optlen) }); } - return syscall5(.setsockopt, @bitCast(usize, @as(isize, fd)), level, optname, @ptrToInt(optval), @intCast(usize, optlen)); + return syscall5(.setsockopt, @bitCast(usize, @as(isize, fd)), level, optname, @intFromPtr(optval), @intCast(usize, optlen)); } pub fn getsockopt(fd: i32, level: u32, optname: u32, noalias optval: [*]u8, noalias optlen: *socklen_t) usize { if (native_arch == .x86) { - return socketcall(SC.getsockopt, &[5]usize{ @bitCast(usize, @as(isize, fd)), level, optname, @ptrToInt(optval), @ptrToInt(optlen) }); + return socketcall(SC.getsockopt, &[5]usize{ @bitCast(usize, @as(isize, fd)), level, optname, @intFromPtr(optval), @intFromPtr(optlen) }); } - return syscall5(.getsockopt, @bitCast(usize, @as(isize, fd)), level, optname, @ptrToInt(optval), @ptrToInt(optlen)); + return syscall5(.getsockopt, @bitCast(usize, @as(isize, fd)), level, optname, @intFromPtr(optval), @intFromPtr(optlen)); } pub fn sendmsg(fd: i32, msg: *const msghdr_const, flags: u32) usize { const fd_usize = @bitCast(usize, @as(isize, fd)); - const msg_usize = @ptrToInt(msg); + const msg_usize = @intFromPtr(msg); if (native_arch == .x86) { return socketcall(SC.sendmsg, &[3]usize{ fd_usize, msg_usize, flags }); } else { @@ -1281,7 +1281,7 @@ pub fn sendmmsg(fd: i32, msgvec: [*]mmsghdr_const, vlen: u32, flags: u32) usize // batch-send all messages up to the current message if (next_unsent < i) { const batch_size = i - next_unsent; - const r = syscall4(.sendmmsg, @bitCast(usize, @as(isize, fd)), @ptrToInt(&msgvec[next_unsent]), batch_size, flags); + const r = syscall4(.sendmmsg, @bitCast(usize, @as(isize, fd)), @intFromPtr(&msgvec[next_unsent]), batch_size, flags); if (getErrno(r) != 0) return next_unsent; if (r < batch_size) return next_unsent + r; } @@ -1297,18 +1297,18 @@ pub fn sendmmsg(fd: i32, msgvec: [*]mmsghdr_const, vlen: u32, flags: u32) usize } if (next_unsent < kvlen or next_unsent == 0) { // want to make sure at least one syscall occurs (e.g. to trigger MSG.EOR) const batch_size = kvlen - next_unsent; - const r = syscall4(.sendmmsg, @bitCast(usize, @as(isize, fd)), @ptrToInt(&msgvec[next_unsent]), batch_size, flags); + const r = syscall4(.sendmmsg, @bitCast(usize, @as(isize, fd)), @intFromPtr(&msgvec[next_unsent]), batch_size, flags); if (getErrno(r) != 0) return r; return next_unsent + r; } return kvlen; } - return syscall4(.sendmmsg, @bitCast(usize, @as(isize, fd)), @ptrToInt(msgvec), vlen, flags); + return syscall4(.sendmmsg, @bitCast(usize, @as(isize, fd)), @intFromPtr(msgvec), vlen, flags); } pub fn connect(fd: i32, addr: *const anyopaque, len: socklen_t) usize { const fd_usize = @bitCast(usize, @as(isize, fd)); - const addr_usize = @ptrToInt(addr); + const addr_usize = @intFromPtr(addr); if (native_arch == .x86) { return socketcall(SC.connect, &[3]usize{ fd_usize, addr_usize, len }); } else { @@ -1318,7 +1318,7 @@ pub fn connect(fd: i32, addr: *const anyopaque, len: socklen_t) usize { pub fn recvmsg(fd: i32, msg: *msghdr, flags: u32) usize { const fd_usize = @bitCast(usize, @as(isize, fd)); - const msg_usize = @ptrToInt(msg); + const msg_usize = @intFromPtr(msg); if (native_arch == .x86) { return socketcall(SC.recvmsg, &[3]usize{ fd_usize, msg_usize, flags }); } else { @@ -1335,9 +1335,9 @@ pub fn recvfrom( noalias alen: ?*socklen_t, ) usize { const fd_usize = @bitCast(usize, @as(isize, fd)); - const buf_usize = @ptrToInt(buf); - const addr_usize = @ptrToInt(addr); - const alen_usize = @ptrToInt(alen); + const buf_usize = @intFromPtr(buf); + const addr_usize = @intFromPtr(addr); + const alen_usize = @intFromPtr(alen); if (native_arch == .x86) { return socketcall(SC.recvfrom, &[6]usize{ fd_usize, buf_usize, len, flags, addr_usize, alen_usize }); } else { @@ -1354,9 +1354,9 @@ pub fn shutdown(fd: i32, how: i32) usize { pub fn bind(fd: i32, addr: *const sockaddr, len: socklen_t) usize { if (native_arch == .x86) { - return socketcall(SC.bind, &[3]usize{ @bitCast(usize, @as(isize, fd)), @ptrToInt(addr), @intCast(usize, len) }); + return socketcall(SC.bind, &[3]usize{ @bitCast(usize, @as(isize, fd)), @intFromPtr(addr), @intCast(usize, len) }); } - return syscall3(.bind, @bitCast(usize, @as(isize, fd)), @ptrToInt(addr), @intCast(usize, len)); + return syscall3(.bind, @bitCast(usize, @as(isize, fd)), @intFromPtr(addr), @intCast(usize, len)); } pub fn listen(fd: i32, backlog: u32) usize { @@ -1368,9 +1368,9 @@ pub fn listen(fd: i32, backlog: u32) usize { pub fn sendto(fd: i32, buf: [*]const u8, len: usize, flags: u32, addr: ?*const sockaddr, alen: socklen_t) usize { if (native_arch == .x86) { - return socketcall(SC.sendto, &[6]usize{ @bitCast(usize, @as(isize, fd)), @ptrToInt(buf), len, flags, @ptrToInt(addr), @intCast(usize, alen) }); + return socketcall(SC.sendto, &[6]usize{ @bitCast(usize, @as(isize, fd)), @intFromPtr(buf), len, flags, @intFromPtr(addr), @intCast(usize, alen) }); } - return syscall6(.sendto, @bitCast(usize, @as(isize, fd)), @ptrToInt(buf), len, flags, @ptrToInt(addr), @intCast(usize, alen)); + return syscall6(.sendto, @bitCast(usize, @as(isize, fd)), @intFromPtr(buf), len, flags, @intFromPtr(addr), @intCast(usize, alen)); } pub fn sendfile(outfd: i32, infd: i32, offset: ?*i64, count: usize) usize { @@ -1379,7 +1379,7 @@ pub fn sendfile(outfd: i32, infd: i32, offset: ?*i64, count: usize) usize { .sendfile64, @bitCast(usize, @as(isize, outfd)), @bitCast(usize, @as(isize, infd)), - @ptrToInt(offset), + @intFromPtr(offset), count, ); } else { @@ -1387,7 +1387,7 @@ pub fn sendfile(outfd: i32, infd: i32, offset: ?*i64, count: usize) usize { .sendfile, @bitCast(usize, @as(isize, outfd)), @bitCast(usize, @as(isize, infd)), - @ptrToInt(offset), + @intFromPtr(offset), count, ); } @@ -1395,9 +1395,9 @@ pub fn sendfile(outfd: i32, infd: i32, offset: ?*i64, count: usize) usize { pub fn socketpair(domain: i32, socket_type: i32, protocol: i32, fd: *[2]i32) usize { if (native_arch == .x86) { - return socketcall(SC.socketpair, &[4]usize{ @intCast(usize, domain), @intCast(usize, socket_type), @intCast(usize, protocol), @ptrToInt(fd) }); + return socketcall(SC.socketpair, &[4]usize{ @intCast(usize, domain), @intCast(usize, socket_type), @intCast(usize, protocol), @intFromPtr(fd) }); } - return syscall4(.socketpair, @intCast(usize, domain), @intCast(usize, socket_type), @intCast(usize, protocol), @ptrToInt(fd)); + return syscall4(.socketpair, @intCast(usize, domain), @intCast(usize, socket_type), @intCast(usize, protocol), @intFromPtr(fd)); } pub fn accept(fd: i32, noalias addr: ?*sockaddr, noalias len: ?*socklen_t) usize { @@ -1409,40 +1409,40 @@ pub fn accept(fd: i32, noalias addr: ?*sockaddr, noalias len: ?*socklen_t) usize pub fn accept4(fd: i32, noalias addr: ?*sockaddr, noalias len: ?*socklen_t, flags: u32) usize { if (native_arch == .x86) { - return socketcall(SC.accept4, &[4]usize{ @bitCast(usize, @as(isize, fd)), @ptrToInt(addr), @ptrToInt(len), flags }); + return socketcall(SC.accept4, &[4]usize{ @bitCast(usize, @as(isize, fd)), @intFromPtr(addr), @intFromPtr(len), flags }); } - return syscall4(.accept4, @bitCast(usize, @as(isize, fd)), @ptrToInt(addr), @ptrToInt(len), flags); + return syscall4(.accept4, @bitCast(usize, @as(isize, fd)), @intFromPtr(addr), @intFromPtr(len), flags); } pub fn fstat(fd: i32, stat_buf: *Stat) usize { if (@hasField(SYS, "fstat64")) { - return syscall2(.fstat64, @bitCast(usize, @as(isize, fd)), @ptrToInt(stat_buf)); + return syscall2(.fstat64, @bitCast(usize, @as(isize, fd)), @intFromPtr(stat_buf)); } else { - return syscall2(.fstat, @bitCast(usize, @as(isize, fd)), @ptrToInt(stat_buf)); + return syscall2(.fstat, @bitCast(usize, @as(isize, fd)), @intFromPtr(stat_buf)); } } pub fn stat(pathname: [*:0]const u8, statbuf: *Stat) usize { if (@hasField(SYS, "stat64")) { - return syscall2(.stat64, @ptrToInt(pathname), @ptrToInt(statbuf)); + return syscall2(.stat64, @intFromPtr(pathname), @intFromPtr(statbuf)); } else { - return syscall2(.stat, @ptrToInt(pathname), @ptrToInt(statbuf)); + return syscall2(.stat, @intFromPtr(pathname), @intFromPtr(statbuf)); } } pub fn lstat(pathname: [*:0]const u8, statbuf: *Stat) usize { if (@hasField(SYS, "lstat64")) { - return syscall2(.lstat64, @ptrToInt(pathname), @ptrToInt(statbuf)); + return syscall2(.lstat64, @intFromPtr(pathname), @intFromPtr(statbuf)); } else { - return syscall2(.lstat, @ptrToInt(pathname), @ptrToInt(statbuf)); + return syscall2(.lstat, @intFromPtr(pathname), @intFromPtr(statbuf)); } } pub fn fstatat(dirfd: i32, path: [*:0]const u8, stat_buf: *Stat, flags: u32) usize { if (@hasField(SYS, "fstatat64")) { - return syscall4(.fstatat64, @bitCast(usize, @as(isize, dirfd)), @ptrToInt(path), @ptrToInt(stat_buf), flags); + return syscall4(.fstatat64, @bitCast(usize, @as(isize, dirfd)), @intFromPtr(path), @intFromPtr(stat_buf), flags); } else { - return syscall4(.fstatat, @bitCast(usize, @as(isize, dirfd)), @ptrToInt(path), @ptrToInt(stat_buf), flags); + return syscall4(.fstatat, @bitCast(usize, @as(isize, dirfd)), @intFromPtr(path), @intFromPtr(stat_buf), flags); } } @@ -1451,61 +1451,61 @@ pub fn statx(dirfd: i32, path: [*]const u8, flags: u32, mask: u32, statx_buf: *S return syscall5( .statx, @bitCast(usize, @as(isize, dirfd)), - @ptrToInt(path), + @intFromPtr(path), flags, mask, - @ptrToInt(statx_buf), + @intFromPtr(statx_buf), ); } - return @bitCast(usize, -@as(isize, @enumToInt(E.NOSYS))); + return @bitCast(usize, -@as(isize, @intFromEnum(E.NOSYS))); } pub fn listxattr(path: [*:0]const u8, list: [*]u8, size: usize) usize { - return syscall3(.listxattr, @ptrToInt(path), @ptrToInt(list), size); + return syscall3(.listxattr, @intFromPtr(path), @intFromPtr(list), size); } pub fn llistxattr(path: [*:0]const u8, list: [*]u8, size: usize) usize { - return syscall3(.llistxattr, @ptrToInt(path), @ptrToInt(list), size); + return syscall3(.llistxattr, @intFromPtr(path), @intFromPtr(list), size); } pub fn flistxattr(fd: usize, list: [*]u8, size: usize) usize { - return syscall3(.flistxattr, fd, @ptrToInt(list), size); + return syscall3(.flistxattr, fd, @intFromPtr(list), size); } pub fn getxattr(path: [*:0]const u8, name: [*:0]const u8, value: [*]u8, size: usize) usize { - return syscall4(.getxattr, @ptrToInt(path), @ptrToInt(name), @ptrToInt(value), size); + return syscall4(.getxattr, @intFromPtr(path), @intFromPtr(name), @intFromPtr(value), size); } pub fn lgetxattr(path: [*:0]const u8, name: [*:0]const u8, value: [*]u8, size: usize) usize { - return syscall4(.lgetxattr, @ptrToInt(path), @ptrToInt(name), @ptrToInt(value), size); + return syscall4(.lgetxattr, @intFromPtr(path), @intFromPtr(name), @intFromPtr(value), size); } pub fn fgetxattr(fd: usize, name: [*:0]const u8, value: [*]u8, size: usize) usize { - return syscall4(.lgetxattr, fd, @ptrToInt(name), @ptrToInt(value), size); + return syscall4(.lgetxattr, fd, @intFromPtr(name), @intFromPtr(value), size); } pub fn setxattr(path: [*:0]const u8, name: [*:0]const u8, value: *const void, size: usize, flags: usize) usize { - return syscall5(.setxattr, @ptrToInt(path), @ptrToInt(name), @ptrToInt(value), size, flags); + return syscall5(.setxattr, @intFromPtr(path), @intFromPtr(name), @intFromPtr(value), size, flags); } pub fn lsetxattr(path: [*:0]const u8, name: [*:0]const u8, value: *const void, size: usize, flags: usize) usize { - return syscall5(.lsetxattr, @ptrToInt(path), @ptrToInt(name), @ptrToInt(value), size, flags); + return syscall5(.lsetxattr, @intFromPtr(path), @intFromPtr(name), @intFromPtr(value), size, flags); } pub fn fsetxattr(fd: usize, name: [*:0]const u8, value: *const void, size: usize, flags: usize) usize { - return syscall5(.fsetxattr, fd, @ptrToInt(name), @ptrToInt(value), size, flags); + return syscall5(.fsetxattr, fd, @intFromPtr(name), @intFromPtr(value), size, flags); } pub fn removexattr(path: [*:0]const u8, name: [*:0]const u8) usize { - return syscall2(.removexattr, @ptrToInt(path), @ptrToInt(name)); + return syscall2(.removexattr, @intFromPtr(path), @intFromPtr(name)); } pub fn lremovexattr(path: [*:0]const u8, name: [*:0]const u8) usize { - return syscall2(.lremovexattr, @ptrToInt(path), @ptrToInt(name)); + return syscall2(.lremovexattr, @intFromPtr(path), @intFromPtr(name)); } pub fn fremovexattr(fd: usize, name: [*:0]const u8) usize { - return syscall2(.fremovexattr, fd, @ptrToInt(name)); + return syscall2(.fremovexattr, fd, @intFromPtr(name)); } pub fn sched_yield() usize { @@ -1513,30 +1513,30 @@ pub fn sched_yield() usize { } pub fn sched_getaffinity(pid: pid_t, size: usize, set: *cpu_set_t) usize { - const rc = syscall3(.sched_getaffinity, @bitCast(usize, @as(isize, pid)), size, @ptrToInt(set)); + const rc = syscall3(.sched_getaffinity, @bitCast(usize, @as(isize, pid)), size, @intFromPtr(set)); if (@bitCast(isize, rc) < 0) return rc; if (rc < size) @memset(@ptrCast([*]u8, set)[rc..size], 0); return 0; } pub fn getcpu(cpu: *u32, node: *u32) usize { - return syscall3(.getcpu, @ptrToInt(cpu), @ptrToInt(node), 0); + return syscall3(.getcpu, @intFromPtr(cpu), @intFromPtr(node), 0); } pub fn sched_getcpu() usize { var cpu: u32 = undefined; - const rc = syscall3(.getcpu, @ptrToInt(&cpu), 0, 0); + const rc = syscall3(.getcpu, @intFromPtr(&cpu), 0, 0); if (@bitCast(isize, rc) < 0) return rc; return @intCast(usize, cpu); } /// libc has no wrapper for this syscall pub fn mbind(addr: ?*anyopaque, len: u32, mode: i32, nodemask: *const u32, maxnode: u32, flags: u32) usize { - return syscall6(.mbind, @ptrToInt(addr), len, @bitCast(usize, @as(isize, mode)), @ptrToInt(nodemask), maxnode, flags); + return syscall6(.mbind, @intFromPtr(addr), len, @bitCast(usize, @as(isize, mode)), @intFromPtr(nodemask), maxnode, flags); } pub fn sched_setaffinity(pid: pid_t, size: usize, set: *const cpu_set_t) usize { - const rc = syscall3(.sched_setaffinity, @bitCast(usize, @as(isize, pid)), size, @ptrToInt(set)); + const rc = syscall3(.sched_setaffinity, @bitCast(usize, @as(isize, pid)), size, @intFromPtr(set)); if (@bitCast(isize, rc) < 0) return rc; return 0; } @@ -1550,7 +1550,7 @@ pub fn epoll_create1(flags: usize) usize { } pub fn epoll_ctl(epoll_fd: i32, op: u32, fd: i32, ev: ?*epoll_event) usize { - return syscall4(.epoll_ctl, @bitCast(usize, @as(isize, epoll_fd)), @intCast(usize, op), @bitCast(usize, @as(isize, fd)), @ptrToInt(ev)); + return syscall4(.epoll_ctl, @bitCast(usize, @as(isize, epoll_fd)), @intCast(usize, op), @bitCast(usize, @as(isize, fd)), @intFromPtr(ev)); } pub fn epoll_wait(epoll_fd: i32, events: [*]epoll_event, maxevents: u32, timeout: i32) usize { @@ -1561,10 +1561,10 @@ pub fn epoll_pwait(epoll_fd: i32, events: [*]epoll_event, maxevents: u32, timeou return syscall6( .epoll_pwait, @bitCast(usize, @as(isize, epoll_fd)), - @ptrToInt(events), + @intFromPtr(events), @intCast(usize, maxevents), @bitCast(usize, @as(isize, timeout)), - @ptrToInt(sigmask), + @intFromPtr(sigmask), @sizeOf(sigset_t), ); } @@ -1583,11 +1583,11 @@ pub const itimerspec = extern struct { }; pub fn timerfd_gettime(fd: i32, curr_value: *itimerspec) usize { - return syscall2(.timerfd_gettime, @bitCast(usize, @as(isize, fd)), @ptrToInt(curr_value)); + return syscall2(.timerfd_gettime, @bitCast(usize, @as(isize, fd)), @intFromPtr(curr_value)); } pub fn timerfd_settime(fd: i32, flags: u32, new_value: *const itimerspec, old_value: ?*itimerspec) usize { - return syscall4(.timerfd_settime, @bitCast(usize, @as(isize, fd)), flags, @ptrToInt(new_value), @ptrToInt(old_value)); + return syscall4(.timerfd_settime, @bitCast(usize, @as(isize, fd)), flags, @intFromPtr(new_value), @intFromPtr(old_value)); } pub const sigevent = extern struct { @@ -1609,7 +1609,7 @@ pub const timer_t = ?*anyopaque; pub fn timer_create(clockid: i32, sevp: *sigevent, timerid: *timer_t) usize { var t: timer_t = undefined; - const rc = syscall3(.timer_create, @bitCast(usize, @as(isize, clockid)), @ptrToInt(sevp), @ptrToInt(&t)); + const rc = syscall3(.timer_create, @bitCast(usize, @as(isize, clockid)), @intFromPtr(sevp), @intFromPtr(&t)); if (@bitCast(isize, rc) < 0) return rc; timerid.* = t; return rc; @@ -1620,11 +1620,11 @@ pub fn timer_delete(timerid: timer_t) usize { } pub fn timer_gettime(timerid: timer_t, curr_value: *itimerspec) usize { - return syscall2(.timer_gettime, @ptrToInt(timerid), @ptrToInt(curr_value)); + return syscall2(.timer_gettime, @intFromPtr(timerid), @intFromPtr(curr_value)); } pub fn timer_settime(timerid: timer_t, flags: i32, new_value: *const itimerspec, old_value: ?*itimerspec) usize { - return syscall4(.timer_settime, @ptrToInt(timerid), @bitCast(usize, @as(isize, flags)), @ptrToInt(new_value), @ptrToInt(old_value)); + return syscall4(.timer_settime, @intFromPtr(timerid), @bitCast(usize, @as(isize, flags)), @intFromPtr(new_value), @intFromPtr(old_value)); } // Flags for the 'setitimer' system call @@ -1635,11 +1635,11 @@ pub const ITIMER = enum(i32) { }; pub fn getitimer(which: i32, curr_value: *itimerspec) usize { - return syscall2(.getitimer, @bitCast(usize, @as(isize, which)), @ptrToInt(curr_value)); + return syscall2(.getitimer, @bitCast(usize, @as(isize, which)), @intFromPtr(curr_value)); } pub fn setitimer(which: i32, new_value: *const itimerspec, old_value: ?*itimerspec) usize { - return syscall3(.setitimer, @bitCast(usize, @as(isize, which)), @ptrToInt(new_value), @ptrToInt(old_value)); + return syscall3(.setitimer, @bitCast(usize, @as(isize, which)), @intFromPtr(new_value), @intFromPtr(old_value)); } pub fn unshare(flags: usize) usize { @@ -1647,55 +1647,55 @@ pub fn unshare(flags: usize) usize { } pub fn capget(hdrp: *cap_user_header_t, datap: *cap_user_data_t) usize { - return syscall2(.capget, @ptrToInt(hdrp), @ptrToInt(datap)); + return syscall2(.capget, @intFromPtr(hdrp), @intFromPtr(datap)); } pub fn capset(hdrp: *cap_user_header_t, datap: *const cap_user_data_t) usize { - return syscall2(.capset, @ptrToInt(hdrp), @ptrToInt(datap)); + return syscall2(.capset, @intFromPtr(hdrp), @intFromPtr(datap)); } pub fn sigaltstack(ss: ?*stack_t, old_ss: ?*stack_t) usize { - return syscall2(.sigaltstack, @ptrToInt(ss), @ptrToInt(old_ss)); + return syscall2(.sigaltstack, @intFromPtr(ss), @intFromPtr(old_ss)); } pub fn uname(uts: *utsname) usize { - return syscall1(.uname, @ptrToInt(uts)); + return syscall1(.uname, @intFromPtr(uts)); } pub fn io_uring_setup(entries: u32, p: *io_uring_params) usize { - return syscall2(.io_uring_setup, entries, @ptrToInt(p)); + return syscall2(.io_uring_setup, entries, @intFromPtr(p)); } pub fn io_uring_enter(fd: i32, to_submit: u32, min_complete: u32, flags: u32, sig: ?*sigset_t) usize { - return syscall6(.io_uring_enter, @bitCast(usize, @as(isize, fd)), to_submit, min_complete, flags, @ptrToInt(sig), NSIG / 8); + return syscall6(.io_uring_enter, @bitCast(usize, @as(isize, fd)), to_submit, min_complete, flags, @intFromPtr(sig), NSIG / 8); } pub fn io_uring_register(fd: i32, opcode: IORING_REGISTER, arg: ?*const anyopaque, nr_args: u32) usize { - return syscall4(.io_uring_register, @bitCast(usize, @as(isize, fd)), @enumToInt(opcode), @ptrToInt(arg), nr_args); + return syscall4(.io_uring_register, @bitCast(usize, @as(isize, fd)), @intFromEnum(opcode), @intFromPtr(arg), nr_args); } pub fn memfd_create(name: [*:0]const u8, flags: u32) usize { - return syscall2(.memfd_create, @ptrToInt(name), flags); + return syscall2(.memfd_create, @intFromPtr(name), flags); } pub fn getrusage(who: i32, usage: *rusage) usize { - return syscall2(.getrusage, @bitCast(usize, @as(isize, who)), @ptrToInt(usage)); + return syscall2(.getrusage, @bitCast(usize, @as(isize, who)), @intFromPtr(usage)); } pub fn tcgetattr(fd: fd_t, termios_p: *termios) usize { - return syscall3(.ioctl, @bitCast(usize, @as(isize, fd)), T.CGETS, @ptrToInt(termios_p)); + return syscall3(.ioctl, @bitCast(usize, @as(isize, fd)), T.CGETS, @intFromPtr(termios_p)); } pub fn tcsetattr(fd: fd_t, optional_action: TCSA, termios_p: *const termios) usize { - return syscall3(.ioctl, @bitCast(usize, @as(isize, fd)), T.CSETS + @enumToInt(optional_action), @ptrToInt(termios_p)); + return syscall3(.ioctl, @bitCast(usize, @as(isize, fd)), T.CSETS + @intFromEnum(optional_action), @intFromPtr(termios_p)); } pub fn tcgetpgrp(fd: fd_t, pgrp: *pid_t) usize { - return syscall3(.ioctl, @bitCast(usize, @as(isize, fd)), T.IOCGPGRP, @ptrToInt(pgrp)); + return syscall3(.ioctl, @bitCast(usize, @as(isize, fd)), T.IOCGPGRP, @intFromPtr(pgrp)); } pub fn tcsetpgrp(fd: fd_t, pgrp: *const pid_t) usize { - return syscall3(.ioctl, @bitCast(usize, @as(isize, fd)), T.IOCSPGRP, @ptrToInt(pgrp)); + return syscall3(.ioctl, @bitCast(usize, @as(isize, fd)), T.IOCSPGRP, @intFromPtr(pgrp)); } pub fn tcdrain(fd: fd_t) usize { @@ -1707,23 +1707,23 @@ pub fn ioctl(fd: fd_t, request: u32, arg: usize) usize { } pub fn signalfd(fd: fd_t, mask: *const sigset_t, flags: u32) usize { - return syscall4(.signalfd4, @bitCast(usize, @as(isize, fd)), @ptrToInt(mask), NSIG / 8, flags); + return syscall4(.signalfd4, @bitCast(usize, @as(isize, fd)), @intFromPtr(mask), NSIG / 8, flags); } pub fn copy_file_range(fd_in: fd_t, off_in: ?*i64, fd_out: fd_t, off_out: ?*i64, len: usize, flags: u32) usize { return syscall6( .copy_file_range, @bitCast(usize, @as(isize, fd_in)), - @ptrToInt(off_in), + @intFromPtr(off_in), @bitCast(usize, @as(isize, fd_out)), - @ptrToInt(off_out), + @intFromPtr(off_out), len, flags, ); } pub fn bpf(cmd: BPF.Cmd, attr: *BPF.Attr, size: u32) usize { - return syscall3(.bpf, @enumToInt(cmd), @ptrToInt(attr), size); + return syscall3(.bpf, @intFromEnum(cmd), @intFromPtr(attr), size); } pub fn sync() void { @@ -1760,18 +1760,18 @@ pub fn prlimit(pid: pid_t, resource: rlimit_resource, new_limit: ?*const rlimit, return syscall4( .prlimit64, @bitCast(usize, @as(isize, pid)), - @bitCast(usize, @as(isize, @enumToInt(resource))), - @ptrToInt(new_limit), - @ptrToInt(old_limit), + @bitCast(usize, @as(isize, @intFromEnum(resource))), + @intFromPtr(new_limit), + @intFromPtr(old_limit), ); } pub fn mincore(address: [*]u8, len: usize, vec: [*]u8) usize { - return syscall3(.mincore, @ptrToInt(address), len, @ptrToInt(vec)); + return syscall3(.mincore, @intFromPtr(address), len, @intFromPtr(vec)); } pub fn madvise(address: [*]u8, len: usize, advice: u32) usize { - return syscall3(.madvise, @ptrToInt(address), len, advice); + return syscall3(.madvise, @intFromPtr(address), len, advice); } pub fn pidfd_open(pid: pid_t, flags: u32) usize { @@ -1792,7 +1792,7 @@ pub fn pidfd_send_signal(pidfd: fd_t, sig: i32, info: ?*siginfo_t, flags: u32) u .pidfd_send_signal, @bitCast(usize, @as(isize, pidfd)), @bitCast(usize, @as(isize, sig)), - @ptrToInt(info), + @intFromPtr(info), flags, ); } @@ -1801,9 +1801,9 @@ pub fn process_vm_readv(pid: pid_t, local: []iovec, remote: []const iovec_const, return syscall6( .process_vm_readv, @bitCast(usize, @as(isize, pid)), - @ptrToInt(local.ptr), + @intFromPtr(local.ptr), local.len, - @ptrToInt(remote.ptr), + @intFromPtr(remote.ptr), remote.len, flags, ); @@ -1813,9 +1813,9 @@ pub fn process_vm_writev(pid: pid_t, local: []const iovec_const, remote: []const return syscall6( .process_vm_writev, @bitCast(usize, @as(isize, pid)), - @ptrToInt(local.ptr), + @intFromPtr(local.ptr), local.len, - @ptrToInt(remote.ptr), + @intFromPtr(remote.ptr), remote.len, flags, ); @@ -1889,7 +1889,7 @@ pub fn perf_event_open( ) usize { return syscall5( .perf_event_open, - @ptrToInt(attr), + @intFromPtr(attr), @bitCast(usize, @as(isize, pid)), @bitCast(usize, @as(isize, cpu)), @bitCast(usize, @as(isize, group_fd)), @@ -1898,7 +1898,7 @@ pub fn perf_event_open( } pub fn seccomp(operation: u32, flags: u32, args: ?*const anyopaque) usize { - return syscall3(.seccomp, operation, flags, @ptrToInt(args)); + return syscall3(.seccomp, operation, flags, @intFromPtr(args)); } pub fn ptrace( @@ -2154,9 +2154,9 @@ pub const SIG = if (is_mips) struct { pub const SYS = 31; pub const UNUSED = SIG.SYS; - pub const ERR = @intToPtr(?Sigaction.handler_fn, maxInt(usize)); - pub const DFL = @intToPtr(?Sigaction.handler_fn, 0); - pub const IGN = @intToPtr(?Sigaction.handler_fn, 1); + pub const ERR = @ptrFromInt(?Sigaction.handler_fn, maxInt(usize)); + pub const DFL = @ptrFromInt(?Sigaction.handler_fn, 0); + pub const IGN = @ptrFromInt(?Sigaction.handler_fn, 1); } else if (is_sparc) struct { pub const BLOCK = 1; pub const UNBLOCK = 2; @@ -2198,9 +2198,9 @@ pub const SIG = if (is_mips) struct { pub const PWR = LOST; pub const IO = SIG.POLL; - pub const ERR = @intToPtr(?Sigaction.handler_fn, maxInt(usize)); - pub const DFL = @intToPtr(?Sigaction.handler_fn, 0); - pub const IGN = @intToPtr(?Sigaction.handler_fn, 1); + pub const ERR = @ptrFromInt(?Sigaction.handler_fn, maxInt(usize)); + pub const DFL = @ptrFromInt(?Sigaction.handler_fn, 0); + pub const IGN = @ptrFromInt(?Sigaction.handler_fn, 1); } else struct { pub const BLOCK = 0; pub const UNBLOCK = 1; @@ -2241,9 +2241,9 @@ pub const SIG = if (is_mips) struct { pub const SYS = 31; pub const UNUSED = SIG.SYS; - pub const ERR = @intToPtr(?Sigaction.handler_fn, maxInt(usize)); - pub const DFL = @intToPtr(?Sigaction.handler_fn, 0); - pub const IGN = @intToPtr(?Sigaction.handler_fn, 1); + pub const ERR = @ptrFromInt(?Sigaction.handler_fn, maxInt(usize)); + pub const DFL = @ptrFromInt(?Sigaction.handler_fn, 0); + pub const IGN = @ptrFromInt(?Sigaction.handler_fn, 1); }; pub const kernel_rwf = u32; @@ -3876,26 +3876,26 @@ pub const IOSQE_BIT = enum(u8) { // io_uring_sqe.flags /// use fixed fileset -pub const IOSQE_FIXED_FILE = 1 << @enumToInt(IOSQE_BIT.FIXED_FILE); +pub const IOSQE_FIXED_FILE = 1 << @intFromEnum(IOSQE_BIT.FIXED_FILE); /// issue after inflight IO -pub const IOSQE_IO_DRAIN = 1 << @enumToInt(IOSQE_BIT.IO_DRAIN); +pub const IOSQE_IO_DRAIN = 1 << @intFromEnum(IOSQE_BIT.IO_DRAIN); /// links next sqe -pub const IOSQE_IO_LINK = 1 << @enumToInt(IOSQE_BIT.IO_LINK); +pub const IOSQE_IO_LINK = 1 << @intFromEnum(IOSQE_BIT.IO_LINK); /// like LINK, but stronger -pub const IOSQE_IO_HARDLINK = 1 << @enumToInt(IOSQE_BIT.IO_HARDLINK); +pub const IOSQE_IO_HARDLINK = 1 << @intFromEnum(IOSQE_BIT.IO_HARDLINK); /// always go async -pub const IOSQE_ASYNC = 1 << @enumToInt(IOSQE_BIT.ASYNC); +pub const IOSQE_ASYNC = 1 << @intFromEnum(IOSQE_BIT.ASYNC); /// select buffer from buf_group -pub const IOSQE_BUFFER_SELECT = 1 << @enumToInt(IOSQE_BIT.BUFFER_SELECT); +pub const IOSQE_BUFFER_SELECT = 1 << @intFromEnum(IOSQE_BIT.BUFFER_SELECT); /// don't post CQE if request succeeded /// Available since Linux 5.17 -pub const IOSQE_CQE_SKIP_SUCCESS = 1 << @enumToInt(IOSQE_BIT.CQE_SKIP_SUCCESS); +pub const IOSQE_CQE_SKIP_SUCCESS = 1 << @intFromEnum(IOSQE_BIT.CQE_SKIP_SUCCESS); pub const IORING_OP = enum(u8) { NOP, @@ -3999,7 +3999,7 @@ pub const io_uring_cqe = extern struct { pub fn err(self: io_uring_cqe) E { if (self.res > -4096 and self.res < 0) { - return @intToEnum(E, -self.res); + return @enumFromInt(E, -self.res); } return .SUCCESS; } @@ -5827,7 +5827,7 @@ pub const AUDIT = struct { ARM = toAudit(.arm), ARMEB = toAudit(.armeb), CSKY = toAudit(.csky), - HEXAGON = @enumToInt(std.elf.EM.HEXAGON), + HEXAGON = @intFromEnum(std.elf.EM.HEXAGON), X86 = toAudit(.x86), M68K = toAudit(.m68k), MIPS = toAudit(.mips), @@ -5845,7 +5845,7 @@ pub const AUDIT = struct { X86_64 = toAudit(.x86_64), fn toAudit(arch: std.Target.Cpu.Arch) u32 { - var res: u32 = @enumToInt(arch.toElfMachine()); + var res: u32 = @intFromEnum(arch.toElfMachine()); if (arch.endian() == .Little) res |= LE; switch (arch) { .aarch64, diff --git a/lib/std/os/linux/arm-eabi.zig b/lib/std/os/linux/arm-eabi.zig index 92d0fcfb44..057ecc763a 100644 --- a/lib/std/os/linux/arm-eabi.zig +++ b/lib/std/os/linux/arm-eabi.zig @@ -16,7 +16,7 @@ const timespec = linux.timespec; pub fn syscall0(number: SYS) usize { return asm volatile ("svc #0" : [ret] "={r0}" (-> usize), - : [number] "{r7}" (@enumToInt(number)), + : [number] "{r7}" (@intFromEnum(number)), : "memory" ); } @@ -24,7 +24,7 @@ pub fn syscall0(number: SYS) usize { pub fn syscall1(number: SYS, arg1: usize) usize { return asm volatile ("svc #0" : [ret] "={r0}" (-> usize), - : [number] "{r7}" (@enumToInt(number)), + : [number] "{r7}" (@intFromEnum(number)), [arg1] "{r0}" (arg1), : "memory" ); @@ -33,7 +33,7 @@ pub fn syscall1(number: SYS, arg1: usize) usize { pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize { return asm volatile ("svc #0" : [ret] "={r0}" (-> usize), - : [number] "{r7}" (@enumToInt(number)), + : [number] "{r7}" (@intFromEnum(number)), [arg1] "{r0}" (arg1), [arg2] "{r1}" (arg2), : "memory" @@ -43,7 +43,7 @@ pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize { pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize { return asm volatile ("svc #0" : [ret] "={r0}" (-> usize), - : [number] "{r7}" (@enumToInt(number)), + : [number] "{r7}" (@intFromEnum(number)), [arg1] "{r0}" (arg1), [arg2] "{r1}" (arg2), [arg3] "{r2}" (arg3), @@ -54,7 +54,7 @@ pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize { pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize) usize { return asm volatile ("svc #0" : [ret] "={r0}" (-> usize), - : [number] "{r7}" (@enumToInt(number)), + : [number] "{r7}" (@intFromEnum(number)), [arg1] "{r0}" (arg1), [arg2] "{r1}" (arg2), [arg3] "{r2}" (arg3), @@ -66,7 +66,7 @@ pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize) pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize, arg5: usize) usize { return asm volatile ("svc #0" : [ret] "={r0}" (-> usize), - : [number] "{r7}" (@enumToInt(number)), + : [number] "{r7}" (@intFromEnum(number)), [arg1] "{r0}" (arg1), [arg2] "{r1}" (arg2), [arg3] "{r2}" (arg3), @@ -87,7 +87,7 @@ pub fn syscall6( ) usize { return asm volatile ("svc #0" : [ret] "={r0}" (-> usize), - : [number] "{r7}" (@enumToInt(number)), + : [number] "{r7}" (@intFromEnum(number)), [arg1] "{r0}" (arg1), [arg2] "{r1}" (arg2), [arg3] "{r2}" (arg3), @@ -106,7 +106,7 @@ pub extern fn clone(func: CloneFn, stack: usize, flags: u32, arg: usize, ptid: * pub fn restore() callconv(.Naked) void { return asm volatile ("svc #0" : - : [number] "{r7}" (@enumToInt(SYS.sigreturn)), + : [number] "{r7}" (@intFromEnum(SYS.sigreturn)), : "memory" ); } @@ -114,7 +114,7 @@ pub fn restore() callconv(.Naked) void { pub fn restore_rt() callconv(.Naked) void { return asm volatile ("svc #0" : - : [number] "{r7}" (@enumToInt(SYS.rt_sigreturn)), + : [number] "{r7}" (@intFromEnum(SYS.rt_sigreturn)), : "memory" ); } diff --git a/lib/std/os/linux/arm64.zig b/lib/std/os/linux/arm64.zig index 9f91960791..0824a9e9a4 100644 --- a/lib/std/os/linux/arm64.zig +++ b/lib/std/os/linux/arm64.zig @@ -16,7 +16,7 @@ const timespec = std.os.linux.timespec; pub fn syscall0(number: SYS) usize { return asm volatile ("svc #0" : [ret] "={x0}" (-> usize), - : [number] "{x8}" (@enumToInt(number)), + : [number] "{x8}" (@intFromEnum(number)), : "memory", "cc" ); } @@ -24,7 +24,7 @@ pub fn syscall0(number: SYS) usize { pub fn syscall1(number: SYS, arg1: usize) usize { return asm volatile ("svc #0" : [ret] "={x0}" (-> usize), - : [number] "{x8}" (@enumToInt(number)), + : [number] "{x8}" (@intFromEnum(number)), [arg1] "{x0}" (arg1), : "memory", "cc" ); @@ -33,7 +33,7 @@ pub fn syscall1(number: SYS, arg1: usize) usize { pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize { return asm volatile ("svc #0" : [ret] "={x0}" (-> usize), - : [number] "{x8}" (@enumToInt(number)), + : [number] "{x8}" (@intFromEnum(number)), [arg1] "{x0}" (arg1), [arg2] "{x1}" (arg2), : "memory", "cc" @@ -43,7 +43,7 @@ pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize { pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize { return asm volatile ("svc #0" : [ret] "={x0}" (-> usize), - : [number] "{x8}" (@enumToInt(number)), + : [number] "{x8}" (@intFromEnum(number)), [arg1] "{x0}" (arg1), [arg2] "{x1}" (arg2), [arg3] "{x2}" (arg3), @@ -54,7 +54,7 @@ pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize { pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize) usize { return asm volatile ("svc #0" : [ret] "={x0}" (-> usize), - : [number] "{x8}" (@enumToInt(number)), + : [number] "{x8}" (@intFromEnum(number)), [arg1] "{x0}" (arg1), [arg2] "{x1}" (arg2), [arg3] "{x2}" (arg3), @@ -66,7 +66,7 @@ pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize) pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize, arg5: usize) usize { return asm volatile ("svc #0" : [ret] "={x0}" (-> usize), - : [number] "{x8}" (@enumToInt(number)), + : [number] "{x8}" (@intFromEnum(number)), [arg1] "{x0}" (arg1), [arg2] "{x1}" (arg2), [arg3] "{x2}" (arg3), @@ -87,7 +87,7 @@ pub fn syscall6( ) usize { return asm volatile ("svc #0" : [ret] "={x0}" (-> usize), - : [number] "{x8}" (@enumToInt(number)), + : [number] "{x8}" (@intFromEnum(number)), [arg1] "{x0}" (arg1), [arg2] "{x1}" (arg2), [arg3] "{x2}" (arg3), @@ -111,12 +111,12 @@ pub fn restore_rt() callconv(.Naked) void { \\ mov x8, %[number] \\ svc #0 : - : [number] "i" (@enumToInt(SYS.rt_sigreturn)), + : [number] "i" (@intFromEnum(SYS.rt_sigreturn)), : "memory", "cc" ), else => return asm volatile ("svc #0" : - : [number] "{x8}" (@enumToInt(SYS.rt_sigreturn)), + : [number] "{x8}" (@intFromEnum(SYS.rt_sigreturn)), : "memory", "cc" ), } diff --git a/lib/std/os/linux/bpf.zig b/lib/std/os/linux/bpf.zig index 9f9e253547..87b92587f9 100644 --- a/lib/std/os/linux/bpf.zig +++ b/lib/std/os/linux/bpf.zig @@ -472,10 +472,10 @@ pub const Insn = packed struct { return Insn{ .code = code | src_type, - .dst = @enumToInt(dst), + .dst = @intFromEnum(dst), .src = switch (imm_or_reg) { .imm => 0, - .reg => |r| @enumToInt(r), + .reg => |r| @intFromEnum(r), }, .off = off, .imm = switch (imm_or_reg) { @@ -492,7 +492,7 @@ pub const Insn = packed struct { else => @compileError("width must be 32 or 64"), }; - return imm_reg(width_bitfield | @enumToInt(op), dst, src, 0); + return imm_reg(width_bitfield | @intFromEnum(op), dst, src, 0); } pub fn mov(dst: Reg, src: anytype) Insn { @@ -548,7 +548,7 @@ pub const Insn = packed struct { } pub fn jmp(op: JmpOp, dst: Reg, src: anytype, off: i16) Insn { - return imm_reg(JMP | @enumToInt(op), dst, src, off); + return imm_reg(JMP | @intFromEnum(op), dst, src, off); } pub fn ja(off: i16) Insn { @@ -602,8 +602,8 @@ pub const Insn = packed struct { pub fn xadd(dst: Reg, src: Reg) Insn { return Insn{ .code = STX | XADD | DW, - .dst = @enumToInt(dst), - .src = @enumToInt(src), + .dst = @intFromEnum(dst), + .src = @intFromEnum(src), .off = 0, .imm = 0, }; @@ -611,9 +611,9 @@ pub const Insn = packed struct { fn ld(mode: Mode, size: Size, dst: Reg, src: Reg, imm: i32) Insn { return Insn{ - .code = @enumToInt(mode) | @enumToInt(size) | LD, - .dst = @enumToInt(dst), - .src = @enumToInt(src), + .code = @intFromEnum(mode) | @intFromEnum(size) | LD, + .dst = @intFromEnum(dst), + .src = @intFromEnum(src), .off = 0, .imm = imm, }; @@ -629,9 +629,9 @@ pub const Insn = packed struct { pub fn ldx(size: Size, dst: Reg, src: Reg, off: i16) Insn { return Insn{ - .code = MEM | @enumToInt(size) | LDX, - .dst = @enumToInt(dst), - .src = @enumToInt(src), + .code = MEM | @intFromEnum(size) | LDX, + .dst = @intFromEnum(dst), + .src = @intFromEnum(src), .off = off, .imm = 0, }; @@ -640,8 +640,8 @@ pub const Insn = packed struct { fn ld_imm_impl1(dst: Reg, src: Reg, imm: u64) Insn { return Insn{ .code = LD | DW | IMM, - .dst = @enumToInt(dst), - .src = @enumToInt(src), + .dst = @intFromEnum(dst), + .src = @intFromEnum(src), .off = 0, .imm = @intCast(i32, @truncate(u32, imm)), }; @@ -666,7 +666,7 @@ pub const Insn = packed struct { } pub fn ld_map_fd1(dst: Reg, map_fd: fd_t) Insn { - return ld_imm_impl1(dst, @intToEnum(Reg, PSEUDO_MAP_FD), @intCast(u64, map_fd)); + return ld_imm_impl1(dst, @enumFromInt(Reg, PSEUDO_MAP_FD), @intCast(u64, map_fd)); } pub fn ld_map_fd2(map_fd: fd_t) Insn { @@ -675,8 +675,8 @@ pub const Insn = packed struct { pub fn st(comptime size: Size, dst: Reg, off: i16, imm: i32) Insn { return Insn{ - .code = MEM | @enumToInt(size) | ST, - .dst = @enumToInt(dst), + .code = MEM | @intFromEnum(size) | ST, + .dst = @intFromEnum(dst), .src = 0, .off = off, .imm = imm, @@ -685,9 +685,9 @@ pub const Insn = packed struct { pub fn stx(size: Size, dst: Reg, off: i16, src: Reg) Insn { return Insn{ - .code = MEM | @enumToInt(size) | STX, - .dst = @enumToInt(dst), - .src = @enumToInt(src), + .code = MEM | @intFromEnum(size) | STX, + .dst = @intFromEnum(dst), + .src = @intFromEnum(src), .off = off, .imm = 0, }; @@ -699,7 +699,7 @@ pub const Insn = packed struct { .Big => 0xdc, .Little => 0xd4, }, - .dst = @enumToInt(dst), + .dst = @intFromEnum(dst), .src = 0, .off = 0, .imm = switch (size) { @@ -725,7 +725,7 @@ pub const Insn = packed struct { .dst = 0, .src = 0, .off = 0, - .imm = @enumToInt(helper), + .imm = @intFromEnum(helper), }; } @@ -1511,7 +1511,7 @@ pub fn map_create(map_type: MapType, key_size: u32, value_size: u32, max_entries .map_create = std.mem.zeroes(MapCreateAttr), }; - attr.map_create.map_type = @enumToInt(map_type); + attr.map_create.map_type = @intFromEnum(map_type); attr.map_create.key_size = key_size; attr.map_create.value_size = value_size; attr.map_create.max_entries = max_entries; @@ -1537,8 +1537,8 @@ pub fn map_lookup_elem(fd: fd_t, key: []const u8, value: []u8) !void { }; attr.map_elem.map_fd = fd; - attr.map_elem.key = @ptrToInt(key.ptr); - attr.map_elem.result.value = @ptrToInt(value.ptr); + attr.map_elem.key = @intFromPtr(key.ptr); + attr.map_elem.result.value = @intFromPtr(value.ptr); const rc = linux.bpf(.map_lookup_elem, &attr, @sizeOf(MapElemAttr)); switch (errno(rc)) { @@ -1558,8 +1558,8 @@ pub fn map_update_elem(fd: fd_t, key: []const u8, value: []const u8, flags: u64) }; attr.map_elem.map_fd = fd; - attr.map_elem.key = @ptrToInt(key.ptr); - attr.map_elem.result = .{ .value = @ptrToInt(value.ptr) }; + attr.map_elem.key = @intFromPtr(key.ptr); + attr.map_elem.result = .{ .value = @intFromPtr(value.ptr) }; attr.map_elem.flags = flags; const rc = linux.bpf(.map_update_elem, &attr, @sizeOf(MapElemAttr)); @@ -1581,7 +1581,7 @@ pub fn map_delete_elem(fd: fd_t, key: []const u8) !void { }; attr.map_elem.map_fd = fd; - attr.map_elem.key = @ptrToInt(key.ptr); + attr.map_elem.key = @intFromPtr(key.ptr); const rc = linux.bpf(.map_delete_elem, &attr, @sizeOf(MapElemAttr)); switch (errno(rc)) { @@ -1601,8 +1601,8 @@ pub fn map_get_next_key(fd: fd_t, key: []const u8, next_key: []u8) !bool { }; attr.map_elem.map_fd = fd; - attr.map_elem.key = @ptrToInt(key.ptr); - attr.map_elem.result.next_key = @ptrToInt(next_key.ptr); + attr.map_elem.key = @intFromPtr(key.ptr); + attr.map_elem.result.next_key = @intFromPtr(next_key.ptr); const rc = linux.bpf(.map_get_next_key, &attr, @sizeOf(MapElemAttr)); switch (errno(rc)) { @@ -1666,15 +1666,15 @@ pub fn prog_load( .prog_load = std.mem.zeroes(ProgLoadAttr), }; - attr.prog_load.prog_type = @enumToInt(prog_type); - attr.prog_load.insns = @ptrToInt(insns.ptr); + attr.prog_load.prog_type = @intFromEnum(prog_type); + attr.prog_load.insns = @intFromPtr(insns.ptr); attr.prog_load.insn_cnt = @intCast(u32, insns.len); - attr.prog_load.license = @ptrToInt(license.ptr); + attr.prog_load.license = @intFromPtr(license.ptr); attr.prog_load.kern_version = kern_version; attr.prog_load.prog_flags = flags; if (log) |l| { - attr.prog_load.log_buf = @ptrToInt(l.buf.ptr); + attr.prog_load.log_buf = @intFromPtr(l.buf.ptr); attr.prog_load.log_size = @intCast(u32, l.buf.len); attr.prog_load.log_level = l.level; } diff --git a/lib/std/os/linux/bpf/helpers.zig b/lib/std/os/linux/bpf/helpers.zig index 6084b01e6c..b26e7eda29 100644 --- a/lib/std/os/linux/bpf/helpers.zig +++ b/lib/std/os/linux/bpf/helpers.zig @@ -11,147 +11,147 @@ const SkFullSock = @compileError("TODO missing os bits: SkFullSock"); // // Note, these function signatures were created from documentation found in // '/usr/include/linux/bpf.h' -pub const map_lookup_elem = @intToPtr(*const fn (map: *const kern.MapDef, key: ?*const anyopaque) ?*anyopaque, 1); -pub const map_update_elem = @intToPtr(*const fn (map: *const kern.MapDef, key: ?*const anyopaque, value: ?*const anyopaque, flags: u64) c_long, 2); -pub const map_delete_elem = @intToPtr(*const fn (map: *const kern.MapDef, key: ?*const anyopaque) c_long, 3); -pub const probe_read = @intToPtr(*const fn (dst: ?*anyopaque, size: u32, unsafe_ptr: ?*const anyopaque) c_long, 4); -pub const ktime_get_ns = @intToPtr(*const fn () u64, 5); -pub const trace_printk = @intToPtr(*const fn (fmt: [*:0]const u8, fmt_size: u32, arg1: u64, arg2: u64, arg3: u64) c_long, 6); -pub const get_prandom_u32 = @intToPtr(*const fn () u32, 7); -pub const get_smp_processor_id = @intToPtr(*const fn () u32, 8); -pub const skb_store_bytes = @intToPtr(*const fn (skb: *kern.SkBuff, offset: u32, from: ?*const anyopaque, len: u32, flags: u64) c_long, 9); -pub const l3_csum_replace = @intToPtr(*const fn (skb: *kern.SkBuff, offset: u32, from: u64, to: u64, size: u64) c_long, 10); -pub const l4_csum_replace = @intToPtr(*const fn (skb: *kern.SkBuff, offset: u32, from: u64, to: u64, flags: u64) c_long, 11); -pub const tail_call = @intToPtr(*const fn (ctx: ?*anyopaque, prog_array_map: *const kern.MapDef, index: u32) c_long, 12); -pub const clone_redirect = @intToPtr(*const fn (skb: *kern.SkBuff, ifindex: u32, flags: u64) c_long, 13); -pub const get_current_pid_tgid = @intToPtr(*const fn () u64, 14); -pub const get_current_uid_gid = @intToPtr(*const fn () u64, 15); -pub const get_current_comm = @intToPtr(*const fn (buf: ?*anyopaque, size_of_buf: u32) c_long, 16); -pub const get_cgroup_classid = @intToPtr(*const fn (skb: *kern.SkBuff) u32, 17); +pub const map_lookup_elem = @ptrFromInt(*const fn (map: *const kern.MapDef, key: ?*const anyopaque) ?*anyopaque, 1); +pub const map_update_elem = @ptrFromInt(*const fn (map: *const kern.MapDef, key: ?*const anyopaque, value: ?*const anyopaque, flags: u64) c_long, 2); +pub const map_delete_elem = @ptrFromInt(*const fn (map: *const kern.MapDef, key: ?*const anyopaque) c_long, 3); +pub const probe_read = @ptrFromInt(*const fn (dst: ?*anyopaque, size: u32, unsafe_ptr: ?*const anyopaque) c_long, 4); +pub const ktime_get_ns = @ptrFromInt(*const fn () u64, 5); +pub const trace_printk = @ptrFromInt(*const fn (fmt: [*:0]const u8, fmt_size: u32, arg1: u64, arg2: u64, arg3: u64) c_long, 6); +pub const get_prandom_u32 = @ptrFromInt(*const fn () u32, 7); +pub const get_smp_processor_id = @ptrFromInt(*const fn () u32, 8); +pub const skb_store_bytes = @ptrFromInt(*const fn (skb: *kern.SkBuff, offset: u32, from: ?*const anyopaque, len: u32, flags: u64) c_long, 9); +pub const l3_csum_replace = @ptrFromInt(*const fn (skb: *kern.SkBuff, offset: u32, from: u64, to: u64, size: u64) c_long, 10); +pub const l4_csum_replace = @ptrFromInt(*const fn (skb: *kern.SkBuff, offset: u32, from: u64, to: u64, flags: u64) c_long, 11); +pub const tail_call = @ptrFromInt(*const fn (ctx: ?*anyopaque, prog_array_map: *const kern.MapDef, index: u32) c_long, 12); +pub const clone_redirect = @ptrFromInt(*const fn (skb: *kern.SkBuff, ifindex: u32, flags: u64) c_long, 13); +pub const get_current_pid_tgid = @ptrFromInt(*const fn () u64, 14); +pub const get_current_uid_gid = @ptrFromInt(*const fn () u64, 15); +pub const get_current_comm = @ptrFromInt(*const fn (buf: ?*anyopaque, size_of_buf: u32) c_long, 16); +pub const get_cgroup_classid = @ptrFromInt(*const fn (skb: *kern.SkBuff) u32, 17); // Note vlan_proto is big endian -pub const skb_vlan_push = @intToPtr(*const fn (skb: *kern.SkBuff, vlan_proto: u16, vlan_tci: u16) c_long, 18); -pub const skb_vlan_pop = @intToPtr(*const fn (skb: *kern.SkBuff) c_long, 19); -pub const skb_get_tunnel_key = @intToPtr(*const fn (skb: *kern.SkBuff, key: *kern.TunnelKey, size: u32, flags: u64) c_long, 20); -pub const skb_set_tunnel_key = @intToPtr(*const fn (skb: *kern.SkBuff, key: *kern.TunnelKey, size: u32, flags: u64) c_long, 21); -pub const perf_event_read = @intToPtr(*const fn (map: *const kern.MapDef, flags: u64) u64, 22); -pub const redirect = @intToPtr(*const fn (ifindex: u32, flags: u64) c_long, 23); -pub const get_route_realm = @intToPtr(*const fn (skb: *kern.SkBuff) u32, 24); -pub const perf_event_output = @intToPtr(*const fn (ctx: ?*anyopaque, map: *const kern.MapDef, flags: u64, data: ?*anyopaque, size: u64) c_long, 25); -pub const skb_load_bytes = @intToPtr(*const fn (skb: ?*anyopaque, offset: u32, to: ?*anyopaque, len: u32) c_long, 26); -pub const get_stackid = @intToPtr(*const fn (ctx: ?*anyopaque, map: *const kern.MapDef, flags: u64) c_long, 27); +pub const skb_vlan_push = @ptrFromInt(*const fn (skb: *kern.SkBuff, vlan_proto: u16, vlan_tci: u16) c_long, 18); +pub const skb_vlan_pop = @ptrFromInt(*const fn (skb: *kern.SkBuff) c_long, 19); +pub const skb_get_tunnel_key = @ptrFromInt(*const fn (skb: *kern.SkBuff, key: *kern.TunnelKey, size: u32, flags: u64) c_long, 20); +pub const skb_set_tunnel_key = @ptrFromInt(*const fn (skb: *kern.SkBuff, key: *kern.TunnelKey, size: u32, flags: u64) c_long, 21); +pub const perf_event_read = @ptrFromInt(*const fn (map: *const kern.MapDef, flags: u64) u64, 22); +pub const redirect = @ptrFromInt(*const fn (ifindex: u32, flags: u64) c_long, 23); +pub const get_route_realm = @ptrFromInt(*const fn (skb: *kern.SkBuff) u32, 24); +pub const perf_event_output = @ptrFromInt(*const fn (ctx: ?*anyopaque, map: *const kern.MapDef, flags: u64, data: ?*anyopaque, size: u64) c_long, 25); +pub const skb_load_bytes = @ptrFromInt(*const fn (skb: ?*anyopaque, offset: u32, to: ?*anyopaque, len: u32) c_long, 26); +pub const get_stackid = @ptrFromInt(*const fn (ctx: ?*anyopaque, map: *const kern.MapDef, flags: u64) c_long, 27); // from and to point to __be32 -pub const csum_diff = @intToPtr(*const fn (from: *u32, from_size: u32, to: *u32, to_size: u32, seed: u32) i64, 28); -pub const skb_get_tunnel_opt = @intToPtr(*const fn (skb: *kern.SkBuff, opt: ?*anyopaque, size: u32) c_long, 29); -pub const skb_set_tunnel_opt = @intToPtr(*const fn (skb: *kern.SkBuff, opt: ?*anyopaque, size: u32) c_long, 30); +pub const csum_diff = @ptrFromInt(*const fn (from: *u32, from_size: u32, to: *u32, to_size: u32, seed: u32) i64, 28); +pub const skb_get_tunnel_opt = @ptrFromInt(*const fn (skb: *kern.SkBuff, opt: ?*anyopaque, size: u32) c_long, 29); +pub const skb_set_tunnel_opt = @ptrFromInt(*const fn (skb: *kern.SkBuff, opt: ?*anyopaque, size: u32) c_long, 30); // proto is __be16 -pub const skb_change_proto = @intToPtr(*const fn (skb: *kern.SkBuff, proto: u16, flags: u64) c_long, 31); -pub const skb_change_type = @intToPtr(*const fn (skb: *kern.SkBuff, skb_type: u32) c_long, 32); -pub const skb_under_cgroup = @intToPtr(*const fn (skb: *kern.SkBuff, map: ?*const anyopaque, index: u32) c_long, 33); -pub const get_hash_recalc = @intToPtr(*const fn (skb: *kern.SkBuff) u32, 34); -pub const get_current_task = @intToPtr(*const fn () u64, 35); -pub const probe_write_user = @intToPtr(*const fn (dst: ?*anyopaque, src: ?*const anyopaque, len: u32) c_long, 36); -pub const current_task_under_cgroup = @intToPtr(*const fn (map: *const kern.MapDef, index: u32) c_long, 37); -pub const skb_change_tail = @intToPtr(*const fn (skb: *kern.SkBuff, len: u32, flags: u64) c_long, 38); -pub const skb_pull_data = @intToPtr(*const fn (skb: *kern.SkBuff, len: u32) c_long, 39); -pub const csum_update = @intToPtr(*const fn (skb: *kern.SkBuff, csum: u32) i64, 40); -pub const set_hash_invalid = @intToPtr(*const fn (skb: *kern.SkBuff) void, 41); -pub const get_numa_node_id = @intToPtr(*const fn () c_long, 42); -pub const skb_change_head = @intToPtr(*const fn (skb: *kern.SkBuff, len: u32, flags: u64) c_long, 43); -pub const xdp_adjust_head = @intToPtr(*const fn (xdp_md: *kern.XdpMd, delta: c_int) c_long, 44); -pub const probe_read_str = @intToPtr(*const fn (dst: ?*anyopaque, size: u32, unsafe_ptr: ?*const anyopaque) c_long, 45); -pub const get_socket_cookie = @intToPtr(*const fn (ctx: ?*anyopaque) u64, 46); -pub const get_socket_uid = @intToPtr(*const fn (skb: *kern.SkBuff) u32, 47); -pub const set_hash = @intToPtr(*const fn (skb: *kern.SkBuff, hash: u32) c_long, 48); -pub const setsockopt = @intToPtr(*const fn (bpf_socket: *kern.SockOps, level: c_int, optname: c_int, optval: ?*anyopaque, optlen: c_int) c_long, 49); -pub const skb_adjust_room = @intToPtr(*const fn (skb: *kern.SkBuff, len_diff: i32, mode: u32, flags: u64) c_long, 50); -pub const redirect_map = @intToPtr(*const fn (map: *const kern.MapDef, key: u32, flags: u64) c_long, 51); -pub const sk_redirect_map = @intToPtr(*const fn (skb: *kern.SkBuff, map: *const kern.MapDef, key: u32, flags: u64) c_long, 52); -pub const sock_map_update = @intToPtr(*const fn (skops: *kern.SockOps, map: *const kern.MapDef, key: ?*anyopaque, flags: u64) c_long, 53); -pub const xdp_adjust_meta = @intToPtr(*const fn (xdp_md: *kern.XdpMd, delta: c_int) c_long, 54); -pub const perf_event_read_value = @intToPtr(*const fn (map: *const kern.MapDef, flags: u64, buf: *kern.PerfEventValue, buf_size: u32) c_long, 55); -pub const perf_prog_read_value = @intToPtr(*const fn (ctx: *kern.PerfEventData, buf: *kern.PerfEventValue, buf_size: u32) c_long, 56); -pub const getsockopt = @intToPtr(*const fn (bpf_socket: ?*anyopaque, level: c_int, optname: c_int, optval: ?*anyopaque, optlen: c_int) c_long, 57); -pub const override_return = @intToPtr(*const fn (regs: *PtRegs, rc: u64) c_long, 58); -pub const sock_ops_cb_flags_set = @intToPtr(*const fn (bpf_sock: *kern.SockOps, argval: c_int) c_long, 59); -pub const msg_redirect_map = @intToPtr(*const fn (msg: *kern.SkMsgMd, map: *const kern.MapDef, key: u32, flags: u64) c_long, 60); -pub const msg_apply_bytes = @intToPtr(*const fn (msg: *kern.SkMsgMd, bytes: u32) c_long, 61); -pub const msg_cork_bytes = @intToPtr(*const fn (msg: *kern.SkMsgMd, bytes: u32) c_long, 62); -pub const msg_pull_data = @intToPtr(*const fn (msg: *kern.SkMsgMd, start: u32, end: u32, flags: u64) c_long, 63); -pub const bind = @intToPtr(*const fn (ctx: *kern.BpfSockAddr, addr: *kern.SockAddr, addr_len: c_int) c_long, 64); -pub const xdp_adjust_tail = @intToPtr(*const fn (xdp_md: *kern.XdpMd, delta: c_int) c_long, 65); -pub const skb_get_xfrm_state = @intToPtr(*const fn (skb: *kern.SkBuff, index: u32, xfrm_state: *kern.XfrmState, size: u32, flags: u64) c_long, 66); -pub const get_stack = @intToPtr(*const fn (ctx: ?*anyopaque, buf: ?*anyopaque, size: u32, flags: u64) c_long, 67); -pub const skb_load_bytes_relative = @intToPtr(*const fn (skb: ?*const anyopaque, offset: u32, to: ?*anyopaque, len: u32, start_header: u32) c_long, 68); -pub const fib_lookup = @intToPtr(*const fn (ctx: ?*anyopaque, params: *kern.FibLookup, plen: c_int, flags: u32) c_long, 69); -pub const sock_hash_update = @intToPtr(*const fn (skops: *kern.SockOps, map: *const kern.MapDef, key: ?*anyopaque, flags: u64) c_long, 70); -pub const msg_redirect_hash = @intToPtr(*const fn (msg: *kern.SkMsgMd, map: *const kern.MapDef, key: ?*anyopaque, flags: u64) c_long, 71); -pub const sk_redirect_hash = @intToPtr(*const fn (skb: *kern.SkBuff, map: *const kern.MapDef, key: ?*anyopaque, flags: u64) c_long, 72); -pub const lwt_push_encap = @intToPtr(*const fn (skb: *kern.SkBuff, typ: u32, hdr: ?*anyopaque, len: u32) c_long, 73); -pub const lwt_seg6_store_bytes = @intToPtr(*const fn (skb: *kern.SkBuff, offset: u32, from: ?*const anyopaque, len: u32) c_long, 74); -pub const lwt_seg6_adjust_srh = @intToPtr(*const fn (skb: *kern.SkBuff, offset: u32, delta: i32) c_long, 75); -pub const lwt_seg6_action = @intToPtr(*const fn (skb: *kern.SkBuff, action: u32, param: ?*anyopaque, param_len: u32) c_long, 76); -pub const rc_repeat = @intToPtr(*const fn (ctx: ?*anyopaque) c_long, 77); -pub const rc_keydown = @intToPtr(*const fn (ctx: ?*anyopaque, protocol: u32, scancode: u64, toggle: u32) c_long, 78); -pub const skb_cgroup_id = @intToPtr(*const fn (skb: *kern.SkBuff) u64, 79); -pub const get_current_cgroup_id = @intToPtr(*const fn () u64, 80); -pub const get_local_storage = @intToPtr(*const fn (map: ?*anyopaque, flags: u64) ?*anyopaque, 81); -pub const sk_select_reuseport = @intToPtr(*const fn (reuse: *kern.SkReusePortMd, map: *const kern.MapDef, key: ?*anyopaque, flags: u64) c_long, 82); -pub const skb_ancestor_cgroup_id = @intToPtr(*const fn (skb: *kern.SkBuff, ancestor_level: c_int) u64, 83); -pub const sk_lookup_tcp = @intToPtr(*const fn (ctx: ?*anyopaque, tuple: *kern.SockTuple, tuple_size: u32, netns: u64, flags: u64) ?*kern.Sock, 84); -pub const sk_lookup_udp = @intToPtr(*const fn (ctx: ?*anyopaque, tuple: *kern.SockTuple, tuple_size: u32, netns: u64, flags: u64) ?*kern.Sock, 85); -pub const sk_release = @intToPtr(*const fn (sock: *kern.Sock) c_long, 86); -pub const map_push_elem = @intToPtr(*const fn (map: *const kern.MapDef, value: ?*const anyopaque, flags: u64) c_long, 87); -pub const map_pop_elem = @intToPtr(*const fn (map: *const kern.MapDef, value: ?*anyopaque) c_long, 88); -pub const map_peek_elem = @intToPtr(*const fn (map: *const kern.MapDef, value: ?*anyopaque) c_long, 89); -pub const msg_push_data = @intToPtr(*const fn (msg: *kern.SkMsgMd, start: u32, len: u32, flags: u64) c_long, 90); -pub const msg_pop_data = @intToPtr(*const fn (msg: *kern.SkMsgMd, start: u32, len: u32, flags: u64) c_long, 91); -pub const rc_pointer_rel = @intToPtr(*const fn (ctx: ?*anyopaque, rel_x: i32, rel_y: i32) c_long, 92); -pub const spin_lock = @intToPtr(*const fn (lock: *kern.SpinLock) c_long, 93); -pub const spin_unlock = @intToPtr(*const fn (lock: *kern.SpinLock) c_long, 94); -pub const sk_fullsock = @intToPtr(*const fn (sk: *kern.Sock) ?*SkFullSock, 95); -pub const tcp_sock = @intToPtr(*const fn (sk: *kern.Sock) ?*kern.TcpSock, 96); -pub const skb_ecn_set_ce = @intToPtr(*const fn (skb: *kern.SkBuff) c_long, 97); -pub const get_listener_sock = @intToPtr(*const fn (sk: *kern.Sock) ?*kern.Sock, 98); -pub const skc_lookup_tcp = @intToPtr(*const fn (ctx: ?*anyopaque, tuple: *kern.SockTuple, tuple_size: u32, netns: u64, flags: u64) ?*kern.Sock, 99); -pub const tcp_check_syncookie = @intToPtr(*const fn (sk: *kern.Sock, iph: ?*anyopaque, iph_len: u32, th: *TcpHdr, th_len: u32) c_long, 100); -pub const sysctl_get_name = @intToPtr(*const fn (ctx: *kern.SysCtl, buf: ?*u8, buf_len: c_ulong, flags: u64) c_long, 101); -pub const sysctl_get_current_value = @intToPtr(*const fn (ctx: *kern.SysCtl, buf: ?*u8, buf_len: c_ulong) c_long, 102); -pub const sysctl_get_new_value = @intToPtr(*const fn (ctx: *kern.SysCtl, buf: ?*u8, buf_len: c_ulong) c_long, 103); -pub const sysctl_set_new_value = @intToPtr(*const fn (ctx: *kern.SysCtl, buf: ?*const u8, buf_len: c_ulong) c_long, 104); -pub const strtol = @intToPtr(*const fn (buf: *const u8, buf_len: c_ulong, flags: u64, res: *c_long) c_long, 105); -pub const strtoul = @intToPtr(*const fn (buf: *const u8, buf_len: c_ulong, flags: u64, res: *c_ulong) c_long, 106); -pub const sk_storage_get = @intToPtr(*const fn (map: *const kern.MapDef, sk: *kern.Sock, value: ?*anyopaque, flags: u64) ?*anyopaque, 107); -pub const sk_storage_delete = @intToPtr(*const fn (map: *const kern.MapDef, sk: *kern.Sock) c_long, 108); -pub const send_signal = @intToPtr(*const fn (sig: u32) c_long, 109); -pub const tcp_gen_syncookie = @intToPtr(*const fn (sk: *kern.Sock, iph: ?*anyopaque, iph_len: u32, th: *TcpHdr, th_len: u32) i64, 110); -pub const skb_output = @intToPtr(*const fn (ctx: ?*anyopaque, map: *const kern.MapDef, flags: u64, data: ?*anyopaque, size: u64) c_long, 111); -pub const probe_read_user = @intToPtr(*const fn (dst: ?*anyopaque, size: u32, unsafe_ptr: ?*const anyopaque) c_long, 112); -pub const probe_read_kernel = @intToPtr(*const fn (dst: ?*anyopaque, size: u32, unsafe_ptr: ?*const anyopaque) c_long, 113); -pub const probe_read_user_str = @intToPtr(*const fn (dst: ?*anyopaque, size: u32, unsafe_ptr: ?*const anyopaque) c_long, 114); -pub const probe_read_kernel_str = @intToPtr(*const fn (dst: ?*anyopaque, size: u32, unsafe_ptr: ?*const anyopaque) c_long, 115); -pub const tcp_send_ack = @intToPtr(*const fn (tp: ?*anyopaque, rcv_nxt: u32) c_long, 116); -pub const send_signal_thread = @intToPtr(*const fn (sig: u32) c_long, 117); -pub const jiffies64 = @intToPtr(*const fn () u64, 118); -pub const read_branch_records = @intToPtr(*const fn (ctx: *kern.PerfEventData, buf: ?*anyopaque, size: u32, flags: u64) c_long, 119); -pub const get_ns_current_pid_tgid = @intToPtr(*const fn (dev: u64, ino: u64, nsdata: *kern.PidNsInfo, size: u32) c_long, 120); -pub const xdp_output = @intToPtr(*const fn (ctx: ?*anyopaque, map: *const kern.MapDef, flags: u64, data: ?*anyopaque, size: u64) c_long, 121); -pub const get_netns_cookie = @intToPtr(*const fn (ctx: ?*anyopaque) u64, 122); -pub const get_current_ancestor_cgroup_id = @intToPtr(*const fn (ancestor_level: c_int) u64, 123); -pub const sk_assign = @intToPtr(*const fn (skb: *kern.SkBuff, sk: *kern.Sock, flags: u64) c_long, 124); -pub const ktime_get_boot_ns = @intToPtr(*const fn () u64, 125); -pub const seq_printf = @intToPtr(*const fn (m: *kern.SeqFile, fmt: ?*const u8, fmt_size: u32, data: ?*const anyopaque, data_len: u32) c_long, 126); -pub const seq_write = @intToPtr(*const fn (m: *kern.SeqFile, data: ?*const u8, len: u32) c_long, 127); -pub const sk_cgroup_id = @intToPtr(*const fn (sk: *kern.BpfSock) u64, 128); -pub const sk_ancestor_cgroup_id = @intToPtr(*const fn (sk: *kern.BpfSock, ancestor_level: c_long) u64, 129); -pub const ringbuf_output = @intToPtr(*const fn (ringbuf: ?*anyopaque, data: ?*anyopaque, size: u64, flags: u64) c_long, 130); -pub const ringbuf_reserve = @intToPtr(*const fn (ringbuf: ?*anyopaque, size: u64, flags: u64) ?*anyopaque, 131); -pub const ringbuf_submit = @intToPtr(*const fn (data: ?*anyopaque, flags: u64) void, 132); -pub const ringbuf_discard = @intToPtr(*const fn (data: ?*anyopaque, flags: u64) void, 133); -pub const ringbuf_query = @intToPtr(*const fn (ringbuf: ?*anyopaque, flags: u64) u64, 134); -pub const csum_level = @intToPtr(*const fn (skb: *kern.SkBuff, level: u64) c_long, 135); -pub const skc_to_tcp6_sock = @intToPtr(*const fn (sk: ?*anyopaque) ?*kern.Tcp6Sock, 136); -pub const skc_to_tcp_sock = @intToPtr(*const fn (sk: ?*anyopaque) ?*kern.TcpSock, 137); -pub const skc_to_tcp_timewait_sock = @intToPtr(*const fn (sk: ?*anyopaque) ?*kern.TcpTimewaitSock, 138); -pub const skc_to_tcp_request_sock = @intToPtr(*const fn (sk: ?*anyopaque) ?*kern.TcpRequestSock, 139); -pub const skc_to_udp6_sock = @intToPtr(*const fn (sk: ?*anyopaque) ?*kern.Udp6Sock, 140); -pub const get_task_stack = @intToPtr(*const fn (task: ?*anyopaque, buf: ?*anyopaque, size: u32, flags: u64) c_long, 141); +pub const skb_change_proto = @ptrFromInt(*const fn (skb: *kern.SkBuff, proto: u16, flags: u64) c_long, 31); +pub const skb_change_type = @ptrFromInt(*const fn (skb: *kern.SkBuff, skb_type: u32) c_long, 32); +pub const skb_under_cgroup = @ptrFromInt(*const fn (skb: *kern.SkBuff, map: ?*const anyopaque, index: u32) c_long, 33); +pub const get_hash_recalc = @ptrFromInt(*const fn (skb: *kern.SkBuff) u32, 34); +pub const get_current_task = @ptrFromInt(*const fn () u64, 35); +pub const probe_write_user = @ptrFromInt(*const fn (dst: ?*anyopaque, src: ?*const anyopaque, len: u32) c_long, 36); +pub const current_task_under_cgroup = @ptrFromInt(*const fn (map: *const kern.MapDef, index: u32) c_long, 37); +pub const skb_change_tail = @ptrFromInt(*const fn (skb: *kern.SkBuff, len: u32, flags: u64) c_long, 38); +pub const skb_pull_data = @ptrFromInt(*const fn (skb: *kern.SkBuff, len: u32) c_long, 39); +pub const csum_update = @ptrFromInt(*const fn (skb: *kern.SkBuff, csum: u32) i64, 40); +pub const set_hash_invalid = @ptrFromInt(*const fn (skb: *kern.SkBuff) void, 41); +pub const get_numa_node_id = @ptrFromInt(*const fn () c_long, 42); +pub const skb_change_head = @ptrFromInt(*const fn (skb: *kern.SkBuff, len: u32, flags: u64) c_long, 43); +pub const xdp_adjust_head = @ptrFromInt(*const fn (xdp_md: *kern.XdpMd, delta: c_int) c_long, 44); +pub const probe_read_str = @ptrFromInt(*const fn (dst: ?*anyopaque, size: u32, unsafe_ptr: ?*const anyopaque) c_long, 45); +pub const get_socket_cookie = @ptrFromInt(*const fn (ctx: ?*anyopaque) u64, 46); +pub const get_socket_uid = @ptrFromInt(*const fn (skb: *kern.SkBuff) u32, 47); +pub const set_hash = @ptrFromInt(*const fn (skb: *kern.SkBuff, hash: u32) c_long, 48); +pub const setsockopt = @ptrFromInt(*const fn (bpf_socket: *kern.SockOps, level: c_int, optname: c_int, optval: ?*anyopaque, optlen: c_int) c_long, 49); +pub const skb_adjust_room = @ptrFromInt(*const fn (skb: *kern.SkBuff, len_diff: i32, mode: u32, flags: u64) c_long, 50); +pub const redirect_map = @ptrFromInt(*const fn (map: *const kern.MapDef, key: u32, flags: u64) c_long, 51); +pub const sk_redirect_map = @ptrFromInt(*const fn (skb: *kern.SkBuff, map: *const kern.MapDef, key: u32, flags: u64) c_long, 52); +pub const sock_map_update = @ptrFromInt(*const fn (skops: *kern.SockOps, map: *const kern.MapDef, key: ?*anyopaque, flags: u64) c_long, 53); +pub const xdp_adjust_meta = @ptrFromInt(*const fn (xdp_md: *kern.XdpMd, delta: c_int) c_long, 54); +pub const perf_event_read_value = @ptrFromInt(*const fn (map: *const kern.MapDef, flags: u64, buf: *kern.PerfEventValue, buf_size: u32) c_long, 55); +pub const perf_prog_read_value = @ptrFromInt(*const fn (ctx: *kern.PerfEventData, buf: *kern.PerfEventValue, buf_size: u32) c_long, 56); +pub const getsockopt = @ptrFromInt(*const fn (bpf_socket: ?*anyopaque, level: c_int, optname: c_int, optval: ?*anyopaque, optlen: c_int) c_long, 57); +pub const override_return = @ptrFromInt(*const fn (regs: *PtRegs, rc: u64) c_long, 58); +pub const sock_ops_cb_flags_set = @ptrFromInt(*const fn (bpf_sock: *kern.SockOps, argval: c_int) c_long, 59); +pub const msg_redirect_map = @ptrFromInt(*const fn (msg: *kern.SkMsgMd, map: *const kern.MapDef, key: u32, flags: u64) c_long, 60); +pub const msg_apply_bytes = @ptrFromInt(*const fn (msg: *kern.SkMsgMd, bytes: u32) c_long, 61); +pub const msg_cork_bytes = @ptrFromInt(*const fn (msg: *kern.SkMsgMd, bytes: u32) c_long, 62); +pub const msg_pull_data = @ptrFromInt(*const fn (msg: *kern.SkMsgMd, start: u32, end: u32, flags: u64) c_long, 63); +pub const bind = @ptrFromInt(*const fn (ctx: *kern.BpfSockAddr, addr: *kern.SockAddr, addr_len: c_int) c_long, 64); +pub const xdp_adjust_tail = @ptrFromInt(*const fn (xdp_md: *kern.XdpMd, delta: c_int) c_long, 65); +pub const skb_get_xfrm_state = @ptrFromInt(*const fn (skb: *kern.SkBuff, index: u32, xfrm_state: *kern.XfrmState, size: u32, flags: u64) c_long, 66); +pub const get_stack = @ptrFromInt(*const fn (ctx: ?*anyopaque, buf: ?*anyopaque, size: u32, flags: u64) c_long, 67); +pub const skb_load_bytes_relative = @ptrFromInt(*const fn (skb: ?*const anyopaque, offset: u32, to: ?*anyopaque, len: u32, start_header: u32) c_long, 68); +pub const fib_lookup = @ptrFromInt(*const fn (ctx: ?*anyopaque, params: *kern.FibLookup, plen: c_int, flags: u32) c_long, 69); +pub const sock_hash_update = @ptrFromInt(*const fn (skops: *kern.SockOps, map: *const kern.MapDef, key: ?*anyopaque, flags: u64) c_long, 70); +pub const msg_redirect_hash = @ptrFromInt(*const fn (msg: *kern.SkMsgMd, map: *const kern.MapDef, key: ?*anyopaque, flags: u64) c_long, 71); +pub const sk_redirect_hash = @ptrFromInt(*const fn (skb: *kern.SkBuff, map: *const kern.MapDef, key: ?*anyopaque, flags: u64) c_long, 72); +pub const lwt_push_encap = @ptrFromInt(*const fn (skb: *kern.SkBuff, typ: u32, hdr: ?*anyopaque, len: u32) c_long, 73); +pub const lwt_seg6_store_bytes = @ptrFromInt(*const fn (skb: *kern.SkBuff, offset: u32, from: ?*const anyopaque, len: u32) c_long, 74); +pub const lwt_seg6_adjust_srh = @ptrFromInt(*const fn (skb: *kern.SkBuff, offset: u32, delta: i32) c_long, 75); +pub const lwt_seg6_action = @ptrFromInt(*const fn (skb: *kern.SkBuff, action: u32, param: ?*anyopaque, param_len: u32) c_long, 76); +pub const rc_repeat = @ptrFromInt(*const fn (ctx: ?*anyopaque) c_long, 77); +pub const rc_keydown = @ptrFromInt(*const fn (ctx: ?*anyopaque, protocol: u32, scancode: u64, toggle: u32) c_long, 78); +pub const skb_cgroup_id = @ptrFromInt(*const fn (skb: *kern.SkBuff) u64, 79); +pub const get_current_cgroup_id = @ptrFromInt(*const fn () u64, 80); +pub const get_local_storage = @ptrFromInt(*const fn (map: ?*anyopaque, flags: u64) ?*anyopaque, 81); +pub const sk_select_reuseport = @ptrFromInt(*const fn (reuse: *kern.SkReusePortMd, map: *const kern.MapDef, key: ?*anyopaque, flags: u64) c_long, 82); +pub const skb_ancestor_cgroup_id = @ptrFromInt(*const fn (skb: *kern.SkBuff, ancestor_level: c_int) u64, 83); +pub const sk_lookup_tcp = @ptrFromInt(*const fn (ctx: ?*anyopaque, tuple: *kern.SockTuple, tuple_size: u32, netns: u64, flags: u64) ?*kern.Sock, 84); +pub const sk_lookup_udp = @ptrFromInt(*const fn (ctx: ?*anyopaque, tuple: *kern.SockTuple, tuple_size: u32, netns: u64, flags: u64) ?*kern.Sock, 85); +pub const sk_release = @ptrFromInt(*const fn (sock: *kern.Sock) c_long, 86); +pub const map_push_elem = @ptrFromInt(*const fn (map: *const kern.MapDef, value: ?*const anyopaque, flags: u64) c_long, 87); +pub const map_pop_elem = @ptrFromInt(*const fn (map: *const kern.MapDef, value: ?*anyopaque) c_long, 88); +pub const map_peek_elem = @ptrFromInt(*const fn (map: *const kern.MapDef, value: ?*anyopaque) c_long, 89); +pub const msg_push_data = @ptrFromInt(*const fn (msg: *kern.SkMsgMd, start: u32, len: u32, flags: u64) c_long, 90); +pub const msg_pop_data = @ptrFromInt(*const fn (msg: *kern.SkMsgMd, start: u32, len: u32, flags: u64) c_long, 91); +pub const rc_pointer_rel = @ptrFromInt(*const fn (ctx: ?*anyopaque, rel_x: i32, rel_y: i32) c_long, 92); +pub const spin_lock = @ptrFromInt(*const fn (lock: *kern.SpinLock) c_long, 93); +pub const spin_unlock = @ptrFromInt(*const fn (lock: *kern.SpinLock) c_long, 94); +pub const sk_fullsock = @ptrFromInt(*const fn (sk: *kern.Sock) ?*SkFullSock, 95); +pub const tcp_sock = @ptrFromInt(*const fn (sk: *kern.Sock) ?*kern.TcpSock, 96); +pub const skb_ecn_set_ce = @ptrFromInt(*const fn (skb: *kern.SkBuff) c_long, 97); +pub const get_listener_sock = @ptrFromInt(*const fn (sk: *kern.Sock) ?*kern.Sock, 98); +pub const skc_lookup_tcp = @ptrFromInt(*const fn (ctx: ?*anyopaque, tuple: *kern.SockTuple, tuple_size: u32, netns: u64, flags: u64) ?*kern.Sock, 99); +pub const tcp_check_syncookie = @ptrFromInt(*const fn (sk: *kern.Sock, iph: ?*anyopaque, iph_len: u32, th: *TcpHdr, th_len: u32) c_long, 100); +pub const sysctl_get_name = @ptrFromInt(*const fn (ctx: *kern.SysCtl, buf: ?*u8, buf_len: c_ulong, flags: u64) c_long, 101); +pub const sysctl_get_current_value = @ptrFromInt(*const fn (ctx: *kern.SysCtl, buf: ?*u8, buf_len: c_ulong) c_long, 102); +pub const sysctl_get_new_value = @ptrFromInt(*const fn (ctx: *kern.SysCtl, buf: ?*u8, buf_len: c_ulong) c_long, 103); +pub const sysctl_set_new_value = @ptrFromInt(*const fn (ctx: *kern.SysCtl, buf: ?*const u8, buf_len: c_ulong) c_long, 104); +pub const strtol = @ptrFromInt(*const fn (buf: *const u8, buf_len: c_ulong, flags: u64, res: *c_long) c_long, 105); +pub const strtoul = @ptrFromInt(*const fn (buf: *const u8, buf_len: c_ulong, flags: u64, res: *c_ulong) c_long, 106); +pub const sk_storage_get = @ptrFromInt(*const fn (map: *const kern.MapDef, sk: *kern.Sock, value: ?*anyopaque, flags: u64) ?*anyopaque, 107); +pub const sk_storage_delete = @ptrFromInt(*const fn (map: *const kern.MapDef, sk: *kern.Sock) c_long, 108); +pub const send_signal = @ptrFromInt(*const fn (sig: u32) c_long, 109); +pub const tcp_gen_syncookie = @ptrFromInt(*const fn (sk: *kern.Sock, iph: ?*anyopaque, iph_len: u32, th: *TcpHdr, th_len: u32) i64, 110); +pub const skb_output = @ptrFromInt(*const fn (ctx: ?*anyopaque, map: *const kern.MapDef, flags: u64, data: ?*anyopaque, size: u64) c_long, 111); +pub const probe_read_user = @ptrFromInt(*const fn (dst: ?*anyopaque, size: u32, unsafe_ptr: ?*const anyopaque) c_long, 112); +pub const probe_read_kernel = @ptrFromInt(*const fn (dst: ?*anyopaque, size: u32, unsafe_ptr: ?*const anyopaque) c_long, 113); +pub const probe_read_user_str = @ptrFromInt(*const fn (dst: ?*anyopaque, size: u32, unsafe_ptr: ?*const anyopaque) c_long, 114); +pub const probe_read_kernel_str = @ptrFromInt(*const fn (dst: ?*anyopaque, size: u32, unsafe_ptr: ?*const anyopaque) c_long, 115); +pub const tcp_send_ack = @ptrFromInt(*const fn (tp: ?*anyopaque, rcv_nxt: u32) c_long, 116); +pub const send_signal_thread = @ptrFromInt(*const fn (sig: u32) c_long, 117); +pub const jiffies64 = @ptrFromInt(*const fn () u64, 118); +pub const read_branch_records = @ptrFromInt(*const fn (ctx: *kern.PerfEventData, buf: ?*anyopaque, size: u32, flags: u64) c_long, 119); +pub const get_ns_current_pid_tgid = @ptrFromInt(*const fn (dev: u64, ino: u64, nsdata: *kern.PidNsInfo, size: u32) c_long, 120); +pub const xdp_output = @ptrFromInt(*const fn (ctx: ?*anyopaque, map: *const kern.MapDef, flags: u64, data: ?*anyopaque, size: u64) c_long, 121); +pub const get_netns_cookie = @ptrFromInt(*const fn (ctx: ?*anyopaque) u64, 122); +pub const get_current_ancestor_cgroup_id = @ptrFromInt(*const fn (ancestor_level: c_int) u64, 123); +pub const sk_assign = @ptrFromInt(*const fn (skb: *kern.SkBuff, sk: *kern.Sock, flags: u64) c_long, 124); +pub const ktime_get_boot_ns = @ptrFromInt(*const fn () u64, 125); +pub const seq_printf = @ptrFromInt(*const fn (m: *kern.SeqFile, fmt: ?*const u8, fmt_size: u32, data: ?*const anyopaque, data_len: u32) c_long, 126); +pub const seq_write = @ptrFromInt(*const fn (m: *kern.SeqFile, data: ?*const u8, len: u32) c_long, 127); +pub const sk_cgroup_id = @ptrFromInt(*const fn (sk: *kern.BpfSock) u64, 128); +pub const sk_ancestor_cgroup_id = @ptrFromInt(*const fn (sk: *kern.BpfSock, ancestor_level: c_long) u64, 129); +pub const ringbuf_output = @ptrFromInt(*const fn (ringbuf: ?*anyopaque, data: ?*anyopaque, size: u64, flags: u64) c_long, 130); +pub const ringbuf_reserve = @ptrFromInt(*const fn (ringbuf: ?*anyopaque, size: u64, flags: u64) ?*anyopaque, 131); +pub const ringbuf_submit = @ptrFromInt(*const fn (data: ?*anyopaque, flags: u64) void, 132); +pub const ringbuf_discard = @ptrFromInt(*const fn (data: ?*anyopaque, flags: u64) void, 133); +pub const ringbuf_query = @ptrFromInt(*const fn (ringbuf: ?*anyopaque, flags: u64) u64, 134); +pub const csum_level = @ptrFromInt(*const fn (skb: *kern.SkBuff, level: u64) c_long, 135); +pub const skc_to_tcp6_sock = @ptrFromInt(*const fn (sk: ?*anyopaque) ?*kern.Tcp6Sock, 136); +pub const skc_to_tcp_sock = @ptrFromInt(*const fn (sk: ?*anyopaque) ?*kern.TcpSock, 137); +pub const skc_to_tcp_timewait_sock = @ptrFromInt(*const fn (sk: ?*anyopaque) ?*kern.TcpTimewaitSock, 138); +pub const skc_to_tcp_request_sock = @ptrFromInt(*const fn (sk: ?*anyopaque) ?*kern.TcpRequestSock, 139); +pub const skc_to_udp6_sock = @ptrFromInt(*const fn (sk: ?*anyopaque) ?*kern.Udp6Sock, 140); +pub const get_task_stack = @ptrFromInt(*const fn (task: ?*anyopaque, buf: ?*anyopaque, size: u32, flags: u64) c_long, 141); diff --git a/lib/std/os/linux/io_uring.zig b/lib/std/os/linux/io_uring.zig index 0610b214d5..875138cf4f 100644 --- a/lib/std/os/linux/io_uring.zig +++ b/lib/std/os/linux/io_uring.zig @@ -962,7 +962,7 @@ pub const IO_Uring = struct { var update = FilesUpdate{ .offset = offset, .resv = @as(u32, 0), - .fds = @as(u64, @ptrToInt(fds.ptr)), + .fds = @as(u64, @intFromPtr(fds.ptr)), }; const res = linux.io_uring_register( @@ -1244,11 +1244,11 @@ pub fn io_uring_prep_rw( } pub fn io_uring_prep_read(sqe: *linux.io_uring_sqe, fd: os.fd_t, buffer: []u8, offset: u64) void { - io_uring_prep_rw(.READ, sqe, fd, @ptrToInt(buffer.ptr), buffer.len, offset); + io_uring_prep_rw(.READ, sqe, fd, @intFromPtr(buffer.ptr), buffer.len, offset); } pub fn io_uring_prep_write(sqe: *linux.io_uring_sqe, fd: os.fd_t, buffer: []const u8, offset: u64) void { - io_uring_prep_rw(.WRITE, sqe, fd, @ptrToInt(buffer.ptr), buffer.len, offset); + io_uring_prep_rw(.WRITE, sqe, fd, @intFromPtr(buffer.ptr), buffer.len, offset); } pub fn io_uring_prep_readv( @@ -1257,7 +1257,7 @@ pub fn io_uring_prep_readv( iovecs: []const os.iovec, offset: u64, ) void { - io_uring_prep_rw(.READV, sqe, fd, @ptrToInt(iovecs.ptr), iovecs.len, offset); + io_uring_prep_rw(.READV, sqe, fd, @intFromPtr(iovecs.ptr), iovecs.len, offset); } pub fn io_uring_prep_writev( @@ -1266,16 +1266,16 @@ pub fn io_uring_prep_writev( iovecs: []const os.iovec_const, offset: u64, ) void { - io_uring_prep_rw(.WRITEV, sqe, fd, @ptrToInt(iovecs.ptr), iovecs.len, offset); + io_uring_prep_rw(.WRITEV, sqe, fd, @intFromPtr(iovecs.ptr), iovecs.len, offset); } pub fn io_uring_prep_read_fixed(sqe: *linux.io_uring_sqe, fd: os.fd_t, buffer: *os.iovec, offset: u64, buffer_index: u16) void { - io_uring_prep_rw(.READ_FIXED, sqe, fd, @ptrToInt(buffer.iov_base), buffer.iov_len, offset); + io_uring_prep_rw(.READ_FIXED, sqe, fd, @intFromPtr(buffer.iov_base), buffer.iov_len, offset); sqe.buf_index = buffer_index; } pub fn io_uring_prep_write_fixed(sqe: *linux.io_uring_sqe, fd: os.fd_t, buffer: *os.iovec, offset: u64, buffer_index: u16) void { - io_uring_prep_rw(.WRITE_FIXED, sqe, fd, @ptrToInt(buffer.iov_base), buffer.iov_len, offset); + io_uring_prep_rw(.WRITE_FIXED, sqe, fd, @intFromPtr(buffer.iov_base), buffer.iov_len, offset); sqe.buf_index = buffer_index; } @@ -1298,7 +1298,7 @@ pub fn io_uring_prep_accept( ) void { // `addr` holds a pointer to `sockaddr`, and `addr2` holds a pointer to socklen_t`. // `addr2` maps to `sqe.off` (u64) instead of `sqe.len` (which is only a u32). - io_uring_prep_rw(.ACCEPT, sqe, fd, @ptrToInt(addr), 0, @ptrToInt(addrlen)); + io_uring_prep_rw(.ACCEPT, sqe, fd, @intFromPtr(addr), 0, @intFromPtr(addrlen)); sqe.rw_flags = flags; } @@ -1309,7 +1309,7 @@ pub fn io_uring_prep_connect( addrlen: os.socklen_t, ) void { // `addrlen` maps to `sqe.off` (u64) instead of `sqe.len` (which is only a u32). - io_uring_prep_rw(.CONNECT, sqe, fd, @ptrToInt(addr), 0, addrlen); + io_uring_prep_rw(.CONNECT, sqe, fd, @intFromPtr(addr), 0, addrlen); } pub fn io_uring_prep_epoll_ctl( @@ -1319,16 +1319,16 @@ pub fn io_uring_prep_epoll_ctl( op: u32, ev: ?*linux.epoll_event, ) void { - io_uring_prep_rw(.EPOLL_CTL, sqe, epfd, @ptrToInt(ev), op, @intCast(u64, fd)); + io_uring_prep_rw(.EPOLL_CTL, sqe, epfd, @intFromPtr(ev), op, @intCast(u64, fd)); } pub fn io_uring_prep_recv(sqe: *linux.io_uring_sqe, fd: os.fd_t, buffer: []u8, flags: u32) void { - io_uring_prep_rw(.RECV, sqe, fd, @ptrToInt(buffer.ptr), buffer.len, 0); + io_uring_prep_rw(.RECV, sqe, fd, @intFromPtr(buffer.ptr), buffer.len, 0); sqe.rw_flags = flags; } pub fn io_uring_prep_send(sqe: *linux.io_uring_sqe, fd: os.fd_t, buffer: []const u8, flags: u32) void { - io_uring_prep_rw(.SEND, sqe, fd, @ptrToInt(buffer.ptr), buffer.len, 0); + io_uring_prep_rw(.SEND, sqe, fd, @intFromPtr(buffer.ptr), buffer.len, 0); sqe.rw_flags = flags; } @@ -1338,7 +1338,7 @@ pub fn io_uring_prep_recvmsg( msg: *os.msghdr, flags: u32, ) void { - linux.io_uring_prep_rw(.RECVMSG, sqe, fd, @ptrToInt(msg), 1, 0); + linux.io_uring_prep_rw(.RECVMSG, sqe, fd, @intFromPtr(msg), 1, 0); sqe.rw_flags = flags; } @@ -1348,7 +1348,7 @@ pub fn io_uring_prep_sendmsg( msg: *const os.msghdr_const, flags: u32, ) void { - linux.io_uring_prep_rw(.SENDMSG, sqe, fd, @ptrToInt(msg), 1, 0); + linux.io_uring_prep_rw(.SENDMSG, sqe, fd, @intFromPtr(msg), 1, 0); sqe.rw_flags = flags; } @@ -1359,7 +1359,7 @@ pub fn io_uring_prep_openat( flags: u32, mode: os.mode_t, ) void { - io_uring_prep_rw(.OPENAT, sqe, fd, @ptrToInt(path), mode, 0); + io_uring_prep_rw(.OPENAT, sqe, fd, @intFromPtr(path), mode, 0); sqe.rw_flags = flags; } @@ -1387,7 +1387,7 @@ pub fn io_uring_prep_timeout( count: u32, flags: u32, ) void { - io_uring_prep_rw(.TIMEOUT, sqe, -1, @ptrToInt(ts), 1, count); + io_uring_prep_rw(.TIMEOUT, sqe, -1, @intFromPtr(ts), 1, count); sqe.rw_flags = flags; } @@ -1414,7 +1414,7 @@ pub fn io_uring_prep_link_timeout( ts: *const os.linux.kernel_timespec, flags: u32, ) void { - linux.io_uring_prep_rw(.LINK_TIMEOUT, sqe, -1, @ptrToInt(ts), 1, 0); + linux.io_uring_prep_rw(.LINK_TIMEOUT, sqe, -1, @intFromPtr(ts), 1, 0); sqe.rw_flags = flags; } @@ -1423,7 +1423,7 @@ pub fn io_uring_prep_poll_add( fd: os.fd_t, poll_mask: u32, ) void { - io_uring_prep_rw(.POLL_ADD, sqe, fd, @ptrToInt(@as(?*anyopaque, null)), 0, 0); + io_uring_prep_rw(.POLL_ADD, sqe, fd, @intFromPtr(@as(?*anyopaque, null)), 0, 0); sqe.rw_flags = __io_uring_prep_poll_mask(poll_mask); } @@ -1477,7 +1477,7 @@ pub fn io_uring_prep_statx( mask: u32, buf: *linux.Statx, ) void { - io_uring_prep_rw(.STATX, sqe, fd, @ptrToInt(path), mask, @ptrToInt(buf)); + io_uring_prep_rw(.STATX, sqe, fd, @intFromPtr(path), mask, @intFromPtr(buf)); sqe.rw_flags = flags; } @@ -1510,9 +1510,9 @@ pub fn io_uring_prep_renameat( .RENAMEAT, sqe, old_dir_fd, - @ptrToInt(old_path), + @intFromPtr(old_path), 0, - @ptrToInt(new_path), + @intFromPtr(new_path), ); sqe.len = @bitCast(u32, new_dir_fd); sqe.rw_flags = flags; @@ -1524,7 +1524,7 @@ pub fn io_uring_prep_unlinkat( path: [*:0]const u8, flags: u32, ) void { - io_uring_prep_rw(.UNLINKAT, sqe, dir_fd, @ptrToInt(path), 0, 0); + io_uring_prep_rw(.UNLINKAT, sqe, dir_fd, @intFromPtr(path), 0, 0); sqe.rw_flags = flags; } @@ -1534,7 +1534,7 @@ pub fn io_uring_prep_mkdirat( path: [*:0]const u8, mode: os.mode_t, ) void { - io_uring_prep_rw(.MKDIRAT, sqe, dir_fd, @ptrToInt(path), mode, 0); + io_uring_prep_rw(.MKDIRAT, sqe, dir_fd, @intFromPtr(path), mode, 0); } pub fn io_uring_prep_symlinkat( @@ -1547,9 +1547,9 @@ pub fn io_uring_prep_symlinkat( .SYMLINKAT, sqe, new_dir_fd, - @ptrToInt(target), + @intFromPtr(target), 0, - @ptrToInt(link_path), + @intFromPtr(link_path), ); } @@ -1565,9 +1565,9 @@ pub fn io_uring_prep_linkat( .LINKAT, sqe, old_dir_fd, - @ptrToInt(old_path), + @intFromPtr(old_path), 0, - @ptrToInt(new_path), + @intFromPtr(new_path), ); sqe.len = @bitCast(u32, new_dir_fd); sqe.rw_flags = flags; @@ -1581,7 +1581,7 @@ pub fn io_uring_prep_provide_buffers( group_id: usize, buffer_id: usize, ) void { - const ptr = @ptrToInt(buffers); + const ptr = @intFromPtr(buffers); io_uring_prep_rw(.PROVIDE_BUFFERS, sqe, @intCast(i32, num), ptr, buffer_len, buffer_id); sqe.buf_index = @intCast(u16, group_id); } @@ -1918,8 +1918,8 @@ test "openat" { // Workaround for LLVM bug: https://github.com/ziglang/zig/issues/12014 const path_addr = if (builtin.zig_backend == .stage2_llvm) p: { var workaround = path; - break :p @ptrToInt(workaround); - } else @ptrToInt(path); + break :p @intFromPtr(workaround); + } else @intFromPtr(path); const flags: u32 = os.O.CLOEXEC | os.O.RDWR | os.O.CREAT; const mode: os.mode_t = 0o666; @@ -2098,7 +2098,7 @@ test "sendmsg/recvmsg" { try testing.expectEqual(@as(u32, 2), ring.cq_ready()); const cqe_sendmsg = try ring.copy_cqe(); - if (cqe_sendmsg.res == -@as(i32, @enumToInt(linux.E.INVAL))) return error.SkipZigTest; + if (cqe_sendmsg.res == -@as(i32, @intFromEnum(linux.E.INVAL))) return error.SkipZigTest; try testing.expectEqual(linux.io_uring_cqe{ .user_data = 0x11111111, .res = buffer_send.len, @@ -2106,7 +2106,7 @@ test "sendmsg/recvmsg" { }, cqe_sendmsg); const cqe_recvmsg = try ring.copy_cqe(); - if (cqe_recvmsg.res == -@as(i32, @enumToInt(linux.E.INVAL))) return error.SkipZigTest; + if (cqe_recvmsg.res == -@as(i32, @intFromEnum(linux.E.INVAL))) return error.SkipZigTest; try testing.expectEqual(linux.io_uring_cqe{ .user_data = 0x22222222, .res = buffer_recv.len, @@ -2140,12 +2140,12 @@ test "timeout (after a relative time)" { try testing.expectEqual(linux.io_uring_cqe{ .user_data = 0x55555555, - .res = -@as(i32, @enumToInt(linux.E.TIME)), + .res = -@as(i32, @intFromEnum(linux.E.TIME)), .flags = 0, }, cqe); // Tests should not depend on timings: skip test if outside margin. - if (!std.math.approxEqAbs(f64, ms, @intToFloat(f64, stopped - started), margin)) return error.SkipZigTest; + if (!std.math.approxEqAbs(f64, ms, @floatFromInt(f64, stopped - started), margin)) return error.SkipZigTest; } test "timeout (after a number of completions)" { @@ -2227,7 +2227,7 @@ test "timeout_remove" { if (cqe.user_data == 0x88888888) { try testing.expectEqual(linux.io_uring_cqe{ .user_data = 0x88888888, - .res = -@as(i32, @enumToInt(linux.E.CANCELED)), + .res = -@as(i32, @intFromEnum(linux.E.CANCELED)), .flags = 0, }, cqe); } else if (cqe.user_data == 0x99999999) { @@ -2274,16 +2274,16 @@ test "accept/connect/recv/link_timeout" { const cqe = try ring.copy_cqe(); switch (cqe.user_data) { 0xffffffff => { - if (cqe.res != -@as(i32, @enumToInt(linux.E.INTR)) and - cqe.res != -@as(i32, @enumToInt(linux.E.CANCELED))) + if (cqe.res != -@as(i32, @intFromEnum(linux.E.INTR)) and + cqe.res != -@as(i32, @intFromEnum(linux.E.CANCELED))) { std.debug.print("Req 0x{x} got {d}\n", .{ cqe.user_data, cqe.res }); try testing.expect(false); } }, 0x22222222 => { - if (cqe.res != -@as(i32, @enumToInt(linux.E.ALREADY)) and - cqe.res != -@as(i32, @enumToInt(linux.E.TIME))) + if (cqe.res != -@as(i32, @intFromEnum(linux.E.ALREADY)) and + cqe.res != -@as(i32, @intFromEnum(linux.E.TIME))) { std.debug.print("Req 0x{x} got {d}\n", .{ cqe.user_data, cqe.res }); try testing.expect(false); @@ -2439,7 +2439,7 @@ test "accept/connect/recv/cancel" { try testing.expectEqual(linux.io_uring_cqe{ .user_data = 0xffffffff, - .res = -@as(i32, @enumToInt(linux.E.CANCELED)), + .res = -@as(i32, @intFromEnum(linux.E.CANCELED)), .flags = 0, }, cqe_recv); diff --git a/lib/std/os/linux/mips.zig b/lib/std/os/linux/mips.zig index 66d204dfe1..781003bedc 100644 --- a/lib/std/os/linux/mips.zig +++ b/lib/std/os/linux/mips.zig @@ -18,7 +18,7 @@ pub fn syscall0(number: SYS) usize { \\ subu $2, $0, $2 \\ 1: : [ret] "={$2}" (-> usize), - : [number] "{$2}" (@enumToInt(number)), + : [number] "{$2}" (@intFromEnum(number)), : "$1", "$3", "$4", "$5", "$6", "$7", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24", "$25", "hi", "lo", "memory" ); } @@ -37,7 +37,7 @@ pub fn syscall_pipe(fd: *[2]i32) usize { \\ sw $3, 4($4) \\ 2: : [ret] "={$2}" (-> usize), - : [number] "{$2}" (@enumToInt(SYS.pipe)), + : [number] "{$2}" (@intFromEnum(SYS.pipe)), [fd] "{$4}" (fd), : "$1", "$3", "$5", "$6", "$7", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24", "$25", "hi", "lo", "memory" ); @@ -50,7 +50,7 @@ pub fn syscall1(number: SYS, arg1: usize) usize { \\ subu $2, $0, $2 \\ 1: : [ret] "={$2}" (-> usize), - : [number] "{$2}" (@enumToInt(number)), + : [number] "{$2}" (@intFromEnum(number)), [arg1] "{$4}" (arg1), : "$1", "$3", "$5", "$6", "$7", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24", "$25", "hi", "lo", "memory" ); @@ -63,7 +63,7 @@ pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize { \\ subu $2, $0, $2 \\ 1: : [ret] "={$2}" (-> usize), - : [number] "{$2}" (@enumToInt(number)), + : [number] "{$2}" (@intFromEnum(number)), [arg1] "{$4}" (arg1), [arg2] "{$5}" (arg2), : "$1", "$3", "$6", "$7", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24", "$25", "hi", "lo", "memory" @@ -77,7 +77,7 @@ pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize { \\ subu $2, $0, $2 \\ 1: : [ret] "={$2}" (-> usize), - : [number] "{$2}" (@enumToInt(number)), + : [number] "{$2}" (@intFromEnum(number)), [arg1] "{$4}" (arg1), [arg2] "{$5}" (arg2), [arg3] "{$6}" (arg3), @@ -92,7 +92,7 @@ pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize) \\ subu $2, $0, $2 \\ 1: : [ret] "={$2}" (-> usize), - : [number] "{$2}" (@enumToInt(number)), + : [number] "{$2}" (@intFromEnum(number)), [arg1] "{$4}" (arg1), [arg2] "{$5}" (arg2), [arg3] "{$6}" (arg3), @@ -112,7 +112,7 @@ pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize, \\ subu $2, $0, $2 \\ 1: : [ret] "={$2}" (-> usize), - : [number] "{$2}" (@enumToInt(number)), + : [number] "{$2}" (@intFromEnum(number)), [arg1] "{$4}" (arg1), [arg2] "{$5}" (arg2), [arg3] "{$6}" (arg3), @@ -145,7 +145,7 @@ pub fn syscall6( \\ subu $2, $0, $2 \\ 1: : [ret] "={$2}" (-> usize), - : [number] "{$2}" (@enumToInt(number)), + : [number] "{$2}" (@intFromEnum(number)), [arg1] "{$4}" (arg1), [arg2] "{$5}" (arg2), [arg3] "{$6}" (arg3), @@ -178,7 +178,7 @@ pub fn syscall7( \\ subu $2, $0, $2 \\ 1: : [ret] "={$2}" (-> usize), - : [number] "{$2}" (@enumToInt(number)), + : [number] "{$2}" (@intFromEnum(number)), [arg1] "{$4}" (arg1), [arg2] "{$5}" (arg2), [arg3] "{$6}" (arg3), @@ -198,7 +198,7 @@ pub extern fn clone(func: CloneFn, stack: usize, flags: u32, arg: usize, ptid: * pub fn restore() callconv(.Naked) void { return asm volatile ("syscall" : - : [number] "{$2}" (@enumToInt(SYS.sigreturn)), + : [number] "{$2}" (@intFromEnum(SYS.sigreturn)), : "$1", "$3", "$4", "$5", "$6", "$7", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24", "$25", "hi", "lo", "memory" ); } @@ -206,7 +206,7 @@ pub fn restore() callconv(.Naked) void { pub fn restore_rt() callconv(.Naked) void { return asm volatile ("syscall" : - : [number] "{$2}" (@enumToInt(SYS.rt_sigreturn)), + : [number] "{$2}" (@intFromEnum(SYS.rt_sigreturn)), : "$1", "$3", "$4", "$5", "$6", "$7", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24", "$25", "hi", "lo", "memory" ); } diff --git a/lib/std/os/linux/mips64.zig b/lib/std/os/linux/mips64.zig index dfc1c9b576..8d55dee37f 100644 --- a/lib/std/os/linux/mips64.zig +++ b/lib/std/os/linux/mips64.zig @@ -18,7 +18,7 @@ pub fn syscall0(number: SYS) usize { \\ dsubu $2, $0, $2 \\ 1: : [ret] "={$2}" (-> usize), - : [number] "{$2}" (@enumToInt(number)), + : [number] "{$2}" (@intFromEnum(number)), : "$1", "$3", "$4", "$5", "$6", "$7", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24", "$25", "hi", "lo", "memory" ); } @@ -37,7 +37,7 @@ pub fn syscall_pipe(fd: *[2]i32) usize { \\ sw $3, 4($4) \\ 2: : [ret] "={$2}" (-> usize), - : [number] "{$2}" (@enumToInt(SYS.pipe)), + : [number] "{$2}" (@intFromEnum(SYS.pipe)), [fd] "{$4}" (fd), : "$1", "$3", "$5", "$6", "$7", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24", "$25", "hi", "lo", "memory" ); @@ -50,7 +50,7 @@ pub fn syscall1(number: SYS, arg1: usize) usize { \\ dsubu $2, $0, $2 \\ 1: : [ret] "={$2}" (-> usize), - : [number] "{$2}" (@enumToInt(number)), + : [number] "{$2}" (@intFromEnum(number)), [arg1] "{$4}" (arg1), : "$1", "$3", "$5", "$6", "$7", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24", "$25", "hi", "lo", "memory" ); @@ -63,7 +63,7 @@ pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize { \\ dsubu $2, $0, $2 \\ 1: : [ret] "={$2}" (-> usize), - : [number] "{$2}" (@enumToInt(number)), + : [number] "{$2}" (@intFromEnum(number)), [arg1] "{$4}" (arg1), [arg2] "{$5}" (arg2), : "$1", "$3", "$6", "$7", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24", "$25", "hi", "lo", "memory" @@ -77,7 +77,7 @@ pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize { \\ dsubu $2, $0, $2 \\ 1: : [ret] "={$2}" (-> usize), - : [number] "{$2}" (@enumToInt(number)), + : [number] "{$2}" (@intFromEnum(number)), [arg1] "{$4}" (arg1), [arg2] "{$5}" (arg2), [arg3] "{$6}" (arg3), @@ -92,7 +92,7 @@ pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize) \\ dsubu $2, $0, $2 \\ 1: : [ret] "={$2}" (-> usize), - : [number] "{$2}" (@enumToInt(number)), + : [number] "{$2}" (@intFromEnum(number)), [arg1] "{$4}" (arg1), [arg2] "{$5}" (arg2), [arg3] "{$6}" (arg3), @@ -108,7 +108,7 @@ pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize, \\ dsubu $2, $0, $2 \\ 1: : [ret] "={$2}" (-> usize), - : [number] "{$2}" (@enumToInt(number)), + : [number] "{$2}" (@intFromEnum(number)), [arg1] "{$4}" (arg1), [arg2] "{$5}" (arg2), [arg3] "{$6}" (arg3), @@ -136,7 +136,7 @@ pub fn syscall6( \\ dsubu $2, $0, $2 \\ 1: : [ret] "={$2}" (-> usize), - : [number] "{$2}" (@enumToInt(number)), + : [number] "{$2}" (@intFromEnum(number)), [arg1] "{$4}" (arg1), [arg2] "{$5}" (arg2), [arg3] "{$6}" (arg3), @@ -163,7 +163,7 @@ pub fn syscall7( \\ dsubu $2, $0, $2 \\ 1: : [ret] "={$2}" (-> usize), - : [number] "{$2}" (@enumToInt(number)), + : [number] "{$2}" (@intFromEnum(number)), [arg1] "{$4}" (arg1), [arg2] "{$5}" (arg2), [arg3] "{$6}" (arg3), @@ -183,7 +183,7 @@ pub extern fn clone(func: CloneFn, stack: usize, flags: u32, arg: usize, ptid: * pub fn restore() callconv(.Naked) void { return asm volatile ("syscall" : - : [number] "{$2}" (@enumToInt(SYS.rt_sigreturn)), + : [number] "{$2}" (@intFromEnum(SYS.rt_sigreturn)), : "$1", "$3", "$4", "$5", "$6", "$7", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24", "$25", "hi", "lo", "memory" ); } @@ -191,7 +191,7 @@ pub fn restore() callconv(.Naked) void { pub fn restore_rt() callconv(.Naked) void { return asm volatile ("syscall" : - : [number] "{$2}" (@enumToInt(SYS.rt_sigreturn)), + : [number] "{$2}" (@intFromEnum(SYS.rt_sigreturn)), : "$1", "$3", "$4", "$5", "$6", "$7", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24", "$25", "hi", "lo", "memory" ); } diff --git a/lib/std/os/linux/powerpc.zig b/lib/std/os/linux/powerpc.zig index 6d2d408adf..31c30f2d30 100644 --- a/lib/std/os/linux/powerpc.zig +++ b/lib/std/os/linux/powerpc.zig @@ -20,7 +20,7 @@ pub fn syscall0(number: SYS) usize { \\ neg 3, 3 \\ 1: : [ret] "={r3}" (-> usize), - : [number] "{r0}" (@enumToInt(number)), + : [number] "{r0}" (@intFromEnum(number)), : "memory", "cr0", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12" ); } @@ -32,7 +32,7 @@ pub fn syscall1(number: SYS, arg1: usize) usize { \\ neg 3, 3 \\ 1: : [ret] "={r3}" (-> usize), - : [number] "{r0}" (@enumToInt(number)), + : [number] "{r0}" (@intFromEnum(number)), [arg1] "{r3}" (arg1), : "memory", "cr0", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12" ); @@ -45,7 +45,7 @@ pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize { \\ neg 3, 3 \\ 1: : [ret] "={r3}" (-> usize), - : [number] "{r0}" (@enumToInt(number)), + : [number] "{r0}" (@intFromEnum(number)), [arg1] "{r3}" (arg1), [arg2] "{r4}" (arg2), : "memory", "cr0", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12" @@ -59,7 +59,7 @@ pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize { \\ neg 3, 3 \\ 1: : [ret] "={r3}" (-> usize), - : [number] "{r0}" (@enumToInt(number)), + : [number] "{r0}" (@intFromEnum(number)), [arg1] "{r3}" (arg1), [arg2] "{r4}" (arg2), [arg3] "{r5}" (arg3), @@ -74,7 +74,7 @@ pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize) \\ neg 3, 3 \\ 1: : [ret] "={r3}" (-> usize), - : [number] "{r0}" (@enumToInt(number)), + : [number] "{r0}" (@intFromEnum(number)), [arg1] "{r3}" (arg1), [arg2] "{r4}" (arg2), [arg3] "{r5}" (arg3), @@ -90,7 +90,7 @@ pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize, \\ neg 3, 3 \\ 1: : [ret] "={r3}" (-> usize), - : [number] "{r0}" (@enumToInt(number)), + : [number] "{r0}" (@intFromEnum(number)), [arg1] "{r3}" (arg1), [arg2] "{r4}" (arg2), [arg3] "{r5}" (arg3), @@ -115,7 +115,7 @@ pub fn syscall6( \\ neg 3, 3 \\ 1: : [ret] "={r3}" (-> usize), - : [number] "{r0}" (@enumToInt(number)), + : [number] "{r0}" (@intFromEnum(number)), [arg1] "{r3}" (arg1), [arg2] "{r4}" (arg2), [arg3] "{r5}" (arg3), @@ -136,7 +136,7 @@ pub const restore = restore_rt; pub fn restore_rt() callconv(.Naked) void { return asm volatile ("sc" : - : [number] "{r0}" (@enumToInt(SYS.rt_sigreturn)), + : [number] "{r0}" (@intFromEnum(SYS.rt_sigreturn)), : "memory", "cr0", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12" ); } diff --git a/lib/std/os/linux/powerpc64.zig b/lib/std/os/linux/powerpc64.zig index ab0da460d8..722bd64687 100644 --- a/lib/std/os/linux/powerpc64.zig +++ b/lib/std/os/linux/powerpc64.zig @@ -20,7 +20,7 @@ pub fn syscall0(number: SYS) usize { \\ neg 3, 3 \\ 1: : [ret] "={r3}" (-> usize), - : [number] "{r0}" (@enumToInt(number)), + : [number] "{r0}" (@intFromEnum(number)), : "memory", "cr0", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12" ); } @@ -32,7 +32,7 @@ pub fn syscall1(number: SYS, arg1: usize) usize { \\ neg 3, 3 \\ 1: : [ret] "={r3}" (-> usize), - : [number] "{r0}" (@enumToInt(number)), + : [number] "{r0}" (@intFromEnum(number)), [arg1] "{r3}" (arg1), : "memory", "cr0", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12" ); @@ -45,7 +45,7 @@ pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize { \\ neg 3, 3 \\ 1: : [ret] "={r3}" (-> usize), - : [number] "{r0}" (@enumToInt(number)), + : [number] "{r0}" (@intFromEnum(number)), [arg1] "{r3}" (arg1), [arg2] "{r4}" (arg2), : "memory", "cr0", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12" @@ -59,7 +59,7 @@ pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize { \\ neg 3, 3 \\ 1: : [ret] "={r3}" (-> usize), - : [number] "{r0}" (@enumToInt(number)), + : [number] "{r0}" (@intFromEnum(number)), [arg1] "{r3}" (arg1), [arg2] "{r4}" (arg2), [arg3] "{r5}" (arg3), @@ -74,7 +74,7 @@ pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize) \\ neg 3, 3 \\ 1: : [ret] "={r3}" (-> usize), - : [number] "{r0}" (@enumToInt(number)), + : [number] "{r0}" (@intFromEnum(number)), [arg1] "{r3}" (arg1), [arg2] "{r4}" (arg2), [arg3] "{r5}" (arg3), @@ -90,7 +90,7 @@ pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize, \\ neg 3, 3 \\ 1: : [ret] "={r3}" (-> usize), - : [number] "{r0}" (@enumToInt(number)), + : [number] "{r0}" (@intFromEnum(number)), [arg1] "{r3}" (arg1), [arg2] "{r4}" (arg2), [arg3] "{r5}" (arg3), @@ -115,7 +115,7 @@ pub fn syscall6( \\ neg 3, 3 \\ 1: : [ret] "={r3}" (-> usize), - : [number] "{r0}" (@enumToInt(number)), + : [number] "{r0}" (@intFromEnum(number)), [arg1] "{r3}" (arg1), [arg2] "{r4}" (arg2), [arg3] "{r5}" (arg3), @@ -136,7 +136,7 @@ pub const restore = restore_rt; pub fn restore_rt() callconv(.Naked) void { return asm volatile ("sc" : - : [number] "{r0}" (@enumToInt(SYS.rt_sigreturn)), + : [number] "{r0}" (@intFromEnum(SYS.rt_sigreturn)), : "memory", "cr0", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12" ); } diff --git a/lib/std/os/linux/riscv64.zig b/lib/std/os/linux/riscv64.zig index 627bb8498e..cbdaa76282 100644 --- a/lib/std/os/linux/riscv64.zig +++ b/lib/std/os/linux/riscv64.zig @@ -13,7 +13,7 @@ const timespec = std.os.linux.timespec; pub fn syscall0(number: SYS) usize { return asm volatile ("ecall" : [ret] "={x10}" (-> usize), - : [number] "{x17}" (@enumToInt(number)), + : [number] "{x17}" (@intFromEnum(number)), : "memory" ); } @@ -21,7 +21,7 @@ pub fn syscall0(number: SYS) usize { pub fn syscall1(number: SYS, arg1: usize) usize { return asm volatile ("ecall" : [ret] "={x10}" (-> usize), - : [number] "{x17}" (@enumToInt(number)), + : [number] "{x17}" (@intFromEnum(number)), [arg1] "{x10}" (arg1), : "memory" ); @@ -30,7 +30,7 @@ pub fn syscall1(number: SYS, arg1: usize) usize { pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize { return asm volatile ("ecall" : [ret] "={x10}" (-> usize), - : [number] "{x17}" (@enumToInt(number)), + : [number] "{x17}" (@intFromEnum(number)), [arg1] "{x10}" (arg1), [arg2] "{x11}" (arg2), : "memory" @@ -40,7 +40,7 @@ pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize { pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize { return asm volatile ("ecall" : [ret] "={x10}" (-> usize), - : [number] "{x17}" (@enumToInt(number)), + : [number] "{x17}" (@intFromEnum(number)), [arg1] "{x10}" (arg1), [arg2] "{x11}" (arg2), [arg3] "{x12}" (arg3), @@ -51,7 +51,7 @@ pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize { pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize) usize { return asm volatile ("ecall" : [ret] "={x10}" (-> usize), - : [number] "{x17}" (@enumToInt(number)), + : [number] "{x17}" (@intFromEnum(number)), [arg1] "{x10}" (arg1), [arg2] "{x11}" (arg2), [arg3] "{x12}" (arg3), @@ -63,7 +63,7 @@ pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize) pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize, arg5: usize) usize { return asm volatile ("ecall" : [ret] "={x10}" (-> usize), - : [number] "{x17}" (@enumToInt(number)), + : [number] "{x17}" (@intFromEnum(number)), [arg1] "{x10}" (arg1), [arg2] "{x11}" (arg2), [arg3] "{x12}" (arg3), @@ -84,7 +84,7 @@ pub fn syscall6( ) usize { return asm volatile ("ecall" : [ret] "={x10}" (-> usize), - : [number] "{x17}" (@enumToInt(number)), + : [number] "{x17}" (@intFromEnum(number)), [arg1] "{x10}" (arg1), [arg2] "{x11}" (arg2), [arg3] "{x12}" (arg3), @@ -104,7 +104,7 @@ pub const restore = restore_rt; pub fn restore_rt() callconv(.Naked) void { return asm volatile ("ecall" : - : [number] "{x17}" (@enumToInt(SYS.rt_sigreturn)), + : [number] "{x17}" (@intFromEnum(SYS.rt_sigreturn)), : "memory" ); } diff --git a/lib/std/os/linux/sparc64.zig b/lib/std/os/linux/sparc64.zig index ca1256cb2e..c741df9897 100644 --- a/lib/std/os/linux/sparc64.zig +++ b/lib/std/os/linux/sparc64.zig @@ -29,7 +29,7 @@ pub fn syscall_pipe(fd: *[2]i32) usize { \\ clr %%o0 \\2: : [ret] "={o0}" (-> usize), - : [number] "{g1}" (@enumToInt(SYS.pipe)), + : [number] "{g1}" (@intFromEnum(SYS.pipe)), [arg] "r" (fd), : "memory", "g3" ); @@ -53,7 +53,7 @@ pub fn syscall_fork() usize { \\ and %%o1, %%o0, %%o0 \\ 2: : [ret] "={o0}" (-> usize), - : [number] "{g1}" (@enumToInt(SYS.fork)), + : [number] "{g1}" (@intFromEnum(SYS.fork)), : "memory", "xcc", "o1", "o2", "o3", "o4", "o5", "o7" ); } @@ -66,7 +66,7 @@ pub fn syscall0(number: SYS) usize { \\ neg %%o0 \\ 1: : [ret] "={o0}" (-> usize), - : [number] "{g1}" (@enumToInt(number)), + : [number] "{g1}" (@intFromEnum(number)), : "memory", "xcc", "o1", "o2", "o3", "o4", "o5", "o7" ); } @@ -79,7 +79,7 @@ pub fn syscall1(number: SYS, arg1: usize) usize { \\ neg %%o0 \\ 1: : [ret] "={o0}" (-> usize), - : [number] "{g1}" (@enumToInt(number)), + : [number] "{g1}" (@intFromEnum(number)), [arg1] "{o0}" (arg1), : "memory", "xcc", "o1", "o2", "o3", "o4", "o5", "o7" ); @@ -93,7 +93,7 @@ pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize { \\ neg %%o0 \\ 1: : [ret] "={o0}" (-> usize), - : [number] "{g1}" (@enumToInt(number)), + : [number] "{g1}" (@intFromEnum(number)), [arg1] "{o0}" (arg1), [arg2] "{o1}" (arg2), : "memory", "xcc", "o1", "o2", "o3", "o4", "o5", "o7" @@ -108,7 +108,7 @@ pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize { \\ neg %%o0 \\ 1: : [ret] "={o0}" (-> usize), - : [number] "{g1}" (@enumToInt(number)), + : [number] "{g1}" (@intFromEnum(number)), [arg1] "{o0}" (arg1), [arg2] "{o1}" (arg2), [arg3] "{o2}" (arg3), @@ -124,7 +124,7 @@ pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize) \\ neg %%o0 \\ 1: : [ret] "={o0}" (-> usize), - : [number] "{g1}" (@enumToInt(number)), + : [number] "{g1}" (@intFromEnum(number)), [arg1] "{o0}" (arg1), [arg2] "{o1}" (arg2), [arg3] "{o2}" (arg3), @@ -141,7 +141,7 @@ pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize, \\ neg %%o0 \\ 1: : [ret] "={o0}" (-> usize), - : [number] "{g1}" (@enumToInt(number)), + : [number] "{g1}" (@intFromEnum(number)), [arg1] "{o0}" (arg1), [arg2] "{o1}" (arg2), [arg3] "{o2}" (arg3), @@ -167,7 +167,7 @@ pub fn syscall6( \\ neg %%o0 \\ 1: : [ret] "={o0}" (-> usize), - : [number] "{g1}" (@enumToInt(number)), + : [number] "{g1}" (@intFromEnum(number)), [arg1] "{o0}" (arg1), [arg2] "{o1}" (arg2), [arg3] "{o2}" (arg3), @@ -190,7 +190,7 @@ pub const restore = restore_rt; pub fn restore_rt() callconv(.C) void { return asm volatile ("t 0x6d" : - : [number] "{g1}" (@enumToInt(SYS.rt_sigreturn)), + : [number] "{g1}" (@intFromEnum(SYS.rt_sigreturn)), : "memory", "xcc", "o0", "o1", "o2", "o3", "o4", "o5", "o7" ); } diff --git a/lib/std/os/linux/start_pie.zig b/lib/std/os/linux/start_pie.zig index aa1418f4a3..c9b1cb1e92 100644 --- a/lib/std/os/linux/start_pie.zig +++ b/lib/std/os/linux/start_pie.zig @@ -78,7 +78,7 @@ pub fn relocate(phdrs: []elf.Phdr) void { const base_addr = base: { for (phdrs) |*phdr| { if (phdr.p_type != elf.PT_DYNAMIC) continue; - break :base @ptrToInt(dynv) - phdr.p_vaddr; + break :base @intFromPtr(dynv) - phdr.p_vaddr; } // This is not supposed to happen for well-formed binaries. std.os.abort(); @@ -103,17 +103,17 @@ pub fn relocate(phdrs: []elf.Phdr) void { // Apply the relocations. if (rel_addr != 0) { - const rel = std.mem.bytesAsSlice(elf.Rel, @intToPtr([*]u8, rel_addr)[0..rel_size]); + const rel = std.mem.bytesAsSlice(elf.Rel, @ptrFromInt([*]u8, rel_addr)[0..rel_size]); for (rel) |r| { if (r.r_type() != R_RELATIVE) continue; - @intToPtr(*usize, base_addr + r.r_offset).* += base_addr; + @ptrFromInt(*usize, base_addr + r.r_offset).* += base_addr; } } if (rela_addr != 0) { - const rela = std.mem.bytesAsSlice(elf.Rela, @intToPtr([*]u8, rela_addr)[0..rela_size]); + const rela = std.mem.bytesAsSlice(elf.Rela, @ptrFromInt([*]u8, rela_addr)[0..rela_size]); for (rela) |r| { if (r.r_type() != R_RELATIVE) continue; - @intToPtr(*usize, base_addr + r.r_offset).* += base_addr + @bitCast(usize, r.r_addend); + @ptrFromInt(*usize, base_addr + r.r_offset).* += base_addr + @bitCast(usize, r.r_addend); } } } diff --git a/lib/std/os/linux/thumb.zig b/lib/std/os/linux/thumb.zig index 6ac51afb78..ec514ca5de 100644 --- a/lib/std/os/linux/thumb.zig +++ b/lib/std/os/linux/thumb.zig @@ -10,7 +10,7 @@ const SYS = linux.SYS; pub fn syscall0(number: SYS) usize { @setRuntimeSafety(false); - var buf: [2]usize = .{ @enumToInt(number), undefined }; + var buf: [2]usize = .{ @intFromEnum(number), undefined }; return asm volatile ( \\ str r7, [%[tmp], #4] \\ ldr r7, [%[tmp]] @@ -25,7 +25,7 @@ pub fn syscall0(number: SYS) usize { pub fn syscall1(number: SYS, arg1: usize) usize { @setRuntimeSafety(false); - var buf: [2]usize = .{ @enumToInt(number), undefined }; + var buf: [2]usize = .{ @intFromEnum(number), undefined }; return asm volatile ( \\ str r7, [%[tmp], #4] \\ ldr r7, [%[tmp]] @@ -41,7 +41,7 @@ pub fn syscall1(number: SYS, arg1: usize) usize { pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize { @setRuntimeSafety(false); - var buf: [2]usize = .{ @enumToInt(number), undefined }; + var buf: [2]usize = .{ @intFromEnum(number), undefined }; return asm volatile ( \\ str r7, [%[tmp], #4] \\ ldr r7, [%[tmp]] @@ -58,7 +58,7 @@ pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize { pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize { @setRuntimeSafety(false); - var buf: [2]usize = .{ @enumToInt(number), undefined }; + var buf: [2]usize = .{ @intFromEnum(number), undefined }; return asm volatile ( \\ str r7, [%[tmp], #4] \\ ldr r7, [%[tmp]] @@ -76,7 +76,7 @@ pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize { pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize) usize { @setRuntimeSafety(false); - var buf: [2]usize = .{ @enumToInt(number), undefined }; + var buf: [2]usize = .{ @intFromEnum(number), undefined }; return asm volatile ( \\ str r7, [%[tmp], #4] \\ ldr r7, [%[tmp]] @@ -95,7 +95,7 @@ pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize) pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize, arg5: usize) usize { @setRuntimeSafety(false); - var buf: [2]usize = .{ @enumToInt(number), undefined }; + var buf: [2]usize = .{ @intFromEnum(number), undefined }; return asm volatile ( \\ str r7, [%[tmp], #4] \\ ldr r7, [%[tmp]] @@ -123,7 +123,7 @@ pub fn syscall6( ) usize { @setRuntimeSafety(false); - var buf: [2]usize = .{ @enumToInt(number), undefined }; + var buf: [2]usize = .{ @intFromEnum(number), undefined }; return asm volatile ( \\ str r7, [%[tmp], #4] \\ ldr r7, [%[tmp]] @@ -146,7 +146,7 @@ pub fn restore() callconv(.Naked) void { \\ mov r7, %[number] \\ svc #0 : - : [number] "I" (@enumToInt(SYS.sigreturn)), + : [number] "I" (@intFromEnum(SYS.sigreturn)), ); } @@ -155,7 +155,7 @@ pub fn restore_rt() callconv(.Naked) void { \\ mov r7, %[number] \\ svc #0 : - : [number] "I" (@enumToInt(SYS.rt_sigreturn)), + : [number] "I" (@intFromEnum(SYS.rt_sigreturn)), : "memory" ); } diff --git a/lib/std/os/linux/tls.zig b/lib/std/os/linux/tls.zig index d765e403c8..b60a2ed388 100644 --- a/lib/std/os/linux/tls.zig +++ b/lib/std/os/linux/tls.zig @@ -122,7 +122,7 @@ pub fn setThreadPointer(addr: usize) void { .seg_not_present = 0, .useable = 1, }; - const rc = std.os.linux.syscall1(.set_thread_area, @ptrToInt(&user_desc)); + const rc = std.os.linux.syscall1(.set_thread_area, @intFromPtr(&user_desc)); assert(rc == 0); const gdt_entry_number = user_desc.entry_number; @@ -191,7 +191,7 @@ fn initTLS(phdrs: []elf.Phdr) void { for (phdrs) |*phdr| { switch (phdr.p_type) { - elf.PT_PHDR => img_base = @ptrToInt(phdrs.ptr) - phdr.p_vaddr, + elf.PT_PHDR => img_base = @intFromPtr(phdrs.ptr) - phdr.p_vaddr, elf.PT_TLS => tls_phdr = phdr, else => {}, } @@ -205,7 +205,7 @@ fn initTLS(phdrs: []elf.Phdr) void { // the data stored in the PT_TLS segment is p_filesz and may be less // than the former tls_align_factor = phdr.p_align; - tls_data = @intToPtr([*]u8, img_base + phdr.p_vaddr)[0..phdr.p_filesz]; + tls_data = @ptrFromInt([*]u8, img_base + phdr.p_vaddr)[0..phdr.p_filesz]; tls_data_alloc_size = phdr.p_memsz; } else { tls_align_factor = @alignOf(usize); @@ -292,7 +292,7 @@ pub fn prepareTLS(area: []u8) usize { // Return the corrected value (if needed) for the tp register. // Overflow here is not a problem, the pointer arithmetic involving the tp // is done with wrapping semantics. - return @ptrToInt(area.ptr) +% tls_tp_offset +% + return @intFromPtr(area.ptr) +% tls_tp_offset +% if (tls_tp_points_past_tcb) tls_image.data_offset else tls_image.tcb_offset; } @@ -328,7 +328,7 @@ pub fn initStaticTLS(phdrs: []elf.Phdr) void { ) catch os.abort(); // Make sure the slice is correctly aligned. - const begin_addr = @ptrToInt(alloc_tls_area.ptr); + const begin_addr = @intFromPtr(alloc_tls_area.ptr); const begin_aligned_addr = mem.alignForward(usize, begin_addr, tls_image.alloc_align); const start = begin_aligned_addr - begin_addr; break :blk alloc_tls_area[start .. start + tls_image.alloc_size]; diff --git a/lib/std/os/linux/vdso.zig b/lib/std/os/linux/vdso.zig index dc2f85776d..c7dc7ae599 100644 --- a/lib/std/os/linux/vdso.zig +++ b/lib/std/os/linux/vdso.zig @@ -8,7 +8,7 @@ pub fn lookup(vername: []const u8, name: []const u8) usize { const vdso_addr = std.os.system.getauxval(std.elf.AT_SYSINFO_EHDR); if (vdso_addr == 0) return 0; - const eh = @intToPtr(*elf.Ehdr, vdso_addr); + const eh = @ptrFromInt(*elf.Ehdr, vdso_addr); var ph_addr: usize = vdso_addr + eh.e_phoff; var maybe_dynv: ?[*]usize = null; @@ -19,14 +19,14 @@ pub fn lookup(vername: []const u8, name: []const u8) usize { i += 1; ph_addr += eh.e_phentsize; }) { - const this_ph = @intToPtr(*elf.Phdr, ph_addr); + const this_ph = @ptrFromInt(*elf.Phdr, ph_addr); switch (this_ph.p_type) { // On WSL1 as well as older kernels, the VDSO ELF image is pre-linked in the upper half // of the memory space (e.g. p_vaddr = 0xffffffffff700000 on WSL1). // Wrapping operations are used on this line as well as subsequent calculations relative to base // (lines 47, 78) to ensure no overflow check is tripped. elf.PT_LOAD => base = vdso_addr +% this_ph.p_offset -% this_ph.p_vaddr, - elf.PT_DYNAMIC => maybe_dynv = @intToPtr([*]usize, vdso_addr + this_ph.p_offset), + elf.PT_DYNAMIC => maybe_dynv = @ptrFromInt([*]usize, vdso_addr + this_ph.p_offset), else => {}, } } @@ -45,11 +45,11 @@ pub fn lookup(vername: []const u8, name: []const u8) usize { while (dynv[i] != 0) : (i += 2) { const p = base +% dynv[i + 1]; switch (dynv[i]) { - elf.DT_STRTAB => maybe_strings = @intToPtr([*]u8, p), - elf.DT_SYMTAB => maybe_syms = @intToPtr([*]elf.Sym, p), - elf.DT_HASH => maybe_hashtab = @intToPtr([*]linux.Elf_Symndx, p), - elf.DT_VERSYM => maybe_versym = @intToPtr([*]u16, p), - elf.DT_VERDEF => maybe_verdef = @intToPtr(*elf.Verdef, p), + elf.DT_STRTAB => maybe_strings = @ptrFromInt([*]u8, p), + elf.DT_SYMTAB => maybe_syms = @ptrFromInt([*]elf.Sym, p), + elf.DT_HASH => maybe_hashtab = @ptrFromInt([*]linux.Elf_Symndx, p), + elf.DT_VERSYM => maybe_versym = @ptrFromInt([*]u16, p), + elf.DT_VERDEF => maybe_verdef = @ptrFromInt(*elf.Verdef, p), else => {}, } } @@ -88,9 +88,9 @@ fn checkver(def_arg: *elf.Verdef, vsym_arg: i32, vername: []const u8, strings: [ break; if (def.vd_next == 0) return false; - def = @intToPtr(*elf.Verdef, @ptrToInt(def) + def.vd_next); + def = @ptrFromInt(*elf.Verdef, @intFromPtr(def) + def.vd_next); } - const aux = @intToPtr(*elf.Verdaux, @ptrToInt(def) + def.vd_aux); + const aux = @ptrFromInt(*elf.Verdaux, @intFromPtr(def) + def.vd_aux); const vda_name = @ptrCast([*:0]u8, strings + aux.vda_name); return mem.eql(u8, vername, mem.sliceTo(vda_name, 0)); } diff --git a/lib/std/os/linux/x86.zig b/lib/std/os/linux/x86.zig index c9274e11ee..05c012c77c 100644 --- a/lib/std/os/linux/x86.zig +++ b/lib/std/os/linux/x86.zig @@ -16,7 +16,7 @@ const timespec = linux.timespec; pub fn syscall0(number: SYS) usize { return asm volatile ("int $0x80" : [ret] "={eax}" (-> usize), - : [number] "{eax}" (@enumToInt(number)), + : [number] "{eax}" (@intFromEnum(number)), : "memory" ); } @@ -24,7 +24,7 @@ pub fn syscall0(number: SYS) usize { pub fn syscall1(number: SYS, arg1: usize) usize { return asm volatile ("int $0x80" : [ret] "={eax}" (-> usize), - : [number] "{eax}" (@enumToInt(number)), + : [number] "{eax}" (@intFromEnum(number)), [arg1] "{ebx}" (arg1), : "memory" ); @@ -33,7 +33,7 @@ pub fn syscall1(number: SYS, arg1: usize) usize { pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize { return asm volatile ("int $0x80" : [ret] "={eax}" (-> usize), - : [number] "{eax}" (@enumToInt(number)), + : [number] "{eax}" (@intFromEnum(number)), [arg1] "{ebx}" (arg1), [arg2] "{ecx}" (arg2), : "memory" @@ -43,7 +43,7 @@ pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize { pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize { return asm volatile ("int $0x80" : [ret] "={eax}" (-> usize), - : [number] "{eax}" (@enumToInt(number)), + : [number] "{eax}" (@intFromEnum(number)), [arg1] "{ebx}" (arg1), [arg2] "{ecx}" (arg2), [arg3] "{edx}" (arg3), @@ -54,7 +54,7 @@ pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize { pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize) usize { return asm volatile ("int $0x80" : [ret] "={eax}" (-> usize), - : [number] "{eax}" (@enumToInt(number)), + : [number] "{eax}" (@intFromEnum(number)), [arg1] "{ebx}" (arg1), [arg2] "{ecx}" (arg2), [arg3] "{edx}" (arg3), @@ -66,7 +66,7 @@ pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize) pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize, arg5: usize) usize { return asm volatile ("int $0x80" : [ret] "={eax}" (-> usize), - : [number] "{eax}" (@enumToInt(number)), + : [number] "{eax}" (@intFromEnum(number)), [arg1] "{ebx}" (arg1), [arg2] "{ecx}" (arg2), [arg3] "{edx}" (arg3), @@ -97,7 +97,7 @@ pub fn syscall6( \\ pop %%ebp \\ add $4, %%esp : [ret] "={eax}" (-> usize), - : [number] "{eax}" (@enumToInt(number)), + : [number] "{eax}" (@intFromEnum(number)), [arg1] "{ebx}" (arg1), [arg2] "{ecx}" (arg2), [arg3] "{edx}" (arg3), @@ -111,9 +111,9 @@ pub fn syscall6( pub fn socketcall(call: usize, args: [*]const usize) usize { return asm volatile ("int $0x80" : [ret] "={eax}" (-> usize), - : [number] "{eax}" (@enumToInt(SYS.socketcall)), + : [number] "{eax}" (@intFromEnum(SYS.socketcall)), [arg1] "{ebx}" (call), - [arg2] "{ecx}" (@ptrToInt(args)), + [arg2] "{ecx}" (@intFromPtr(args)), : "memory" ); } @@ -130,14 +130,14 @@ pub fn restore() callconv(.Naked) void { \\ int $0x80 \\ ret : - : [number] "i" (@enumToInt(SYS.sigreturn)), + : [number] "i" (@intFromEnum(SYS.sigreturn)), : "memory" ), else => asm volatile ( \\ int $0x80 \\ ret : - : [number] "{eax}" (@enumToInt(SYS.sigreturn)), + : [number] "{eax}" (@intFromEnum(SYS.sigreturn)), : "memory" ), } @@ -151,14 +151,14 @@ pub fn restore_rt() callconv(.Naked) void { \\ int $0x80 \\ ret : - : [number] "i" (@enumToInt(SYS.rt_sigreturn)), + : [number] "i" (@intFromEnum(SYS.rt_sigreturn)), : "memory" ), else => asm volatile ( \\ int $0x80 \\ ret : - : [number] "{eax}" (@enumToInt(SYS.rt_sigreturn)), + : [number] "{eax}" (@intFromEnum(SYS.rt_sigreturn)), : "memory" ), } diff --git a/lib/std/os/linux/x86_64.zig b/lib/std/os/linux/x86_64.zig index 09047bda83..41c9c9ea46 100644 --- a/lib/std/os/linux/x86_64.zig +++ b/lib/std/os/linux/x86_64.zig @@ -18,7 +18,7 @@ const timespec = linux.timespec; pub fn syscall0(number: SYS) usize { return asm volatile ("syscall" : [ret] "={rax}" (-> usize), - : [number] "{rax}" (@enumToInt(number)), + : [number] "{rax}" (@intFromEnum(number)), : "rcx", "r11", "memory" ); } @@ -26,7 +26,7 @@ pub fn syscall0(number: SYS) usize { pub fn syscall1(number: SYS, arg1: usize) usize { return asm volatile ("syscall" : [ret] "={rax}" (-> usize), - : [number] "{rax}" (@enumToInt(number)), + : [number] "{rax}" (@intFromEnum(number)), [arg1] "{rdi}" (arg1), : "rcx", "r11", "memory" ); @@ -35,7 +35,7 @@ pub fn syscall1(number: SYS, arg1: usize) usize { pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize { return asm volatile ("syscall" : [ret] "={rax}" (-> usize), - : [number] "{rax}" (@enumToInt(number)), + : [number] "{rax}" (@intFromEnum(number)), [arg1] "{rdi}" (arg1), [arg2] "{rsi}" (arg2), : "rcx", "r11", "memory" @@ -45,7 +45,7 @@ pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize { pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize { return asm volatile ("syscall" : [ret] "={rax}" (-> usize), - : [number] "{rax}" (@enumToInt(number)), + : [number] "{rax}" (@intFromEnum(number)), [arg1] "{rdi}" (arg1), [arg2] "{rsi}" (arg2), [arg3] "{rdx}" (arg3), @@ -56,7 +56,7 @@ pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize { pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize) usize { return asm volatile ("syscall" : [ret] "={rax}" (-> usize), - : [number] "{rax}" (@enumToInt(number)), + : [number] "{rax}" (@intFromEnum(number)), [arg1] "{rdi}" (arg1), [arg2] "{rsi}" (arg2), [arg3] "{rdx}" (arg3), @@ -68,7 +68,7 @@ pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize) pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize, arg5: usize) usize { return asm volatile ("syscall" : [ret] "={rax}" (-> usize), - : [number] "{rax}" (@enumToInt(number)), + : [number] "{rax}" (@intFromEnum(number)), [arg1] "{rdi}" (arg1), [arg2] "{rsi}" (arg2), [arg3] "{rdx}" (arg3), @@ -89,7 +89,7 @@ pub fn syscall6( ) usize { return asm volatile ("syscall" : [ret] "={rax}" (-> usize), - : [number] "{rax}" (@enumToInt(number)), + : [number] "{rax}" (@intFromEnum(number)), [arg1] "{rdi}" (arg1), [arg2] "{rsi}" (arg2), [arg3] "{rdx}" (arg3), @@ -114,14 +114,14 @@ pub fn restore_rt() callconv(.Naked) void { \\ syscall \\ retq : - : [number] "i" (@enumToInt(SYS.rt_sigreturn)), + : [number] "i" (@intFromEnum(SYS.rt_sigreturn)), : "rcx", "r11", "memory" ), else => asm volatile ( \\ syscall \\ retq : - : [number] "{rax}" (@enumToInt(SYS.rt_sigreturn)), + : [number] "{rax}" (@intFromEnum(SYS.rt_sigreturn)), : "rcx", "r11", "memory" ), } diff --git a/lib/std/os/plan9.zig b/lib/std/os/plan9.zig index 1f46915b27..b628bc2afc 100644 --- a/lib/std/os/plan9.zig +++ b/lib/std/os/plan9.zig @@ -10,7 +10,7 @@ pub const E = @import("plan9/errno.zig").E; pub fn getErrno(r: usize) E { const signed_r = @bitCast(isize, r); const int = if (signed_r > -4096 and signed_r < 0) -signed_r else 0; - return @intToEnum(E, int); + return @enumFromInt(E, int); } pub const SIG = struct { /// hangup @@ -133,19 +133,19 @@ pub const SYS = enum(usize) { }; pub fn pwrite(fd: usize, buf: [*]const u8, count: usize, offset: usize) usize { - return syscall_bits.syscall4(.PWRITE, fd, @ptrToInt(buf), count, offset); + return syscall_bits.syscall4(.PWRITE, fd, @intFromPtr(buf), count, offset); } pub fn pread(fd: usize, buf: [*]const u8, count: usize, offset: usize) usize { - return syscall_bits.syscall4(.PREAD, fd, @ptrToInt(buf), count, offset); + return syscall_bits.syscall4(.PREAD, fd, @intFromPtr(buf), count, offset); } pub fn open(path: [*:0]const u8, omode: OpenMode) usize { - return syscall_bits.syscall2(.OPEN, @ptrToInt(path), @enumToInt(omode)); + return syscall_bits.syscall2(.OPEN, @intFromPtr(path), @intFromEnum(omode)); } pub fn create(path: [*:0]const u8, omode: OpenMode, perms: usize) usize { - return syscall_bits.syscall3(.CREATE, @ptrToInt(path), @enumToInt(omode), perms); + return syscall_bits.syscall3(.CREATE, @intFromPtr(path), @intFromEnum(omode), perms); } pub fn exit(status: u8) noreturn { @@ -159,7 +159,7 @@ pub fn exit(status: u8) noreturn { } pub fn exits(status: ?[*:0]const u8) noreturn { - _ = syscall_bits.syscall1(.EXITS, if (status) |s| @ptrToInt(s) else 0); + _ = syscall_bits.syscall1(.EXITS, if (status) |s| @intFromPtr(s) else 0); unreachable; } diff --git a/lib/std/os/plan9/x86_64.zig b/lib/std/os/plan9/x86_64.zig index c68fdc4f0f..ce8d44ff46 100644 --- a/lib/std/os/plan9/x86_64.zig +++ b/lib/std/os/plan9/x86_64.zig @@ -10,7 +10,7 @@ pub fn syscall1(sys: plan9.SYS, arg0: usize) usize { \\pop %%r11 : [ret] "={rax}" (-> usize), : [arg0] "{r8}" (arg0), - [syscall_number] "{rbp}" (@enumToInt(sys)), + [syscall_number] "{rbp}" (@intFromEnum(sys)), : "rcx", "rax", "rbp", "r11", "memory" ); } @@ -26,7 +26,7 @@ pub fn syscall2(sys: plan9.SYS, arg0: usize, arg1: usize) usize { : [ret] "={rax}" (-> usize), : [arg0] "{r8}" (arg0), [arg1] "{r9}" (arg1), - [syscall_number] "{rbp}" (@enumToInt(sys)), + [syscall_number] "{rbp}" (@intFromEnum(sys)), : "rcx", "rax", "rbp", "r11", "memory" ); } @@ -45,7 +45,7 @@ pub fn syscall3(sys: plan9.SYS, arg0: usize, arg1: usize, arg2: usize) usize { : [arg0] "{r8}" (arg0), [arg1] "{r9}" (arg1), [arg2] "{r10}" (arg2), - [syscall_number] "{rbp}" (@enumToInt(sys)), + [syscall_number] "{rbp}" (@intFromEnum(sys)), : "rcx", "rax", "rbp", "r11", "memory" ); } @@ -67,7 +67,7 @@ pub fn syscall4(sys: plan9.SYS, arg0: usize, arg1: usize, arg2: usize, arg3: usi [arg1] "{r9}" (arg1), [arg2] "{r10}" (arg2), [arg3] "{r11}" (arg3), - [syscall_number] "{rbp}" (@enumToInt(sys)), + [syscall_number] "{rbp}" (@intFromEnum(sys)), : "rcx", "rax", "rbp", "r11", "memory" ); } diff --git a/lib/std/os/test.zig b/lib/std/os/test.zig index 59575e0109..888b2f5c1c 100644 --- a/lib/std/os/test.zig +++ b/lib/std/os/test.zig @@ -488,7 +488,7 @@ fn iter_fn(info: *dl_phdr_info, size: usize, counter: *usize) IterFnError!void { const reloc_addr = info.dlpi_addr + phdr.p_vaddr; // Find the ELF header - const elf_header = @intToPtr(*elf.Ehdr, reloc_addr - phdr.p_offset); + const elf_header = @ptrFromInt(*elf.Ehdr, reloc_addr - phdr.p_offset); // Validate the magic if (!mem.eql(u8, elf_header.e_ident[0..4], elf.MAGIC)) return error.BadElfMagic; // Consistency check @@ -751,7 +751,7 @@ test "getrlimit and setrlimit" { } inline for (std.meta.fields(os.rlimit_resource)) |field| { - const resource = @intToEnum(os.rlimit_resource, field.value); + const resource = @enumFromInt(os.rlimit_resource, field.value); const limit = try os.getrlimit(resource); // On 32 bit MIPS musl includes a fix which changes limits greater than -1UL/2 to RLIM_INFINITY. @@ -931,10 +931,10 @@ test "POSIX file locking with fcntl" { // Place an exclusive lock on the first byte, and a shared lock on the second byte: var struct_flock = std.mem.zeroInit(os.Flock, .{ .type = os.F.WRLCK }); - _ = try os.fcntl(fd, os.F.SETLK, @ptrToInt(&struct_flock)); + _ = try os.fcntl(fd, os.F.SETLK, @intFromPtr(&struct_flock)); struct_flock.start = 1; struct_flock.type = os.F.RDLCK; - _ = try os.fcntl(fd, os.F.SETLK, @ptrToInt(&struct_flock)); + _ = try os.fcntl(fd, os.F.SETLK, @intFromPtr(&struct_flock)); // Check the locks in a child process: const pid = try os.fork(); @@ -942,15 +942,15 @@ test "POSIX file locking with fcntl" { // child expects be denied the exclusive lock: struct_flock.start = 0; struct_flock.type = os.F.WRLCK; - try expectError(error.Locked, os.fcntl(fd, os.F.SETLK, @ptrToInt(&struct_flock))); + try expectError(error.Locked, os.fcntl(fd, os.F.SETLK, @intFromPtr(&struct_flock))); // child expects to get the shared lock: struct_flock.start = 1; struct_flock.type = os.F.RDLCK; - _ = try os.fcntl(fd, os.F.SETLK, @ptrToInt(&struct_flock)); + _ = try os.fcntl(fd, os.F.SETLK, @intFromPtr(&struct_flock)); // child waits for the exclusive lock in order to test deadlock: struct_flock.start = 0; struct_flock.type = os.F.WRLCK; - _ = try os.fcntl(fd, os.F.SETLKW, @ptrToInt(&struct_flock)); + _ = try os.fcntl(fd, os.F.SETLKW, @intFromPtr(&struct_flock)); // child exits without continuing: os.exit(0); } else { @@ -959,15 +959,15 @@ test "POSIX file locking with fcntl" { // parent expects deadlock when attempting to upgrade the shared lock to exclusive: struct_flock.start = 1; struct_flock.type = os.F.WRLCK; - try expectError(error.DeadLock, os.fcntl(fd, os.F.SETLKW, @ptrToInt(&struct_flock))); + try expectError(error.DeadLock, os.fcntl(fd, os.F.SETLKW, @intFromPtr(&struct_flock))); // parent releases exclusive lock: struct_flock.start = 0; struct_flock.type = os.F.UNLCK; - _ = try os.fcntl(fd, os.F.SETLK, @ptrToInt(&struct_flock)); + _ = try os.fcntl(fd, os.F.SETLK, @intFromPtr(&struct_flock)); // parent releases shared lock: struct_flock.start = 1; struct_flock.type = os.F.UNLCK; - _ = try os.fcntl(fd, os.F.SETLK, @ptrToInt(&struct_flock)); + _ = try os.fcntl(fd, os.F.SETLK, @intFromPtr(&struct_flock)); // parent waits for child: const result = os.waitpid(pid, 0); try expect(result.status == 0 * 256); diff --git a/lib/std/os/uefi/pool_allocator.zig b/lib/std/os/uefi/pool_allocator.zig index 00b8941974..c24d9416f1 100644 --- a/lib/std/os/uefi/pool_allocator.zig +++ b/lib/std/os/uefi/pool_allocator.zig @@ -9,7 +9,7 @@ const Allocator = mem.Allocator; const UefiPoolAllocator = struct { fn getHeader(ptr: [*]u8) *[*]align(8) u8 { - return @intToPtr(*[*]align(8) u8, @ptrToInt(ptr) - @sizeOf(usize)); + return @ptrFromInt(*[*]align(8) u8, @intFromPtr(ptr) - @sizeOf(usize)); } fn alloc( @@ -31,7 +31,7 @@ const UefiPoolAllocator = struct { var unaligned_ptr: [*]align(8) u8 = undefined; if (uefi.system_table.boot_services.?.allocatePool(uefi.efi_pool_memory_type, full_len, &unaligned_ptr) != .Success) return null; - const unaligned_addr = @ptrToInt(unaligned_ptr); + const unaligned_addr = @intFromPtr(unaligned_ptr); const aligned_addr = mem.alignForward(usize, unaligned_addr + @sizeOf(usize), ptr_align); var aligned_ptr = unaligned_ptr + (aligned_addr - unaligned_addr); diff --git a/lib/std/os/uefi/protocols/device_path_protocol.zig b/lib/std/os/uefi/protocols/device_path_protocol.zig index 2365b0cb2e..c64084e6ed 100644 --- a/lib/std/os/uefi/protocols/device_path_protocol.zig +++ b/lib/std/os/uefi/protocols/device_path_protocol.zig @@ -23,7 +23,7 @@ pub const DevicePathProtocol = extern struct { /// Returns the next DevicePathProtocol node in the sequence, if any. pub fn next(self: *DevicePathProtocol) ?*DevicePathProtocol { - if (self.type == .End and @intToEnum(EndDevicePath.Subtype, self.subtype) == .EndEntire) + if (self.type == .End and @enumFromInt(EndDevicePath.Subtype, self.subtype) == .EndEntire) return null; return @ptrCast(*DevicePathProtocol, @ptrCast([*]u8, self) + self.length); @@ -37,7 +37,7 @@ pub const DevicePathProtocol = extern struct { node = next_node; } - return (@ptrToInt(node) + node.length) - @ptrToInt(self); + return (@intFromPtr(node) + node.length) - @intFromPtr(self); } /// Creates a file device path from the existing device path and a file path. @@ -99,7 +99,7 @@ pub const DevicePathProtocol = extern struct { inline for (type_info.fields) |subtype| { // The tag names match the union names, so just grab that off the enum - const tag_val: u8 = @enumToInt(@field(TTag, subtype.name)); + const tag_val: u8 = @intFromEnum(@field(TTag, subtype.name)); if (self.subtype == tag_val) { // e.g. expr = .{ .Pci = @ptrCast(...) } diff --git a/lib/std/os/windows.zig b/lib/std/os/windows.zig index c591f8cf7f..421815c04d 100644 --- a/lib/std/os/windows.zig +++ b/lib/std/os/windows.zig @@ -30,7 +30,7 @@ pub const gdi32 = @import("windows/gdi32.zig"); pub const winmm = @import("windows/winmm.zig"); pub const crypt32 = @import("windows/crypt32.zig"); -pub const self_process_handle = @intToPtr(HANDLE, maxInt(usize)); +pub const self_process_handle = @ptrFromInt(HANDLE, maxInt(usize)); const Self = @This(); @@ -242,7 +242,7 @@ pub fn DeviceIoControl( pub fn GetOverlappedResult(h: HANDLE, overlapped: *OVERLAPPED, wait: bool) !DWORD { var bytes: DWORD = undefined; - if (kernel32.GetOverlappedResult(h, overlapped, &bytes, @boolToInt(wait)) == 0) { + if (kernel32.GetOverlappedResult(h, overlapped, &bytes, @intFromBool(wait)) == 0) { switch (kernel32.GetLastError()) { .IO_INCOMPLETE => if (!wait) return error.WouldBlock else unreachable, else => |err| return unexpectedError(err), @@ -294,7 +294,7 @@ pub fn WaitForSingleObject(handle: HANDLE, milliseconds: DWORD) WaitForSingleObj } pub fn WaitForSingleObjectEx(handle: HANDLE, milliseconds: DWORD, alertable: bool) WaitForSingleObjectError!void { - switch (kernel32.WaitForSingleObjectEx(handle, milliseconds, @boolToInt(alertable))) { + switch (kernel32.WaitForSingleObjectEx(handle, milliseconds, @intFromBool(alertable))) { WAIT_ABANDONED => return error.WaitAbandoned, WAIT_OBJECT_0 => return, WAIT_TIMEOUT => return error.WaitTimeOut, @@ -311,9 +311,9 @@ pub fn WaitForMultipleObjectsEx(handles: []const HANDLE, waitAll: bool, millisec switch (kernel32.WaitForMultipleObjectsEx( nCount, handles.ptr, - @boolToInt(waitAll), + @intFromBool(waitAll), milliseconds, - @boolToInt(alertable), + @intFromBool(alertable), )) { WAIT_OBJECT_0...WAIT_OBJECT_0 + MAXIMUM_WAIT_OBJECTS => |n| { const handle_index = n - WAIT_OBJECT_0; @@ -422,7 +422,7 @@ pub fn GetQueuedCompletionStatusEx( @intCast(ULONG, completion_port_entries.len), &num_entries_removed, timeout_ms orelse INFINITE, - @boolToInt(alertable), + @intFromBool(alertable), ); if (success == FALSE) { @@ -1106,7 +1106,7 @@ test "QueryObjectName" { var out_buffer: [PATH_MAX_WIDE]u16 = undefined; var result_path = try QueryObjectName(handle, &out_buffer); - const required_len_in_u16 = result_path.len + @divExact(@ptrToInt(result_path.ptr) - @ptrToInt(&out_buffer), 2) + 1; + const required_len_in_u16 = result_path.len + @divExact(@intFromPtr(result_path.ptr) - @intFromPtr(&out_buffer), 2) + 1; //insufficient size try std.testing.expectError(error.NameTooLong, QueryObjectName(handle, out_buffer[0 .. required_len_in_u16 - 1])); //exactly-sufficient size @@ -1263,7 +1263,7 @@ test "GetFinalPathNameByHandle" { const nt_path = try GetFinalPathNameByHandle(handle, .{ .volume_name = .Nt }, &buffer); _ = try GetFinalPathNameByHandle(handle, .{ .volume_name = .Dos }, &buffer); - const required_len_in_u16 = nt_path.len + @divExact(@ptrToInt(nt_path.ptr) - @ptrToInt(&buffer), 2) + 1; + const required_len_in_u16 = nt_path.len + @divExact(@intFromPtr(nt_path.ptr) - @intFromPtr(&buffer), 2) + 1; //check with insufficient size try std.testing.expectError(error.NameTooLong, GetFinalPathNameByHandle(handle, .{ .volume_name = .Nt }, buffer[0 .. required_len_in_u16 - 1])); try std.testing.expectError(error.NameTooLong, GetFinalPathNameByHandle(handle, .{ .volume_name = .Dos }, buffer[0 .. required_len_in_u16 - 1])); @@ -1313,7 +1313,7 @@ pub fn WSAStartup(majorVersion: u8, minorVersion: u8) !ws2_32.WSADATA { var wsadata: ws2_32.WSADATA = undefined; return switch (ws2_32.WSAStartup((@as(WORD, minorVersion) << 8) | majorVersion, &wsadata)) { 0 => wsadata, - else => |err_int| switch (@intToEnum(ws2_32.WinsockError, @intCast(u16, err_int))) { + else => |err_int| switch (@enumFromInt(ws2_32.WinsockError, @intCast(u16, err_int))) { .WSASYSNOTREADY => return error.SystemNotAvailable, .WSAVERNOTSUPPORTED => return error.VersionNotSupported, .WSAEINPROGRESS => return error.BlockingOperationInProgress, @@ -2286,7 +2286,7 @@ pub fn loadWinsockExtensionFunction(comptime T: type, sock: ws2_32.SOCKET, guid: ws2_32.SIO_GET_EXTENSION_FUNCTION_POINTER, @ptrCast(*const anyopaque, &guid), @sizeOf(GUID), - @intToPtr(?*anyopaque, @ptrToInt(&function)), + @ptrFromInt(?*anyopaque, @intFromPtr(&function)), @sizeOf(T), &num_bytes, null, @@ -2325,21 +2325,21 @@ pub fn unexpectedError(err: Win32Error) std.os.UnexpectedError { null, ); _ = std.unicode.utf16leToUtf8(&buf_utf8, buf_wstr[0..len]) catch unreachable; - std.debug.print("error.Unexpected: GetLastError({}): {s}\n", .{ @enumToInt(err), buf_utf8[0..len] }); + std.debug.print("error.Unexpected: GetLastError({}): {s}\n", .{ @intFromEnum(err), buf_utf8[0..len] }); std.debug.dumpCurrentStackTrace(@returnAddress()); } return error.Unexpected; } pub fn unexpectedWSAError(err: ws2_32.WinsockError) std.os.UnexpectedError { - return unexpectedError(@intToEnum(Win32Error, @enumToInt(err))); + return unexpectedError(@enumFromInt(Win32Error, @intFromEnum(err))); } /// Call this when you made a windows NtDll call /// and you get an unexpected status. pub fn unexpectedStatus(status: NTSTATUS) std.os.UnexpectedError { if (std.os.unexpected_error_tracing) { - std.debug.print("error.Unexpected NTSTATUS=0x{x}\n", .{@enumToInt(status)}); + std.debug.print("error.Unexpected NTSTATUS=0x{x}\n", .{@intFromEnum(status)}); std.debug.dumpCurrentStackTrace(@returnAddress()); } return error.Unexpected; @@ -2527,10 +2527,10 @@ pub fn CTL_CODE(deviceType: u16, function: u12, method: TransferType, access: u2 return (@as(DWORD, deviceType) << 16) | (@as(DWORD, access) << 14) | (@as(DWORD, function) << 2) | - @enumToInt(method); + @intFromEnum(method); } -pub const INVALID_HANDLE_VALUE = @intToPtr(HANDLE, maxInt(usize)); +pub const INVALID_HANDLE_VALUE = @ptrFromInt(HANDLE, maxInt(usize)); pub const INVALID_FILE_ATTRIBUTES = @as(DWORD, maxInt(DWORD)); @@ -3221,7 +3221,7 @@ pub const LSTATUS = LONG; pub const HKEY = *opaque {}; -pub const HKEY_LOCAL_MACHINE: HKEY = @intToPtr(HKEY, 0x80000002); +pub const HKEY_LOCAL_MACHINE: HKEY = @ptrFromInt(HKEY, 0x80000002); /// Combines the STANDARD_RIGHTS_REQUIRED, KEY_QUERY_VALUE, KEY_SET_VALUE, KEY_CREATE_SUB_KEY, /// KEY_ENUMERATE_SUB_KEYS, KEY_NOTIFY, and KEY_CREATE_LINK access rights. @@ -4685,11 +4685,11 @@ pub const KUSER_SHARED_DATA = extern struct { /// Read-only user-mode address for the shared data. /// https://www.geoffchappell.com/studies/windows/km/ntoskrnl/inc/api/ntexapi_x/kuser_shared_data/index.htm /// https://msrc-blog.microsoft.com/2022/04/05/randomizing-the-kuser_shared_data-structure-on-windows/ -pub const SharedUserData: *const KUSER_SHARED_DATA = @intToPtr(*const KUSER_SHARED_DATA, 0x7FFE0000); +pub const SharedUserData: *const KUSER_SHARED_DATA = @ptrFromInt(*const KUSER_SHARED_DATA, 0x7FFE0000); pub fn IsProcessorFeaturePresent(feature: PF) bool { - if (@enumToInt(feature) >= PROCESSOR_FEATURE_MAX) return false; - return SharedUserData.ProcessorFeatures[@enumToInt(feature)] == 1; + if (@intFromEnum(feature) >= PROCESSOR_FEATURE_MAX) return false; + return SharedUserData.ProcessorFeatures[@intFromEnum(feature)] == 1; } pub const TH32CS_SNAPHEAPLIST = 0x00000001; diff --git a/lib/std/os/windows/user32.zig b/lib/std/os/windows/user32.zig index 211b9d8462..0d6fc2c670 100644 --- a/lib/std/os/windows/user32.zig +++ b/lib/std/os/windows/user32.zig @@ -1350,7 +1350,7 @@ pub extern "user32" fn AdjustWindowRectEx(lpRect: *RECT, dwStyle: DWORD, bMenu: pub fn adjustWindowRectEx(lpRect: *RECT, dwStyle: u32, bMenu: bool, dwExStyle: u32) !void { assert(dwStyle & WS_OVERLAPPED == 0); - if (AdjustWindowRectEx(lpRect, dwStyle, @boolToInt(bMenu), dwExStyle) == 0) { + if (AdjustWindowRectEx(lpRect, dwStyle, @intFromBool(bMenu), dwExStyle) == 0) { switch (GetLastError()) { .INVALID_PARAMETER => unreachable, else => |err| return windows.unexpectedError(err), diff --git a/lib/std/os/windows/ws2_32.zig b/lib/std/os/windows/ws2_32.zig index ae624dfd2b..821b903a34 100644 --- a/lib/std/os/windows/ws2_32.zig +++ b/lib/std/os/windows/ws2_32.zig @@ -21,7 +21,7 @@ const LPARAM = windows.LPARAM; const FARPROC = windows.FARPROC; pub const SOCKET = *opaque {}; -pub const INVALID_SOCKET = @intToPtr(SOCKET, ~@as(usize, 0)); +pub const INVALID_SOCKET = @ptrFromInt(SOCKET, ~@as(usize, 0)); pub const GROUP = u32; pub const ADDRESS_FAMILY = u16; diff --git a/lib/std/pdb.zig b/lib/std/pdb.zig index 180507ba71..25a6786ec6 100644 --- a/lib/std/pdb.zig +++ b/lib/std/pdb.zig @@ -863,7 +863,7 @@ pub const Pdb = struct { } pub fn getStream(self: *Pdb, stream: StreamType) ?*MsfStream { - const id = @enumToInt(stream); + const id = @intFromEnum(stream); return self.getStreamById(id); } }; diff --git a/lib/std/process.zig b/lib/std/process.zig index f27b7e835b..05066fa436 100644 --- a/lib/std/process.zig +++ b/lib/std/process.zig @@ -514,9 +514,9 @@ pub const ArgIteratorWasi = struct { /// Call to free the internal buffer of the iterator. pub fn deinit(self: *ArgIteratorWasi) void { const last_item = self.args[self.args.len - 1]; - const last_byte_addr = @ptrToInt(last_item.ptr) + last_item.len + 1; // null terminated + const last_byte_addr = @intFromPtr(last_item.ptr) + last_item.len + 1; // null terminated const first_item_ptr = self.args[0].ptr; - const len = last_byte_addr - @ptrToInt(first_item_ptr); + const len = last_byte_addr - @intFromPtr(first_item_ptr); self.allocator.free(first_item_ptr[0..len]); self.allocator.free(self.args); } @@ -1079,9 +1079,9 @@ pub fn getBaseAddress() usize { return phdr - @sizeOf(std.elf.Ehdr); }, .macos, .freebsd, .netbsd => { - return @ptrToInt(&std.c._mh_execute_header); + return @intFromPtr(&std.c._mh_execute_header); }, - .windows => return @ptrToInt(os.windows.kernel32.GetModuleHandleW(null)), + .windows => return @intFromPtr(os.windows.kernel32.GetModuleHandleW(null)), else => @compileError("Unsupported OS"), } } diff --git a/lib/std/rand/benchmark.zig b/lib/std/rand/benchmark.zig index 668b664c27..ea3de9c70d 100644 --- a/lib/std/rand/benchmark.zig +++ b/lib/std/rand/benchmark.zig @@ -91,8 +91,8 @@ pub fn benchmark(comptime H: anytype, bytes: usize, comptime block_size: usize) } const end = timer.read(); - const elapsed_s = @intToFloat(f64, end - start) / time.ns_per_s; - const throughput = @floatToInt(u64, @intToFloat(f64, bytes) / elapsed_s); + const elapsed_s = @floatFromInt(f64, end - start) / time.ns_per_s; + const throughput = @intFromFloat(u64, @floatFromInt(f64, bytes) / elapsed_s); std.debug.assert(rng.random().int(u64) != 0); diff --git a/lib/std/rand/test.zig b/lib/std/rand/test.zig index d257425ad1..6cc6891c5a 100644 --- a/lib/std/rand/test.zig +++ b/lib/std/rand/test.zig @@ -332,13 +332,13 @@ test "Random float chi-square goodness of fit" { while (i < num_numbers) : (i += 1) { const rand_f32 = random.float(f32); const rand_f64 = random.float(f64); - var f32_put = try f32_hist.getOrPut(@floatToInt(u32, rand_f32 * @intToFloat(f32, num_buckets))); + var f32_put = try f32_hist.getOrPut(@intFromFloat(u32, rand_f32 * @floatFromInt(f32, num_buckets))); if (f32_put.found_existing) { f32_put.value_ptr.* += 1; } else { f32_put.value_ptr.* = 1; } - var f64_put = try f64_hist.getOrPut(@floatToInt(u32, rand_f64 * @intToFloat(f64, num_buckets))); + var f64_put = try f64_hist.getOrPut(@intFromFloat(u32, rand_f64 * @floatFromInt(f64, num_buckets))); if (f64_put.found_existing) { f64_put.value_ptr.* += 1; } else { @@ -352,8 +352,8 @@ test "Random float chi-square goodness of fit" { { var j: u32 = 0; while (j < num_buckets) : (j += 1) { - const count = @intToFloat(f64, (if (f32_hist.get(j)) |v| v else 0)); - const expected = @intToFloat(f64, num_numbers) / @intToFloat(f64, num_buckets); + const count = @floatFromInt(f64, (if (f32_hist.get(j)) |v| v else 0)); + const expected = @floatFromInt(f64, num_numbers) / @floatFromInt(f64, num_buckets); const delta = count - expected; const variance = (delta * delta) / expected; f32_total_variance += variance; @@ -363,8 +363,8 @@ test "Random float chi-square goodness of fit" { { var j: u64 = 0; while (j < num_buckets) : (j += 1) { - const count = @intToFloat(f64, (if (f64_hist.get(j)) |v| v else 0)); - const expected = @intToFloat(f64, num_numbers) / @intToFloat(f64, num_buckets); + const count = @floatFromInt(f64, (if (f64_hist.get(j)) |v| v else 0)); + const expected = @floatFromInt(f64, num_numbers) / @floatFromInt(f64, num_buckets); const delta = count - expected; const variance = (delta * delta) / expected; f64_total_variance += variance; diff --git a/lib/std/simd.zig b/lib/std/simd.zig index 4ccdac6c1e..78d24a80bf 100644 --- a/lib/std/simd.zig +++ b/lib/std/simd.zig @@ -61,7 +61,7 @@ pub fn suggestVectorSize(comptime T: type) ?usize { test "suggestVectorSizeForCpu works with signed and unsigned values" { comptime var cpu = std.Target.Cpu.baseline(std.Target.Cpu.Arch.x86_64); - comptime cpu.features.addFeature(@enumToInt(std.Target.x86.Feature.avx512f)); + comptime cpu.features.addFeature(@intFromEnum(std.Target.x86.Feature.avx512f)); const signed_integer_size = suggestVectorSizeForCpu(i32, cpu).?; const unsigned_integer_size = suggestVectorSizeForCpu(u32, cpu).?; try std.testing.expectEqual(@as(usize, 16), unsigned_integer_size); @@ -94,7 +94,7 @@ pub inline fn iota(comptime T: type, comptime len: usize) @Vector(len, T) { for (&out, 0..) |*element, i| { element.* = switch (@typeInfo(T)) { .Int => @intCast(T, i), - .Float => @intToFloat(T, i), + .Float => @floatFromInt(T, i), else => @compileError("Can't use type " ++ @typeName(T) ++ " in iota."), }; } diff --git a/lib/std/sort.zig b/lib/std/sort.zig index 813bad0741..928503ad40 100644 --- a/lib/std/sort.zig +++ b/lib/std/sort.zig @@ -96,7 +96,7 @@ fn siftDown(a: usize, root: usize, n: usize, context: anytype) void { if (child >= n) break; // choose the greater child. - child += @boolToInt(child + 1 < n and context.lessThan(child, child + 1)); + child += @intFromBool(child + 1 < n and context.lessThan(child, child + 1)); // stop if the invariant holds at `node`. if (!context.lessThan(node, child)) break; diff --git a/lib/std/start.zig b/lib/std/start.zig index f5d2688efb..9c83bd881c 100644 --- a/lib/std/start.zig +++ b/lib/std/start.zig @@ -248,7 +248,7 @@ fn EfiMain(handle: uefi.Handle, system_table: *uefi.tables.SystemTable) callconv return root.main(); }, uefi.Status => { - return @enumToInt(root.main()); + return @intFromEnum(root.main()); }, else => @compileError("expected return type of main to be 'void', 'noreturn', 'usize', or 'std.os.uefi.Status'"), } @@ -419,7 +419,7 @@ fn posixCallMainAndExit() callconv(.C) noreturn { else => continue, } } - break :init @intToPtr([*]elf.Phdr, at_phdr)[0..at_phnum]; + break :init @ptrFromInt([*]elf.Phdr, at_phdr)[0..at_phnum]; }; // Apply the initial relocations as early as possible in the startup @@ -500,7 +500,7 @@ fn main(c_argc: c_int, c_argv: [*][*:0]c_char, c_envp: [*:null]?[*:0]c_char) cal if (builtin.os.tag == .linux) { const at_phdr = std.c.getauxval(elf.AT_PHDR); const at_phnum = std.c.getauxval(elf.AT_PHNUM); - const phdrs = (@intToPtr([*]elf.Phdr, at_phdr))[0..at_phnum]; + const phdrs = (@ptrFromInt([*]elf.Phdr, at_phdr))[0..at_phnum]; expandStackSize(phdrs); } diff --git a/lib/std/start_windows_tls.zig b/lib/std/start_windows_tls.zig index 6a3aad7a99..a1cd8387dc 100644 --- a/lib/std/start_windows_tls.zig +++ b/lib/std/start_windows_tls.zig @@ -22,14 +22,14 @@ comptime { // TODO also note, ReactOS has a +1 on StartAddressOfRawData and AddressOfCallBacks. Investigate // why they do that. //export const _tls_used linksection(".rdata$T") = std.os.windows.IMAGE_TLS_DIRECTORY { -// .StartAddressOfRawData = @ptrToInt(&_tls_start), -// .EndAddressOfRawData = @ptrToInt(&_tls_end), -// .AddressOfIndex = @ptrToInt(&_tls_index), -// .AddressOfCallBacks = @ptrToInt(__xl_a), +// .StartAddressOfRawData = @intFromPtr(&_tls_start), +// .EndAddressOfRawData = @intFromPtr(&_tls_end), +// .AddressOfIndex = @intFromPtr(&_tls_index), +// .AddressOfCallBacks = @intFromPtr(__xl_a), // .SizeOfZeroFill = 0, // .Characteristics = 0, //}; -// This is the workaround because we can't do @ptrToInt at comptime like that. +// This is the workaround because we can't do @intFromPtr at comptime like that. pub const IMAGE_TLS_DIRECTORY = extern struct { StartAddressOfRawData: *anyopaque, EndAddressOfRawData: *anyopaque, diff --git a/lib/std/tar.zig b/lib/std/tar.zig index 14a9ce5d3f..688d093587 100644 --- a/lib/std/tar.zig +++ b/lib/std/tar.zig @@ -70,8 +70,8 @@ pub const Header = struct { } pub fn fileType(header: Header) FileType { - const result = @intToEnum(FileType, header.bytes[156]); - return if (result == @intToEnum(FileType, 0)) .normal else result; + const result = @enumFromInt(FileType, header.bytes[156]); + return if (result == @enumFromInt(FileType, 0)) .normal else result; } fn str(header: Header, start: usize, end: usize) []const u8 { diff --git a/lib/std/target.zig b/lib/std/target.zig index 995edd02f7..912eb141ea 100644 --- a/lib/std/target.zig +++ b/lib/std/target.zig @@ -139,7 +139,7 @@ pub const Target = struct { /// Returns whether the first version `self` is newer (greater) than or equal to the second version `ver`. pub fn isAtLeast(self: WindowsVersion, ver: WindowsVersion) bool { - return @enumToInt(self) >= @enumToInt(ver); + return @intFromEnum(self) >= @intFromEnum(ver); } pub const Range = struct { @@ -147,14 +147,14 @@ pub const Target = struct { max: WindowsVersion, pub fn includesVersion(self: Range, ver: WindowsVersion) bool { - return @enumToInt(ver) >= @enumToInt(self.min) and @enumToInt(ver) <= @enumToInt(self.max); + return @intFromEnum(ver) >= @intFromEnum(self.min) and @intFromEnum(ver) <= @intFromEnum(self.max); } /// Checks if system is guaranteed to be at least `version` or older than `version`. /// Returns `null` if a runtime check is required. pub fn isAtLeast(self: Range, ver: WindowsVersion) ?bool { - if (@enumToInt(self.min) >= @enumToInt(ver)) return true; - if (@enumToInt(self.max) < @enumToInt(ver)) return false; + if (@intFromEnum(self.min) >= @intFromEnum(ver)) return true; + if (@intFromEnum(self.max) < @intFromEnum(ver)) return false; return null; } }; @@ -168,17 +168,17 @@ pub const Target = struct { out_stream: anytype, ) !void { if (comptime std.mem.eql(u8, fmt, "s")) { - if (@enumToInt(self) >= @enumToInt(WindowsVersion.nt4) and @enumToInt(self) <= @enumToInt(WindowsVersion.latest)) { + if (@intFromEnum(self) >= @intFromEnum(WindowsVersion.nt4) and @intFromEnum(self) <= @intFromEnum(WindowsVersion.latest)) { try std.fmt.format(out_stream, ".{s}", .{@tagName(self)}); } else { // TODO this code path breaks zig triples, but it is used in `builtin` - try std.fmt.format(out_stream, "@intToEnum(Target.Os.WindowsVersion, 0x{X:0>8})", .{@enumToInt(self)}); + try std.fmt.format(out_stream, "@enumFromInt(Target.Os.WindowsVersion, 0x{X:0>8})", .{@intFromEnum(self)}); } } else if (fmt.len == 0) { - if (@enumToInt(self) >= @enumToInt(WindowsVersion.nt4) and @enumToInt(self) <= @enumToInt(WindowsVersion.latest)) { + if (@intFromEnum(self) >= @intFromEnum(WindowsVersion.nt4) and @intFromEnum(self) <= @intFromEnum(WindowsVersion.latest)) { try std.fmt.format(out_stream, "WindowsVersion.{s}", .{@tagName(self)}); } else { - try std.fmt.format(out_stream, "WindowsVersion(0x{X:0>8})", .{@enumToInt(self)}); + try std.fmt.format(out_stream, "WindowsVersion(0x{X:0>8})", .{@intFromEnum(self)}); } } else { std.fmt.invalidFmtError(fmt, self); @@ -778,21 +778,21 @@ pub const Target = struct { pub fn featureSet(features: []const F) Set { var x = Set.empty; for (features) |feature| { - x.addFeature(@enumToInt(feature)); + x.addFeature(@intFromEnum(feature)); } return x; } /// Returns true if the specified feature is enabled. pub fn featureSetHas(set: Set, feature: F) bool { - return set.isEnabled(@enumToInt(feature)); + return set.isEnabled(@intFromEnum(feature)); } /// Returns true if any specified feature is enabled. pub fn featureSetHasAny(set: Set, features: anytype) bool { comptime std.debug.assert(std.meta.trait.isIndexable(@TypeOf(features))); inline for (features) |feature| { - if (set.isEnabled(@enumToInt(@as(F, feature)))) return true; + if (set.isEnabled(@intFromEnum(@as(F, feature)))) return true; } return false; } @@ -801,7 +801,7 @@ pub const Target = struct { pub fn featureSetHasAll(set: Set, features: anytype) bool { comptime std.debug.assert(std.meta.trait.isIndexable(@TypeOf(features))); inline for (features) |feature| { - if (!set.isEnabled(@enumToInt(@as(F, feature)))) return false; + if (!set.isEnabled(@intFromEnum(@as(F, feature)))) return false; } return true; } diff --git a/lib/std/target/aarch64.zig b/lib/std/target/aarch64.zig index 0c3b802b8a..e20448102d 100644 --- a/lib/std/target/aarch64.zig +++ b/lib/std/target/aarch64.zig @@ -215,7 +215,7 @@ pub const all_features = blk: { const len = @typeInfo(Feature).Enum.fields.len; std.debug.assert(len <= CpuFeature.Set.needed_bit_count); var result: [len]CpuFeature = undefined; - result[@enumToInt(Feature.a510)] = .{ + result[@intFromEnum(Feature.a510)] = .{ .llvm_name = "a510", .description = "Cortex-A510 ARM processors", .dependencies = featureSet(&[_]Feature{ @@ -224,7 +224,7 @@ pub const all_features = blk: { .use_postra_scheduler, }), }; - result[@enumToInt(Feature.a65)] = .{ + result[@intFromEnum(Feature.a65)] = .{ .llvm_name = "a65", .description = "Cortex-A65 ARM processors", .dependencies = featureSet(&[_]Feature{ @@ -235,7 +235,7 @@ pub const all_features = blk: { .fuse_literals, }), }; - result[@enumToInt(Feature.a710)] = .{ + result[@intFromEnum(Feature.a710)] = .{ .llvm_name = "a710", .description = "Cortex-A710 ARM processors", .dependencies = featureSet(&[_]Feature{ @@ -247,7 +247,7 @@ pub const all_features = blk: { .use_postra_scheduler, }), }; - result[@enumToInt(Feature.a76)] = .{ + result[@intFromEnum(Feature.a76)] = .{ .llvm_name = "a76", .description = "Cortex-A76 ARM processors", .dependencies = featureSet(&[_]Feature{ @@ -257,7 +257,7 @@ pub const all_features = blk: { .lsl_fast, }), }; - result[@enumToInt(Feature.a78)] = .{ + result[@intFromEnum(Feature.a78)] = .{ .llvm_name = "a78", .description = "Cortex-A78 ARM processors", .dependencies = featureSet(&[_]Feature{ @@ -269,7 +269,7 @@ pub const all_features = blk: { .use_postra_scheduler, }), }; - result[@enumToInt(Feature.a78c)] = .{ + result[@intFromEnum(Feature.a78c)] = .{ .llvm_name = "a78c", .description = "Cortex-A78C ARM processors", .dependencies = featureSet(&[_]Feature{ @@ -281,175 +281,175 @@ pub const all_features = blk: { .use_postra_scheduler, }), }; - result[@enumToInt(Feature.aes)] = .{ + result[@intFromEnum(Feature.aes)] = .{ .llvm_name = "aes", .description = "Enable AES support (FEAT_AES, FEAT_PMULL)", .dependencies = featureSet(&[_]Feature{ .neon, }), }; - result[@enumToInt(Feature.aggressive_fma)] = .{ + result[@intFromEnum(Feature.aggressive_fma)] = .{ .llvm_name = "aggressive-fma", .description = "Enable Aggressive FMA for floating-point.", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.alternate_sextload_cvt_f32_pattern)] = .{ + result[@intFromEnum(Feature.alternate_sextload_cvt_f32_pattern)] = .{ .llvm_name = "alternate-sextload-cvt-f32-pattern", .description = "Use alternative pattern for sextload convert to f32", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.altnzcv)] = .{ + result[@intFromEnum(Feature.altnzcv)] = .{ .llvm_name = "altnzcv", .description = "Enable alternative NZCV format for floating point comparisons (FEAT_FlagM2)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.am)] = .{ + result[@intFromEnum(Feature.am)] = .{ .llvm_name = "am", .description = "Enable v8.4-A Activity Monitors extension (FEAT_AMUv1)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.amvs)] = .{ + result[@intFromEnum(Feature.amvs)] = .{ .llvm_name = "amvs", .description = "Enable v8.6-A Activity Monitors Virtualization support (FEAT_AMUv1p1)", .dependencies = featureSet(&[_]Feature{ .am, }), }; - result[@enumToInt(Feature.arith_bcc_fusion)] = .{ + result[@intFromEnum(Feature.arith_bcc_fusion)] = .{ .llvm_name = "arith-bcc-fusion", .description = "CPU fuses arithmetic+bcc operations", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.arith_cbz_fusion)] = .{ + result[@intFromEnum(Feature.arith_cbz_fusion)] = .{ .llvm_name = "arith-cbz-fusion", .description = "CPU fuses arithmetic + cbz/cbnz operations", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.ascend_store_address)] = .{ + result[@intFromEnum(Feature.ascend_store_address)] = .{ .llvm_name = "ascend-store-address", .description = "Schedule vector stores by ascending address", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.b16b16)] = .{ + result[@intFromEnum(Feature.b16b16)] = .{ .llvm_name = "b16b16", .description = "Enable SVE2.1 or SME2.1 non-widening BFloat16 to BFloat16 instructions (FEAT_B16B16)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.balance_fp_ops)] = .{ + result[@intFromEnum(Feature.balance_fp_ops)] = .{ .llvm_name = "balance-fp-ops", .description = "balance mix of odd and even D-registers for fp multiply(-accumulate) ops", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.bf16)] = .{ + result[@intFromEnum(Feature.bf16)] = .{ .llvm_name = "bf16", .description = "Enable BFloat16 Extension (FEAT_BF16)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.brbe)] = .{ + result[@intFromEnum(Feature.brbe)] = .{ .llvm_name = "brbe", .description = "Enable Branch Record Buffer Extension (FEAT_BRBE)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.bti)] = .{ + result[@intFromEnum(Feature.bti)] = .{ .llvm_name = "bti", .description = "Enable Branch Target Identification (FEAT_BTI)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.call_saved_x10)] = .{ + result[@intFromEnum(Feature.call_saved_x10)] = .{ .llvm_name = "call-saved-x10", .description = "Make X10 callee saved.", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.call_saved_x11)] = .{ + result[@intFromEnum(Feature.call_saved_x11)] = .{ .llvm_name = "call-saved-x11", .description = "Make X11 callee saved.", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.call_saved_x12)] = .{ + result[@intFromEnum(Feature.call_saved_x12)] = .{ .llvm_name = "call-saved-x12", .description = "Make X12 callee saved.", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.call_saved_x13)] = .{ + result[@intFromEnum(Feature.call_saved_x13)] = .{ .llvm_name = "call-saved-x13", .description = "Make X13 callee saved.", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.call_saved_x14)] = .{ + result[@intFromEnum(Feature.call_saved_x14)] = .{ .llvm_name = "call-saved-x14", .description = "Make X14 callee saved.", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.call_saved_x15)] = .{ + result[@intFromEnum(Feature.call_saved_x15)] = .{ .llvm_name = "call-saved-x15", .description = "Make X15 callee saved.", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.call_saved_x18)] = .{ + result[@intFromEnum(Feature.call_saved_x18)] = .{ .llvm_name = "call-saved-x18", .description = "Make X18 callee saved.", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.call_saved_x8)] = .{ + result[@intFromEnum(Feature.call_saved_x8)] = .{ .llvm_name = "call-saved-x8", .description = "Make X8 callee saved.", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.call_saved_x9)] = .{ + result[@intFromEnum(Feature.call_saved_x9)] = .{ .llvm_name = "call-saved-x9", .description = "Make X9 callee saved.", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.ccdp)] = .{ + result[@intFromEnum(Feature.ccdp)] = .{ .llvm_name = "ccdp", .description = "Enable v8.5 Cache Clean to Point of Deep Persistence (FEAT_DPB2)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.ccidx)] = .{ + result[@intFromEnum(Feature.ccidx)] = .{ .llvm_name = "ccidx", .description = "Enable v8.3-A Extend of the CCSIDR number of sets (FEAT_CCIDX)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.ccpp)] = .{ + result[@intFromEnum(Feature.ccpp)] = .{ .llvm_name = "ccpp", .description = "Enable v8.2 data Cache Clean to Point of Persistence (FEAT_DPB)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.clrbhb)] = .{ + result[@intFromEnum(Feature.clrbhb)] = .{ .llvm_name = "clrbhb", .description = "Enable Clear BHB instruction (FEAT_CLRBHB)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.cmp_bcc_fusion)] = .{ + result[@intFromEnum(Feature.cmp_bcc_fusion)] = .{ .llvm_name = "cmp-bcc-fusion", .description = "CPU fuses cmp+bcc operations", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.complxnum)] = .{ + result[@intFromEnum(Feature.complxnum)] = .{ .llvm_name = "complxnum", .description = "Enable v8.3-A Floating-point complex number support (FEAT_FCMA)", .dependencies = featureSet(&[_]Feature{ .neon, }), }; - result[@enumToInt(Feature.contextidr_el2)] = .{ + result[@intFromEnum(Feature.contextidr_el2)] = .{ .llvm_name = "CONTEXTIDREL2", .description = "Enable RW operand Context ID Register (EL2)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.cortex_r82)] = .{ + result[@intFromEnum(Feature.cortex_r82)] = .{ .llvm_name = "cortex-r82", .description = "Cortex-R82 ARM processors", .dependencies = featureSet(&[_]Feature{ .use_postra_scheduler, }), }; - result[@enumToInt(Feature.crc)] = .{ + result[@intFromEnum(Feature.crc)] = .{ .llvm_name = "crc", .description = "Enable ARMv8 CRC-32 checksum instructions (FEAT_CRC32)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.crypto)] = .{ + result[@intFromEnum(Feature.crypto)] = .{ .llvm_name = "crypto", .description = "Enable cryptographic instructions", .dependencies = featureSet(&[_]Feature{ @@ -457,560 +457,560 @@ pub const all_features = blk: { .sha2, }), }; - result[@enumToInt(Feature.cssc)] = .{ + result[@intFromEnum(Feature.cssc)] = .{ .llvm_name = "cssc", .description = "Enable Common Short Sequence Compression (CSSC) instructions (FEAT_CSSC)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.custom_cheap_as_move)] = .{ + result[@intFromEnum(Feature.custom_cheap_as_move)] = .{ .llvm_name = "custom-cheap-as-move", .description = "Use custom handling of cheap instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.d128)] = .{ + result[@intFromEnum(Feature.d128)] = .{ .llvm_name = "d128", .description = "Enable Armv9.4-A 128-bit Page Table Descriptors, System Registers and Instructions (FEAT_D128, FEAT_LVA3, FEAT_SYSREG128, FEAT_SYSINSTR128)", .dependencies = featureSet(&[_]Feature{ .lse128, }), }; - result[@enumToInt(Feature.disable_latency_sched_heuristic)] = .{ + result[@intFromEnum(Feature.disable_latency_sched_heuristic)] = .{ .llvm_name = "disable-latency-sched-heuristic", .description = "Disable latency scheduling heuristic", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.dit)] = .{ + result[@intFromEnum(Feature.dit)] = .{ .llvm_name = "dit", .description = "Enable v8.4-A Data Independent Timing instructions (FEAT_DIT)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.dotprod)] = .{ + result[@intFromEnum(Feature.dotprod)] = .{ .llvm_name = "dotprod", .description = "Enable dot product support (FEAT_DotProd)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.ecv)] = .{ + result[@intFromEnum(Feature.ecv)] = .{ .llvm_name = "ecv", .description = "Enable enhanced counter virtualization extension (FEAT_ECV)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.el2vmsa)] = .{ + result[@intFromEnum(Feature.el2vmsa)] = .{ .llvm_name = "el2vmsa", .description = "Enable Exception Level 2 Virtual Memory System Architecture", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.el3)] = .{ + result[@intFromEnum(Feature.el3)] = .{ .llvm_name = "el3", .description = "Enable Exception Level 3", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.enable_select_opt)] = .{ + result[@intFromEnum(Feature.enable_select_opt)] = .{ .llvm_name = "enable-select-opt", .description = "Enable the select optimize pass for select loop heuristics", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.ete)] = .{ + result[@intFromEnum(Feature.ete)] = .{ .llvm_name = "ete", .description = "Enable Embedded Trace Extension (FEAT_ETE)", .dependencies = featureSet(&[_]Feature{ .trbe, }), }; - result[@enumToInt(Feature.exynos_cheap_as_move)] = .{ + result[@intFromEnum(Feature.exynos_cheap_as_move)] = .{ .llvm_name = "exynos-cheap-as-move", .description = "Use Exynos specific handling of cheap instructions", .dependencies = featureSet(&[_]Feature{ .custom_cheap_as_move, }), }; - result[@enumToInt(Feature.f32mm)] = .{ + result[@intFromEnum(Feature.f32mm)] = .{ .llvm_name = "f32mm", .description = "Enable Matrix Multiply FP32 Extension (FEAT_F32MM)", .dependencies = featureSet(&[_]Feature{ .sve, }), }; - result[@enumToInt(Feature.f64mm)] = .{ + result[@intFromEnum(Feature.f64mm)] = .{ .llvm_name = "f64mm", .description = "Enable Matrix Multiply FP64 Extension (FEAT_F64MM)", .dependencies = featureSet(&[_]Feature{ .sve, }), }; - result[@enumToInt(Feature.fgt)] = .{ + result[@intFromEnum(Feature.fgt)] = .{ .llvm_name = "fgt", .description = "Enable fine grained virtualization traps extension (FEAT_FGT)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.fix_cortex_a53_835769)] = .{ + result[@intFromEnum(Feature.fix_cortex_a53_835769)] = .{ .llvm_name = "fix-cortex-a53-835769", .description = "Mitigate Cortex-A53 Erratum 835769", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.flagm)] = .{ + result[@intFromEnum(Feature.flagm)] = .{ .llvm_name = "flagm", .description = "Enable v8.4-A Flag Manipulation Instructions (FEAT_FlagM)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.fmv)] = .{ + result[@intFromEnum(Feature.fmv)] = .{ .llvm_name = "fmv", .description = "Enable Function Multi Versioning support.", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.force_32bit_jump_tables)] = .{ + result[@intFromEnum(Feature.force_32bit_jump_tables)] = .{ .llvm_name = "force-32bit-jump-tables", .description = "Force jump table entries to be 32-bits wide except at MinSize", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.fp16fml)] = .{ + result[@intFromEnum(Feature.fp16fml)] = .{ .llvm_name = "fp16fml", .description = "Enable FP16 FML instructions (FEAT_FHM)", .dependencies = featureSet(&[_]Feature{ .fullfp16, }), }; - result[@enumToInt(Feature.fp_armv8)] = .{ + result[@intFromEnum(Feature.fp_armv8)] = .{ .llvm_name = "fp-armv8", .description = "Enable ARMv8 FP (FEAT_FP)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.fptoint)] = .{ + result[@intFromEnum(Feature.fptoint)] = .{ .llvm_name = "fptoint", .description = "Enable FRInt[32|64][Z|X] instructions that round a floating-point number to an integer (in FP format) forcing it to fit into a 32- or 64-bit int (FEAT_FRINTTS)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.fullfp16)] = .{ + result[@intFromEnum(Feature.fullfp16)] = .{ .llvm_name = "fullfp16", .description = "Full FP16 (FEAT_FP16)", .dependencies = featureSet(&[_]Feature{ .fp_armv8, }), }; - result[@enumToInt(Feature.fuse_address)] = .{ + result[@intFromEnum(Feature.fuse_address)] = .{ .llvm_name = "fuse-address", .description = "CPU fuses address generation and memory operations", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.fuse_adrp_add)] = .{ + result[@intFromEnum(Feature.fuse_adrp_add)] = .{ .llvm_name = "fuse-adrp-add", .description = "CPU fuses adrp+add operations", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.fuse_aes)] = .{ + result[@intFromEnum(Feature.fuse_aes)] = .{ .llvm_name = "fuse-aes", .description = "CPU fuses AES crypto operations", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.fuse_arith_logic)] = .{ + result[@intFromEnum(Feature.fuse_arith_logic)] = .{ .llvm_name = "fuse-arith-logic", .description = "CPU fuses arithmetic and logic operations", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.fuse_crypto_eor)] = .{ + result[@intFromEnum(Feature.fuse_crypto_eor)] = .{ .llvm_name = "fuse-crypto-eor", .description = "CPU fuses AES/PMULL and EOR operations", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.fuse_csel)] = .{ + result[@intFromEnum(Feature.fuse_csel)] = .{ .llvm_name = "fuse-csel", .description = "CPU fuses conditional select operations", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.fuse_literals)] = .{ + result[@intFromEnum(Feature.fuse_literals)] = .{ .llvm_name = "fuse-literals", .description = "CPU fuses literal generation operations", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.harden_sls_blr)] = .{ + result[@intFromEnum(Feature.harden_sls_blr)] = .{ .llvm_name = "harden-sls-blr", .description = "Harden against straight line speculation across BLR instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.harden_sls_nocomdat)] = .{ + result[@intFromEnum(Feature.harden_sls_nocomdat)] = .{ .llvm_name = "harden-sls-nocomdat", .description = "Generate thunk code for SLS mitigation in the normal text section", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.harden_sls_retbr)] = .{ + result[@intFromEnum(Feature.harden_sls_retbr)] = .{ .llvm_name = "harden-sls-retbr", .description = "Harden against straight line speculation across RET and BR instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.hbc)] = .{ + result[@intFromEnum(Feature.hbc)] = .{ .llvm_name = "hbc", .description = "Enable Armv8.8-A Hinted Conditional Branches Extension (FEAT_HBC)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.hcx)] = .{ + result[@intFromEnum(Feature.hcx)] = .{ .llvm_name = "hcx", .description = "Enable Armv8.7-A HCRX_EL2 system register (FEAT_HCX)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.i8mm)] = .{ + result[@intFromEnum(Feature.i8mm)] = .{ .llvm_name = "i8mm", .description = "Enable Matrix Multiply Int8 Extension (FEAT_I8MM)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.ite)] = .{ + result[@intFromEnum(Feature.ite)] = .{ .llvm_name = "ite", .description = "Enable Armv9.4-A Instrumentation Extension FEAT_ITE", .dependencies = featureSet(&[_]Feature{ .ete, }), }; - result[@enumToInt(Feature.jsconv)] = .{ + result[@intFromEnum(Feature.jsconv)] = .{ .llvm_name = "jsconv", .description = "Enable v8.3-A JavaScript FP conversion instructions (FEAT_JSCVT)", .dependencies = featureSet(&[_]Feature{ .fp_armv8, }), }; - result[@enumToInt(Feature.lor)] = .{ + result[@intFromEnum(Feature.lor)] = .{ .llvm_name = "lor", .description = "Enables ARM v8.1 Limited Ordering Regions extension (FEAT_LOR)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.ls64)] = .{ + result[@intFromEnum(Feature.ls64)] = .{ .llvm_name = "ls64", .description = "Enable Armv8.7-A LD64B/ST64B Accelerator Extension (FEAT_LS64, FEAT_LS64_V, FEAT_LS64_ACCDATA)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.lse)] = .{ + result[@intFromEnum(Feature.lse)] = .{ .llvm_name = "lse", .description = "Enable ARMv8.1 Large System Extension (LSE) atomic instructions (FEAT_LSE)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.lse128)] = .{ + result[@intFromEnum(Feature.lse128)] = .{ .llvm_name = "lse128", .description = "Enable Armv9.4-A 128-bit Atomic Instructions (FEAT_LSE128)", .dependencies = featureSet(&[_]Feature{ .lse, }), }; - result[@enumToInt(Feature.lse2)] = .{ + result[@intFromEnum(Feature.lse2)] = .{ .llvm_name = "lse2", .description = "Enable ARMv8.4 Large System Extension 2 (LSE2) atomicity rules (FEAT_LSE2)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.lsl_fast)] = .{ + result[@intFromEnum(Feature.lsl_fast)] = .{ .llvm_name = "lsl-fast", .description = "CPU has a fastpath logical shift of up to 3 places", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.mec)] = .{ + result[@intFromEnum(Feature.mec)] = .{ .llvm_name = "mec", .description = "Enable Memory Encryption Contexts Extension", .dependencies = featureSet(&[_]Feature{ .rme, }), }; - result[@enumToInt(Feature.mops)] = .{ + result[@intFromEnum(Feature.mops)] = .{ .llvm_name = "mops", .description = "Enable Armv8.8-A memcpy and memset acceleration instructions (FEAT_MOPS)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.mpam)] = .{ + result[@intFromEnum(Feature.mpam)] = .{ .llvm_name = "mpam", .description = "Enable v8.4-A Memory system Partitioning and Monitoring extension (FEAT_MPAM)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.mte)] = .{ + result[@intFromEnum(Feature.mte)] = .{ .llvm_name = "mte", .description = "Enable Memory Tagging Extension (FEAT_MTE, FEAT_MTE2)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.neon)] = .{ + result[@intFromEnum(Feature.neon)] = .{ .llvm_name = "neon", .description = "Enable Advanced SIMD instructions (FEAT_AdvSIMD)", .dependencies = featureSet(&[_]Feature{ .fp_armv8, }), }; - result[@enumToInt(Feature.nmi)] = .{ + result[@intFromEnum(Feature.nmi)] = .{ .llvm_name = "nmi", .description = "Enable Armv8.8-A Non-maskable Interrupts (FEAT_NMI, FEAT_GICv3_NMI)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.no_bti_at_return_twice)] = .{ + result[@intFromEnum(Feature.no_bti_at_return_twice)] = .{ .llvm_name = "no-bti-at-return-twice", .description = "Don't place a BTI instruction after a return-twice", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.no_neg_immediates)] = .{ + result[@intFromEnum(Feature.no_neg_immediates)] = .{ .llvm_name = "no-neg-immediates", .description = "Convert immediates and instructions to their negated or complemented equivalent when the immediate does not fit in the encoding.", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.no_zcz_fp)] = .{ + result[@intFromEnum(Feature.no_zcz_fp)] = .{ .llvm_name = "no-zcz-fp", .description = "Has no zero-cycle zeroing instructions for FP registers", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.nv)] = .{ + result[@intFromEnum(Feature.nv)] = .{ .llvm_name = "nv", .description = "Enable v8.4-A Nested Virtualization Enchancement (FEAT_NV, FEAT_NV2)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.outline_atomics)] = .{ + result[@intFromEnum(Feature.outline_atomics)] = .{ .llvm_name = "outline-atomics", .description = "Enable out of line atomics to support LSE instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.pan)] = .{ + result[@intFromEnum(Feature.pan)] = .{ .llvm_name = "pan", .description = "Enables ARM v8.1 Privileged Access-Never extension (FEAT_PAN)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.pan_rwv)] = .{ + result[@intFromEnum(Feature.pan_rwv)] = .{ .llvm_name = "pan-rwv", .description = "Enable v8.2 PAN s1e1R and s1e1W Variants (FEAT_PAN2)", .dependencies = featureSet(&[_]Feature{ .pan, }), }; - result[@enumToInt(Feature.pauth)] = .{ + result[@intFromEnum(Feature.pauth)] = .{ .llvm_name = "pauth", .description = "Enable v8.3-A Pointer Authentication extension (FEAT_PAuth)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.perfmon)] = .{ + result[@intFromEnum(Feature.perfmon)] = .{ .llvm_name = "perfmon", .description = "Enable Code Generation for ARMv8 PMUv3 Performance Monitors extension (FEAT_PMUv3)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.predictable_select_expensive)] = .{ + result[@intFromEnum(Feature.predictable_select_expensive)] = .{ .llvm_name = "predictable-select-expensive", .description = "Prefer likely predicted branches over selects", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.predres)] = .{ + result[@intFromEnum(Feature.predres)] = .{ .llvm_name = "predres", .description = "Enable v8.5a execution and data prediction invalidation instructions (FEAT_SPECRES)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.prfm_slc_target)] = .{ + result[@intFromEnum(Feature.prfm_slc_target)] = .{ .llvm_name = "prfm-slc-target", .description = "Enable SLC target for PRFM instruction", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.rand)] = .{ + result[@intFromEnum(Feature.rand)] = .{ .llvm_name = "rand", .description = "Enable Random Number generation instructions (FEAT_RNG)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.ras)] = .{ + result[@intFromEnum(Feature.ras)] = .{ .llvm_name = "ras", .description = "Enable ARMv8 Reliability, Availability and Serviceability Extensions (FEAT_RAS, FEAT_RASv1p1)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.rasv2)] = .{ + result[@intFromEnum(Feature.rasv2)] = .{ .llvm_name = "rasv2", .description = "Enable ARMv8.9-A Reliability, Availability and Serviceability Extensions (FEAT_RASv2)", .dependencies = featureSet(&[_]Feature{ .ras, }), }; - result[@enumToInt(Feature.rcpc)] = .{ + result[@intFromEnum(Feature.rcpc)] = .{ .llvm_name = "rcpc", .description = "Enable support for RCPC extension (FEAT_LRCPC)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.rcpc3)] = .{ + result[@intFromEnum(Feature.rcpc3)] = .{ .llvm_name = "rcpc3", .description = "Enable Armv8.9-A RCPC instructions for A64 and Advanced SIMD and floating-point instruction set (FEAT_LRCPC3)", .dependencies = featureSet(&[_]Feature{ .rcpc_immo, }), }; - result[@enumToInt(Feature.rcpc_immo)] = .{ + result[@intFromEnum(Feature.rcpc_immo)] = .{ .llvm_name = "rcpc-immo", .description = "Enable v8.4-A RCPC instructions with Immediate Offsets (FEAT_LRCPC2)", .dependencies = featureSet(&[_]Feature{ .rcpc, }), }; - result[@enumToInt(Feature.rdm)] = .{ + result[@intFromEnum(Feature.rdm)] = .{ .llvm_name = "rdm", .description = "Enable ARMv8.1 Rounding Double Multiply Add/Subtract instructions (FEAT_RDM)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserve_x1)] = .{ + result[@intFromEnum(Feature.reserve_x1)] = .{ .llvm_name = "reserve-x1", .description = "Reserve X1, making it unavailable as a GPR", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserve_x10)] = .{ + result[@intFromEnum(Feature.reserve_x10)] = .{ .llvm_name = "reserve-x10", .description = "Reserve X10, making it unavailable as a GPR", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserve_x11)] = .{ + result[@intFromEnum(Feature.reserve_x11)] = .{ .llvm_name = "reserve-x11", .description = "Reserve X11, making it unavailable as a GPR", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserve_x12)] = .{ + result[@intFromEnum(Feature.reserve_x12)] = .{ .llvm_name = "reserve-x12", .description = "Reserve X12, making it unavailable as a GPR", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserve_x13)] = .{ + result[@intFromEnum(Feature.reserve_x13)] = .{ .llvm_name = "reserve-x13", .description = "Reserve X13, making it unavailable as a GPR", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserve_x14)] = .{ + result[@intFromEnum(Feature.reserve_x14)] = .{ .llvm_name = "reserve-x14", .description = "Reserve X14, making it unavailable as a GPR", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserve_x15)] = .{ + result[@intFromEnum(Feature.reserve_x15)] = .{ .llvm_name = "reserve-x15", .description = "Reserve X15, making it unavailable as a GPR", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserve_x18)] = .{ + result[@intFromEnum(Feature.reserve_x18)] = .{ .llvm_name = "reserve-x18", .description = "Reserve X18, making it unavailable as a GPR", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserve_x2)] = .{ + result[@intFromEnum(Feature.reserve_x2)] = .{ .llvm_name = "reserve-x2", .description = "Reserve X2, making it unavailable as a GPR", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserve_x20)] = .{ + result[@intFromEnum(Feature.reserve_x20)] = .{ .llvm_name = "reserve-x20", .description = "Reserve X20, making it unavailable as a GPR", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserve_x21)] = .{ + result[@intFromEnum(Feature.reserve_x21)] = .{ .llvm_name = "reserve-x21", .description = "Reserve X21, making it unavailable as a GPR", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserve_x22)] = .{ + result[@intFromEnum(Feature.reserve_x22)] = .{ .llvm_name = "reserve-x22", .description = "Reserve X22, making it unavailable as a GPR", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserve_x23)] = .{ + result[@intFromEnum(Feature.reserve_x23)] = .{ .llvm_name = "reserve-x23", .description = "Reserve X23, making it unavailable as a GPR", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserve_x24)] = .{ + result[@intFromEnum(Feature.reserve_x24)] = .{ .llvm_name = "reserve-x24", .description = "Reserve X24, making it unavailable as a GPR", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserve_x25)] = .{ + result[@intFromEnum(Feature.reserve_x25)] = .{ .llvm_name = "reserve-x25", .description = "Reserve X25, making it unavailable as a GPR", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserve_x26)] = .{ + result[@intFromEnum(Feature.reserve_x26)] = .{ .llvm_name = "reserve-x26", .description = "Reserve X26, making it unavailable as a GPR", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserve_x27)] = .{ + result[@intFromEnum(Feature.reserve_x27)] = .{ .llvm_name = "reserve-x27", .description = "Reserve X27, making it unavailable as a GPR", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserve_x28)] = .{ + result[@intFromEnum(Feature.reserve_x28)] = .{ .llvm_name = "reserve-x28", .description = "Reserve X28, making it unavailable as a GPR", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserve_x3)] = .{ + result[@intFromEnum(Feature.reserve_x3)] = .{ .llvm_name = "reserve-x3", .description = "Reserve X3, making it unavailable as a GPR", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserve_x30)] = .{ + result[@intFromEnum(Feature.reserve_x30)] = .{ .llvm_name = "reserve-x30", .description = "Reserve X30, making it unavailable as a GPR", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserve_x4)] = .{ + result[@intFromEnum(Feature.reserve_x4)] = .{ .llvm_name = "reserve-x4", .description = "Reserve X4, making it unavailable as a GPR", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserve_x5)] = .{ + result[@intFromEnum(Feature.reserve_x5)] = .{ .llvm_name = "reserve-x5", .description = "Reserve X5, making it unavailable as a GPR", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserve_x6)] = .{ + result[@intFromEnum(Feature.reserve_x6)] = .{ .llvm_name = "reserve-x6", .description = "Reserve X6, making it unavailable as a GPR", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserve_x7)] = .{ + result[@intFromEnum(Feature.reserve_x7)] = .{ .llvm_name = "reserve-x7", .description = "Reserve X7, making it unavailable as a GPR", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserve_x9)] = .{ + result[@intFromEnum(Feature.reserve_x9)] = .{ .llvm_name = "reserve-x9", .description = "Reserve X9, making it unavailable as a GPR", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.rme)] = .{ + result[@intFromEnum(Feature.rme)] = .{ .llvm_name = "rme", .description = "Enable Realm Management Extension (FEAT_RME)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.sb)] = .{ + result[@intFromEnum(Feature.sb)] = .{ .llvm_name = "sb", .description = "Enable v8.5 Speculation Barrier (FEAT_SB)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.sel2)] = .{ + result[@intFromEnum(Feature.sel2)] = .{ .llvm_name = "sel2", .description = "Enable v8.4-A Secure Exception Level 2 extension (FEAT_SEL2)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.sha2)] = .{ + result[@intFromEnum(Feature.sha2)] = .{ .llvm_name = "sha2", .description = "Enable SHA1 and SHA256 support (FEAT_SHA1, FEAT_SHA256)", .dependencies = featureSet(&[_]Feature{ .neon, }), }; - result[@enumToInt(Feature.sha3)] = .{ + result[@intFromEnum(Feature.sha3)] = .{ .llvm_name = "sha3", .description = "Enable SHA512 and SHA3 support (FEAT_SHA3, FEAT_SHA512)", .dependencies = featureSet(&[_]Feature{ .sha2, }), }; - result[@enumToInt(Feature.slow_misaligned_128store)] = .{ + result[@intFromEnum(Feature.slow_misaligned_128store)] = .{ .llvm_name = "slow-misaligned-128store", .description = "Misaligned 128 bit stores are slow", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.slow_paired_128)] = .{ + result[@intFromEnum(Feature.slow_paired_128)] = .{ .llvm_name = "slow-paired-128", .description = "Paired 128 bit loads and stores are slow", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.slow_strqro_store)] = .{ + result[@intFromEnum(Feature.slow_strqro_store)] = .{ .llvm_name = "slow-strqro-store", .description = "STR of Q register with register offset is slow", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.sm4)] = .{ + result[@intFromEnum(Feature.sm4)] = .{ .llvm_name = "sm4", .description = "Enable SM3 and SM4 support (FEAT_SM4, FEAT_SM3)", .dependencies = featureSet(&[_]Feature{ .neon, }), }; - result[@enumToInt(Feature.sme)] = .{ + result[@intFromEnum(Feature.sme)] = .{ .llvm_name = "sme", .description = "Enable Scalable Matrix Extension (SME) (FEAT_SME)", .dependencies = featureSet(&[_]Feature{ @@ -1018,79 +1018,79 @@ pub const all_features = blk: { .use_scalar_inc_vl, }), }; - result[@enumToInt(Feature.sme2)] = .{ + result[@intFromEnum(Feature.sme2)] = .{ .llvm_name = "sme2", .description = "Enable Scalable Matrix Extension 2 (SME2) instructions", .dependencies = featureSet(&[_]Feature{ .sme, }), }; - result[@enumToInt(Feature.sme2p1)] = .{ + result[@intFromEnum(Feature.sme2p1)] = .{ .llvm_name = "sme2p1", .description = "Enable Scalable Matrix Extension 2.1 (FEAT_SME2p1) instructions", .dependencies = featureSet(&[_]Feature{ .sme2, }), }; - result[@enumToInt(Feature.sme_f16f16)] = .{ + result[@intFromEnum(Feature.sme_f16f16)] = .{ .llvm_name = "sme-f16f16", .description = "Enable SME2.1 non-widening Float16 instructions (FEAT_SME_F16F16)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.sme_f64f64)] = .{ + result[@intFromEnum(Feature.sme_f64f64)] = .{ .llvm_name = "sme-f64f64", .description = "Enable Scalable Matrix Extension (SME) F64F64 instructions (FEAT_SME_F64F64)", .dependencies = featureSet(&[_]Feature{ .sme, }), }; - result[@enumToInt(Feature.sme_i16i64)] = .{ + result[@intFromEnum(Feature.sme_i16i64)] = .{ .llvm_name = "sme-i16i64", .description = "Enable Scalable Matrix Extension (SME) I16I64 instructions (FEAT_SME_I16I64)", .dependencies = featureSet(&[_]Feature{ .sme, }), }; - result[@enumToInt(Feature.spe)] = .{ + result[@intFromEnum(Feature.spe)] = .{ .llvm_name = "spe", .description = "Enable Statistical Profiling extension (FEAT_SPE)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.spe_eef)] = .{ + result[@intFromEnum(Feature.spe_eef)] = .{ .llvm_name = "spe-eef", .description = "Enable extra register in the Statistical Profiling Extension (FEAT_SPEv1p2)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.specres2)] = .{ + result[@intFromEnum(Feature.specres2)] = .{ .llvm_name = "specres2", .description = "Enable Speculation Restriction Instruction (FEAT_SPECRES2)", .dependencies = featureSet(&[_]Feature{ .predres, }), }; - result[@enumToInt(Feature.specrestrict)] = .{ + result[@intFromEnum(Feature.specrestrict)] = .{ .llvm_name = "specrestrict", .description = "Enable architectural speculation restriction (FEAT_CSV2_2)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.ssbs)] = .{ + result[@intFromEnum(Feature.ssbs)] = .{ .llvm_name = "ssbs", .description = "Enable Speculative Store Bypass Safe bit (FEAT_SSBS, FEAT_SSBS2)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.strict_align)] = .{ + result[@intFromEnum(Feature.strict_align)] = .{ .llvm_name = "strict-align", .description = "Disallow all unaligned memory access", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.sve)] = .{ + result[@intFromEnum(Feature.sve)] = .{ .llvm_name = "sve", .description = "Enable Scalable Vector Extension (SVE) instructions (FEAT_SVE)", .dependencies = featureSet(&[_]Feature{ .fullfp16, }), }; - result[@enumToInt(Feature.sve2)] = .{ + result[@intFromEnum(Feature.sve2)] = .{ .llvm_name = "sve2", .description = "Enable Scalable Vector Extension 2 (SVE2) instructions (FEAT_SVE2)", .dependencies = featureSet(&[_]Feature{ @@ -1098,7 +1098,7 @@ pub const all_features = blk: { .use_scalar_inc_vl, }), }; - result[@enumToInt(Feature.sve2_aes)] = .{ + result[@intFromEnum(Feature.sve2_aes)] = .{ .llvm_name = "sve2-aes", .description = "Enable AES SVE2 instructions (FEAT_SVE_AES, FEAT_SVE_PMULL128)", .dependencies = featureSet(&[_]Feature{ @@ -1106,14 +1106,14 @@ pub const all_features = blk: { .sve2, }), }; - result[@enumToInt(Feature.sve2_bitperm)] = .{ + result[@intFromEnum(Feature.sve2_bitperm)] = .{ .llvm_name = "sve2-bitperm", .description = "Enable bit permutation SVE2 instructions (FEAT_SVE_BitPerm)", .dependencies = featureSet(&[_]Feature{ .sve2, }), }; - result[@enumToInt(Feature.sve2_sha3)] = .{ + result[@intFromEnum(Feature.sve2_sha3)] = .{ .llvm_name = "sve2-sha3", .description = "Enable SHA3 SVE2 instructions (FEAT_SVE_SHA3)", .dependencies = featureSet(&[_]Feature{ @@ -1121,7 +1121,7 @@ pub const all_features = blk: { .sve2, }), }; - result[@enumToInt(Feature.sve2_sm4)] = .{ + result[@intFromEnum(Feature.sve2_sm4)] = .{ .llvm_name = "sve2-sm4", .description = "Enable SM4 SVE2 instructions (FEAT_SVE_SM4)", .dependencies = featureSet(&[_]Feature{ @@ -1129,84 +1129,84 @@ pub const all_features = blk: { .sve2, }), }; - result[@enumToInt(Feature.sve2p1)] = .{ + result[@intFromEnum(Feature.sve2p1)] = .{ .llvm_name = "sve2p1", .description = "Enable Scalable Vector Extension 2.1 instructions", .dependencies = featureSet(&[_]Feature{ .sve2, }), }; - result[@enumToInt(Feature.tagged_globals)] = .{ + result[@intFromEnum(Feature.tagged_globals)] = .{ .llvm_name = "tagged-globals", .description = "Use an instruction sequence for taking the address of a global that allows a memory tag in the upper address bits", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.the)] = .{ + result[@intFromEnum(Feature.the)] = .{ .llvm_name = "the", .description = "Enable Armv8.9-A Translation Hardening Extension (FEAT_THE)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.tlb_rmi)] = .{ + result[@intFromEnum(Feature.tlb_rmi)] = .{ .llvm_name = "tlb-rmi", .description = "Enable v8.4-A TLB Range and Maintenance Instructions (FEAT_TLBIOS, FEAT_TLBIRANGE)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.tme)] = .{ + result[@intFromEnum(Feature.tme)] = .{ .llvm_name = "tme", .description = "Enable Transactional Memory Extension (FEAT_TME)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.tpidr_el1)] = .{ + result[@intFromEnum(Feature.tpidr_el1)] = .{ .llvm_name = "tpidr-el1", .description = "Permit use of TPIDR_EL1 for the TLS base", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.tpidr_el2)] = .{ + result[@intFromEnum(Feature.tpidr_el2)] = .{ .llvm_name = "tpidr-el2", .description = "Permit use of TPIDR_EL2 for the TLS base", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.tpidr_el3)] = .{ + result[@intFromEnum(Feature.tpidr_el3)] = .{ .llvm_name = "tpidr-el3", .description = "Permit use of TPIDR_EL3 for the TLS base", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.tracev8_4)] = .{ + result[@intFromEnum(Feature.tracev8_4)] = .{ .llvm_name = "tracev8.4", .description = "Enable v8.4-A Trace extension (FEAT_TRF)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.trbe)] = .{ + result[@intFromEnum(Feature.trbe)] = .{ .llvm_name = "trbe", .description = "Enable Trace Buffer Extension (FEAT_TRBE)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.uaops)] = .{ + result[@intFromEnum(Feature.uaops)] = .{ .llvm_name = "uaops", .description = "Enable v8.2 UAO PState (FEAT_UAO)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.use_experimental_zeroing_pseudos)] = .{ + result[@intFromEnum(Feature.use_experimental_zeroing_pseudos)] = .{ .llvm_name = "use-experimental-zeroing-pseudos", .description = "Hint to the compiler that the MOVPRFX instruction is merged with destructive operations", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.use_postra_scheduler)] = .{ + result[@intFromEnum(Feature.use_postra_scheduler)] = .{ .llvm_name = "use-postra-scheduler", .description = "Schedule again after register allocation", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.use_reciprocal_square_root)] = .{ + result[@intFromEnum(Feature.use_reciprocal_square_root)] = .{ .llvm_name = "use-reciprocal-square-root", .description = "Use the reciprocal square root approximation", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.use_scalar_inc_vl)] = .{ + result[@intFromEnum(Feature.use_scalar_inc_vl)] = .{ .llvm_name = "use-scalar-inc-vl", .description = "Prefer inc/dec over add+cnt", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.v8_1a)] = .{ + result[@intFromEnum(Feature.v8_1a)] = .{ .llvm_name = "v8.1a", .description = "Support ARM v8.1a instructions", .dependencies = featureSet(&[_]Feature{ @@ -1219,7 +1219,7 @@ pub const all_features = blk: { .vh, }), }; - result[@enumToInt(Feature.v8_2a)] = .{ + result[@intFromEnum(Feature.v8_2a)] = .{ .llvm_name = "v8.2a", .description = "Support ARM v8.2a instructions", .dependencies = featureSet(&[_]Feature{ @@ -1230,7 +1230,7 @@ pub const all_features = blk: { .v8_1a, }), }; - result[@enumToInt(Feature.v8_3a)] = .{ + result[@intFromEnum(Feature.v8_3a)] = .{ .llvm_name = "v8.3a", .description = "Support ARM v8.3a instructions", .dependencies = featureSet(&[_]Feature{ @@ -1242,7 +1242,7 @@ pub const all_features = blk: { .v8_2a, }), }; - result[@enumToInt(Feature.v8_4a)] = .{ + result[@intFromEnum(Feature.v8_4a)] = .{ .llvm_name = "v8.4a", .description = "Support ARM v8.4a instructions", .dependencies = featureSet(&[_]Feature{ @@ -1260,7 +1260,7 @@ pub const all_features = blk: { .v8_3a, }), }; - result[@enumToInt(Feature.v8_5a)] = .{ + result[@intFromEnum(Feature.v8_5a)] = .{ .llvm_name = "v8.5a", .description = "Support ARM v8.5a instructions", .dependencies = featureSet(&[_]Feature{ @@ -1275,7 +1275,7 @@ pub const all_features = blk: { .v8_4a, }), }; - result[@enumToInt(Feature.v8_6a)] = .{ + result[@intFromEnum(Feature.v8_6a)] = .{ .llvm_name = "v8.6a", .description = "Support ARM v8.6a instructions", .dependencies = featureSet(&[_]Feature{ @@ -1287,7 +1287,7 @@ pub const all_features = blk: { .v8_5a, }), }; - result[@enumToInt(Feature.v8_7a)] = .{ + result[@intFromEnum(Feature.v8_7a)] = .{ .llvm_name = "v8.7a", .description = "Support ARM v8.7a instructions", .dependencies = featureSet(&[_]Feature{ @@ -1297,7 +1297,7 @@ pub const all_features = blk: { .xs, }), }; - result[@enumToInt(Feature.v8_8a)] = .{ + result[@intFromEnum(Feature.v8_8a)] = .{ .llvm_name = "v8.8a", .description = "Support ARM v8.8a instructions", .dependencies = featureSet(&[_]Feature{ @@ -1307,7 +1307,7 @@ pub const all_features = blk: { .v8_7a, }), }; - result[@enumToInt(Feature.v8_9a)] = .{ + result[@intFromEnum(Feature.v8_9a)] = .{ .llvm_name = "v8.9a", .description = "Support ARM v8.9a instructions", .dependencies = featureSet(&[_]Feature{ @@ -1319,7 +1319,7 @@ pub const all_features = blk: { .v8_8a, }), }; - result[@enumToInt(Feature.v8a)] = .{ + result[@intFromEnum(Feature.v8a)] = .{ .llvm_name = "v8a", .description = "Support ARM v8.0a instructions", .dependencies = featureSet(&[_]Feature{ @@ -1328,7 +1328,7 @@ pub const all_features = blk: { .neon, }), }; - result[@enumToInt(Feature.v8r)] = .{ + result[@intFromEnum(Feature.v8r)] = .{ .llvm_name = "v8r", .description = "Support ARM v8r instructions", .dependencies = featureSet(&[_]Feature{ @@ -1354,7 +1354,7 @@ pub const all_features = blk: { .uaops, }), }; - result[@enumToInt(Feature.v9_1a)] = .{ + result[@intFromEnum(Feature.v9_1a)] = .{ .llvm_name = "v9.1a", .description = "Support ARM v9.1a instructions", .dependencies = featureSet(&[_]Feature{ @@ -1362,7 +1362,7 @@ pub const all_features = blk: { .v9a, }), }; - result[@enumToInt(Feature.v9_2a)] = .{ + result[@intFromEnum(Feature.v9_2a)] = .{ .llvm_name = "v9.2a", .description = "Support ARM v9.2a instructions", .dependencies = featureSet(&[_]Feature{ @@ -1370,7 +1370,7 @@ pub const all_features = blk: { .v9_1a, }), }; - result[@enumToInt(Feature.v9_3a)] = .{ + result[@intFromEnum(Feature.v9_3a)] = .{ .llvm_name = "v9.3a", .description = "Support ARM v9.3a instructions", .dependencies = featureSet(&[_]Feature{ @@ -1378,7 +1378,7 @@ pub const all_features = blk: { .v9_2a, }), }; - result[@enumToInt(Feature.v9_4a)] = .{ + result[@intFromEnum(Feature.v9_4a)] = .{ .llvm_name = "v9.4a", .description = "Support ARM v9.4a instructions", .dependencies = featureSet(&[_]Feature{ @@ -1386,7 +1386,7 @@ pub const all_features = blk: { .v9_3a, }), }; - result[@enumToInt(Feature.v9a)] = .{ + result[@intFromEnum(Feature.v9a)] = .{ .llvm_name = "v9a", .description = "Support ARM v9a instructions", .dependencies = featureSet(&[_]Feature{ @@ -1395,41 +1395,41 @@ pub const all_features = blk: { .v8_5a, }), }; - result[@enumToInt(Feature.vh)] = .{ + result[@intFromEnum(Feature.vh)] = .{ .llvm_name = "vh", .description = "Enables ARM v8.1 Virtual Host extension (FEAT_VHE)", .dependencies = featureSet(&[_]Feature{ .contextidr_el2, }), }; - result[@enumToInt(Feature.wfxt)] = .{ + result[@intFromEnum(Feature.wfxt)] = .{ .llvm_name = "wfxt", .description = "Enable Armv8.7-A WFET and WFIT instruction (FEAT_WFxT)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.xs)] = .{ + result[@intFromEnum(Feature.xs)] = .{ .llvm_name = "xs", .description = "Enable Armv8.7-A limited-TLB-maintenance instruction (FEAT_XS)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.zcm)] = .{ + result[@intFromEnum(Feature.zcm)] = .{ .llvm_name = "zcm", .description = "Has zero-cycle register moves", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.zcz)] = .{ + result[@intFromEnum(Feature.zcz)] = .{ .llvm_name = "zcz", .description = "Has zero-cycle zeroing instructions", .dependencies = featureSet(&[_]Feature{ .zcz_gp, }), }; - result[@enumToInt(Feature.zcz_fp_workaround)] = .{ + result[@intFromEnum(Feature.zcz_fp_workaround)] = .{ .llvm_name = "zcz-fp-workaround", .description = "The zero-cycle floating-point zeroing instruction has a bug", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.zcz_gp)] = .{ + result[@intFromEnum(Feature.zcz_gp)] = .{ .llvm_name = "zcz-gp", .description = "Has zero-cycle zeroing instructions for generic registers", .dependencies = featureSet(&[_]Feature{}), diff --git a/lib/std/target/amdgpu.zig b/lib/std/target/amdgpu.zig index 7c5dc74eb3..4fc47c8d72 100644 --- a/lib/std/target/amdgpu.zig +++ b/lib/std/target/amdgpu.zig @@ -162,248 +162,248 @@ pub const all_features = blk: { const len = @typeInfo(Feature).Enum.fields.len; std.debug.assert(len <= CpuFeature.Set.needed_bit_count); var result: [len]CpuFeature = undefined; - result[@enumToInt(Feature.@"16_bit_insts")] = .{ + result[@intFromEnum(Feature.@"16_bit_insts")] = .{ .llvm_name = "16-bit-insts", .description = "Has i16/f16 instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.a16)] = .{ + result[@intFromEnum(Feature.a16)] = .{ .llvm_name = "a16", .description = "Support A16 for 16-bit coordinates/gradients/lod/clamp/mip image operands", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.add_no_carry_insts)] = .{ + result[@intFromEnum(Feature.add_no_carry_insts)] = .{ .llvm_name = "add-no-carry-insts", .description = "Have VALU add/sub instructions without carry out", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.aperture_regs)] = .{ + result[@intFromEnum(Feature.aperture_regs)] = .{ .llvm_name = "aperture-regs", .description = "Has Memory Aperture Base and Size Registers", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.architected_flat_scratch)] = .{ + result[@intFromEnum(Feature.architected_flat_scratch)] = .{ .llvm_name = "architected-flat-scratch", .description = "Flat Scratch register is a readonly SPI initialized architected register", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.atomic_fadd_no_rtn_insts)] = .{ + result[@intFromEnum(Feature.atomic_fadd_no_rtn_insts)] = .{ .llvm_name = "atomic-fadd-no-rtn-insts", .description = "Has buffer_atomic_add_f32 and global_atomic_add_f32 instructions that don't return original value", .dependencies = featureSet(&[_]Feature{ .flat_global_insts, }), }; - result[@enumToInt(Feature.atomic_fadd_rtn_insts)] = .{ + result[@intFromEnum(Feature.atomic_fadd_rtn_insts)] = .{ .llvm_name = "atomic-fadd-rtn-insts", .description = "Has buffer_atomic_add_f32 and global_atomic_add_f32 instructions that return original value", .dependencies = featureSet(&[_]Feature{ .flat_global_insts, }), }; - result[@enumToInt(Feature.atomic_pk_fadd_no_rtn_insts)] = .{ + result[@intFromEnum(Feature.atomic_pk_fadd_no_rtn_insts)] = .{ .llvm_name = "atomic-pk-fadd-no-rtn-insts", .description = "Has buffer_atomic_pk_add_f16 and global_atomic_pk_add_f16 instructions that don't return original value", .dependencies = featureSet(&[_]Feature{ .flat_global_insts, }), }; - result[@enumToInt(Feature.auto_waitcnt_before_barrier)] = .{ + result[@intFromEnum(Feature.auto_waitcnt_before_barrier)] = .{ .llvm_name = "auto-waitcnt-before-barrier", .description = "Hardware automatically inserts waitcnt before barrier", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.back_off_barrier)] = .{ + result[@intFromEnum(Feature.back_off_barrier)] = .{ .llvm_name = "back-off-barrier", .description = "Hardware supports backing off s_barrier if an exception occurs", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.ci_insts)] = .{ + result[@intFromEnum(Feature.ci_insts)] = .{ .llvm_name = "ci-insts", .description = "Additional instructions for CI+", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.cumode)] = .{ + result[@intFromEnum(Feature.cumode)] = .{ .llvm_name = "cumode", .description = "Enable CU wavefront execution mode", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.dl_insts)] = .{ + result[@intFromEnum(Feature.dl_insts)] = .{ .llvm_name = "dl-insts", .description = "Has v_fmac_f32 and v_xnor_b32 instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.dot1_insts)] = .{ + result[@intFromEnum(Feature.dot1_insts)] = .{ .llvm_name = "dot1-insts", .description = "Has v_dot4_i32_i8 and v_dot8_i32_i4 instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.dot2_insts)] = .{ + result[@intFromEnum(Feature.dot2_insts)] = .{ .llvm_name = "dot2-insts", .description = "Has v_dot2_i32_i16, v_dot2_u32_u16 instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.dot3_insts)] = .{ + result[@intFromEnum(Feature.dot3_insts)] = .{ .llvm_name = "dot3-insts", .description = "Has v_dot8c_i32_i4 instruction", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.dot4_insts)] = .{ + result[@intFromEnum(Feature.dot4_insts)] = .{ .llvm_name = "dot4-insts", .description = "Has v_dot2c_i32_i16 instruction", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.dot5_insts)] = .{ + result[@intFromEnum(Feature.dot5_insts)] = .{ .llvm_name = "dot5-insts", .description = "Has v_dot2c_f32_f16 instruction", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.dot6_insts)] = .{ + result[@intFromEnum(Feature.dot6_insts)] = .{ .llvm_name = "dot6-insts", .description = "Has v_dot4c_i32_i8 instruction", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.dot7_insts)] = .{ + result[@intFromEnum(Feature.dot7_insts)] = .{ .llvm_name = "dot7-insts", .description = "Has v_dot2_f32_f16, v_dot4_u32_u8, v_dot8_u32_u4 instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.dot8_insts)] = .{ + result[@intFromEnum(Feature.dot8_insts)] = .{ .llvm_name = "dot8-insts", .description = "Has v_dot4_i32_iu8, v_dot8_i32_iu4 instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.dot9_insts)] = .{ + result[@intFromEnum(Feature.dot9_insts)] = .{ .llvm_name = "dot9-insts", .description = "Has v_dot2_f16_f16, v_dot2_bf16_bf16, v_dot2_f32_bf16 instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.dpp)] = .{ + result[@intFromEnum(Feature.dpp)] = .{ .llvm_name = "dpp", .description = "Support DPP (Data Parallel Primitives) extension", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.dpp8)] = .{ + result[@intFromEnum(Feature.dpp8)] = .{ .llvm_name = "dpp8", .description = "Support DPP8 (Data Parallel Primitives) extension", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.dpp_64bit)] = .{ + result[@intFromEnum(Feature.dpp_64bit)] = .{ .llvm_name = "dpp-64bit", .description = "Support DPP (Data Parallel Primitives) extension", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.ds128)] = .{ + result[@intFromEnum(Feature.ds128)] = .{ .llvm_name = "enable-ds128", .description = "Use ds_{read|write}_b128", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.ds_src2_insts)] = .{ + result[@intFromEnum(Feature.ds_src2_insts)] = .{ .llvm_name = "ds-src2-insts", .description = "Has ds_*_src2 instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.extended_image_insts)] = .{ + result[@intFromEnum(Feature.extended_image_insts)] = .{ .llvm_name = "extended-image-insts", .description = "Support mips != 0, lod != 0, gather4, and get_lod", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.fast_denormal_f32)] = .{ + result[@intFromEnum(Feature.fast_denormal_f32)] = .{ .llvm_name = "fast-denormal-f32", .description = "Enabling denormals does not cause f32 instructions to run at f64 rates", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.fast_fmaf)] = .{ + result[@intFromEnum(Feature.fast_fmaf)] = .{ .llvm_name = "fast-fmaf", .description = "Assuming f32 fma is at least as fast as mul + add", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.flat_address_space)] = .{ + result[@intFromEnum(Feature.flat_address_space)] = .{ .llvm_name = "flat-address-space", .description = "Support flat address space", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.flat_atomic_fadd_f32_inst)] = .{ + result[@intFromEnum(Feature.flat_atomic_fadd_f32_inst)] = .{ .llvm_name = "flat-atomic-fadd-f32-inst", .description = "Has flat_atomic_add_f32 instruction", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.flat_for_global)] = .{ + result[@intFromEnum(Feature.flat_for_global)] = .{ .llvm_name = "flat-for-global", .description = "Force to generate flat instruction for global", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.flat_global_insts)] = .{ + result[@intFromEnum(Feature.flat_global_insts)] = .{ .llvm_name = "flat-global-insts", .description = "Have global_* flat memory instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.flat_inst_offsets)] = .{ + result[@intFromEnum(Feature.flat_inst_offsets)] = .{ .llvm_name = "flat-inst-offsets", .description = "Flat instructions have immediate offset addressing mode", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.flat_scratch)] = .{ + result[@intFromEnum(Feature.flat_scratch)] = .{ .llvm_name = "enable-flat-scratch", .description = "Use scratch_* flat memory instructions to access scratch", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.flat_scratch_insts)] = .{ + result[@intFromEnum(Feature.flat_scratch_insts)] = .{ .llvm_name = "flat-scratch-insts", .description = "Have scratch_* flat memory instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.flat_segment_offset_bug)] = .{ + result[@intFromEnum(Feature.flat_segment_offset_bug)] = .{ .llvm_name = "flat-segment-offset-bug", .description = "GFX10 bug where inst_offset is ignored when flat instructions access global memory", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.fma_mix_insts)] = .{ + result[@intFromEnum(Feature.fma_mix_insts)] = .{ .llvm_name = "fma-mix-insts", .description = "Has v_fma_mix_f32, v_fma_mixlo_f16, v_fma_mixhi_f16 instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.fmacf64_inst)] = .{ + result[@intFromEnum(Feature.fmacf64_inst)] = .{ .llvm_name = "fmacf64-inst", .description = "Has v_fmac_f64 instruction", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.fmaf)] = .{ + result[@intFromEnum(Feature.fmaf)] = .{ .llvm_name = "fmaf", .description = "Enable single precision FMA (not as fast as mul+add, but fused)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.fp64)] = .{ + result[@intFromEnum(Feature.fp64)] = .{ .llvm_name = "fp64", .description = "Enable double precision operations", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.fp8_insts)] = .{ + result[@intFromEnum(Feature.fp8_insts)] = .{ .llvm_name = "fp8-insts", .description = "Has fp8 and bf8 instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.full_rate_64_ops)] = .{ + result[@intFromEnum(Feature.full_rate_64_ops)] = .{ .llvm_name = "full-rate-64-ops", .description = "Most fp64 instructions are full rate", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.g16)] = .{ + result[@intFromEnum(Feature.g16)] = .{ .llvm_name = "g16", .description = "Support G16 for 16-bit gradient image operands", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.gcn3_encoding)] = .{ + result[@intFromEnum(Feature.gcn3_encoding)] = .{ .llvm_name = "gcn3-encoding", .description = "Encoding format for VI", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.get_wave_id_inst)] = .{ + result[@intFromEnum(Feature.get_wave_id_inst)] = .{ .llvm_name = "get-wave-id-inst", .description = "Has s_get_waveid_in_workgroup instruction", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.gfx10)] = .{ + result[@intFromEnum(Feature.gfx10)] = .{ .llvm_name = "gfx10", .description = "GFX10 GPU generation", .dependencies = featureSet(&[_]Feature{ @@ -449,27 +449,27 @@ pub const all_features = blk: { .vscnt, }), }; - result[@enumToInt(Feature.gfx10_3_insts)] = .{ + result[@intFromEnum(Feature.gfx10_3_insts)] = .{ .llvm_name = "gfx10-3-insts", .description = "Additional instructions for GFX10.3", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.gfx10_a_encoding)] = .{ + result[@intFromEnum(Feature.gfx10_a_encoding)] = .{ .llvm_name = "gfx10_a-encoding", .description = "Has BVH ray tracing instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.gfx10_b_encoding)] = .{ + result[@intFromEnum(Feature.gfx10_b_encoding)] = .{ .llvm_name = "gfx10_b-encoding", .description = "Encoding format GFX10_B", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.gfx10_insts)] = .{ + result[@intFromEnum(Feature.gfx10_insts)] = .{ .llvm_name = "gfx10-insts", .description = "Additional instructions for GFX10+", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.gfx11)] = .{ + result[@intFromEnum(Feature.gfx11)] = .{ .llvm_name = "gfx11", .description = "GFX11 GPU generation", .dependencies = featureSet(&[_]Feature{ @@ -514,27 +514,27 @@ pub const all_features = blk: { .vscnt, }), }; - result[@enumToInt(Feature.gfx11_full_vgprs)] = .{ + result[@intFromEnum(Feature.gfx11_full_vgprs)] = .{ .llvm_name = "gfx11-full-vgprs", .description = "GFX11 with 50% more physical VGPRs and 50% larger allocation granule than GFX10", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.gfx11_insts)] = .{ + result[@intFromEnum(Feature.gfx11_insts)] = .{ .llvm_name = "gfx11-insts", .description = "Additional instructions for GFX11+", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.gfx7_gfx8_gfx9_insts)] = .{ + result[@intFromEnum(Feature.gfx7_gfx8_gfx9_insts)] = .{ .llvm_name = "gfx7-gfx8-gfx9-insts", .description = "Instructions shared in GFX7, GFX8, GFX9", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.gfx8_insts)] = .{ + result[@intFromEnum(Feature.gfx8_insts)] = .{ .llvm_name = "gfx8-insts", .description = "Additional instructions for GFX8+", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.gfx9)] = .{ + result[@intFromEnum(Feature.gfx9)] = .{ .llvm_name = "gfx9", .description = "GFX9 GPU generation", .dependencies = featureSet(&[_]Feature{ @@ -577,277 +577,277 @@ pub const all_features = blk: { .xnack_support, }), }; - result[@enumToInt(Feature.gfx90a_insts)] = .{ + result[@intFromEnum(Feature.gfx90a_insts)] = .{ .llvm_name = "gfx90a-insts", .description = "Additional instructions for GFX90A+", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.gfx940_insts)] = .{ + result[@intFromEnum(Feature.gfx940_insts)] = .{ .llvm_name = "gfx940-insts", .description = "Additional instructions for GFX940+", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.gfx9_insts)] = .{ + result[@intFromEnum(Feature.gfx9_insts)] = .{ .llvm_name = "gfx9-insts", .description = "Additional instructions for GFX9+", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.half_rate_64_ops)] = .{ + result[@intFromEnum(Feature.half_rate_64_ops)] = .{ .llvm_name = "half-rate-64-ops", .description = "Most fp64 instructions are half rate instead of quarter", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.image_gather4_d16_bug)] = .{ + result[@intFromEnum(Feature.image_gather4_d16_bug)] = .{ .llvm_name = "image-gather4-d16-bug", .description = "Image Gather4 D16 hardware bug", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.image_insts)] = .{ + result[@intFromEnum(Feature.image_insts)] = .{ .llvm_name = "image-insts", .description = "Support image instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.image_store_d16_bug)] = .{ + result[@intFromEnum(Feature.image_store_d16_bug)] = .{ .llvm_name = "image-store-d16-bug", .description = "Image Store D16 hardware bug", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.inst_fwd_prefetch_bug)] = .{ + result[@intFromEnum(Feature.inst_fwd_prefetch_bug)] = .{ .llvm_name = "inst-fwd-prefetch-bug", .description = "S_INST_PREFETCH instruction causes shader to hang", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.int_clamp_insts)] = .{ + result[@intFromEnum(Feature.int_clamp_insts)] = .{ .llvm_name = "int-clamp-insts", .description = "Support clamp for integer destination", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.inv_2pi_inline_imm)] = .{ + result[@intFromEnum(Feature.inv_2pi_inline_imm)] = .{ .llvm_name = "inv-2pi-inline-imm", .description = "Has 1 / (2 * pi) as inline immediate", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.lds_branch_vmem_war_hazard)] = .{ + result[@intFromEnum(Feature.lds_branch_vmem_war_hazard)] = .{ .llvm_name = "lds-branch-vmem-war-hazard", .description = "Switching between LDS and VMEM-tex not waiting VM_VSRC=0", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.lds_misaligned_bug)] = .{ + result[@intFromEnum(Feature.lds_misaligned_bug)] = .{ .llvm_name = "lds-misaligned-bug", .description = "Some GFX10 bug with multi-dword LDS and flat access that is not naturally aligned in WGP mode", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.ldsbankcount16)] = .{ + result[@intFromEnum(Feature.ldsbankcount16)] = .{ .llvm_name = "ldsbankcount16", .description = "The number of LDS banks per compute unit.", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.ldsbankcount32)] = .{ + result[@intFromEnum(Feature.ldsbankcount32)] = .{ .llvm_name = "ldsbankcount32", .description = "The number of LDS banks per compute unit.", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.load_store_opt)] = .{ + result[@intFromEnum(Feature.load_store_opt)] = .{ .llvm_name = "load-store-opt", .description = "Enable SI load/store optimizer pass", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.localmemorysize32768)] = .{ + result[@intFromEnum(Feature.localmemorysize32768)] = .{ .llvm_name = "localmemorysize32768", .description = "The size of local memory in bytes", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.localmemorysize65536)] = .{ + result[@intFromEnum(Feature.localmemorysize65536)] = .{ .llvm_name = "localmemorysize65536", .description = "The size of local memory in bytes", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.mad_intra_fwd_bug)] = .{ + result[@intFromEnum(Feature.mad_intra_fwd_bug)] = .{ .llvm_name = "mad-intra-fwd-bug", .description = "MAD_U64/I64 intra instruction forwarding bug", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.mad_mac_f32_insts)] = .{ + result[@intFromEnum(Feature.mad_mac_f32_insts)] = .{ .llvm_name = "mad-mac-f32-insts", .description = "Has v_mad_f32/v_mac_f32/v_madak_f32/v_madmk_f32 instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.mad_mix_insts)] = .{ + result[@intFromEnum(Feature.mad_mix_insts)] = .{ .llvm_name = "mad-mix-insts", .description = "Has v_mad_mix_f32, v_mad_mixlo_f16, v_mad_mixhi_f16 instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.mai_insts)] = .{ + result[@intFromEnum(Feature.mai_insts)] = .{ .llvm_name = "mai-insts", .description = "Has mAI instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.max_private_element_size_16)] = .{ + result[@intFromEnum(Feature.max_private_element_size_16)] = .{ .llvm_name = "max-private-element-size-16", .description = "Maximum private access size may be 16", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.max_private_element_size_4)] = .{ + result[@intFromEnum(Feature.max_private_element_size_4)] = .{ .llvm_name = "max-private-element-size-4", .description = "Maximum private access size may be 4", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.max_private_element_size_8)] = .{ + result[@intFromEnum(Feature.max_private_element_size_8)] = .{ .llvm_name = "max-private-element-size-8", .description = "Maximum private access size may be 8", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.mfma_inline_literal_bug)] = .{ + result[@intFromEnum(Feature.mfma_inline_literal_bug)] = .{ .llvm_name = "mfma-inline-literal-bug", .description = "MFMA cannot use inline literal as SrcC", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.mimg_r128)] = .{ + result[@intFromEnum(Feature.mimg_r128)] = .{ .llvm_name = "mimg-r128", .description = "Support 128-bit texture resources", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.movrel)] = .{ + result[@intFromEnum(Feature.movrel)] = .{ .llvm_name = "movrel", .description = "Has v_movrel*_b32 instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.negative_scratch_offset_bug)] = .{ + result[@intFromEnum(Feature.negative_scratch_offset_bug)] = .{ .llvm_name = "negative-scratch-offset-bug", .description = "Negative immediate offsets in scratch instructions with an SGPR offset page fault on GFX9", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.negative_unaligned_scratch_offset_bug)] = .{ + result[@intFromEnum(Feature.negative_unaligned_scratch_offset_bug)] = .{ .llvm_name = "negative-unaligned-scratch-offset-bug", .description = "Scratch instructions with a VGPR offset and a negative immediate offset that is not a multiple of 4 read wrong memory on GFX10", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.no_data_dep_hazard)] = .{ + result[@intFromEnum(Feature.no_data_dep_hazard)] = .{ .llvm_name = "no-data-dep-hazard", .description = "Does not need SW waitstates", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.no_sdst_cmpx)] = .{ + result[@intFromEnum(Feature.no_sdst_cmpx)] = .{ .llvm_name = "no-sdst-cmpx", .description = "V_CMPX does not write VCC/SGPR in addition to EXEC", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.nsa_clause_bug)] = .{ + result[@intFromEnum(Feature.nsa_clause_bug)] = .{ .llvm_name = "nsa-clause-bug", .description = "MIMG-NSA in a hard clause has unpredictable results on GFX10.1", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.nsa_encoding)] = .{ + result[@intFromEnum(Feature.nsa_encoding)] = .{ .llvm_name = "nsa-encoding", .description = "Support NSA encoding for image instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.nsa_max_size_13)] = .{ + result[@intFromEnum(Feature.nsa_max_size_13)] = .{ .llvm_name = "nsa-max-size-13", .description = "The maximum non-sequential address size in VGPRs.", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.nsa_max_size_5)] = .{ + result[@intFromEnum(Feature.nsa_max_size_5)] = .{ .llvm_name = "nsa-max-size-5", .description = "The maximum non-sequential address size in VGPRs.", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.nsa_to_vmem_bug)] = .{ + result[@intFromEnum(Feature.nsa_to_vmem_bug)] = .{ .llvm_name = "nsa-to-vmem-bug", .description = "MIMG-NSA followed by VMEM fail if EXEC_LO or EXEC_HI equals zero", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.offset_3f_bug)] = .{ + result[@intFromEnum(Feature.offset_3f_bug)] = .{ .llvm_name = "offset-3f-bug", .description = "Branch offset of 3f hardware bug", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.packed_fp32_ops)] = .{ + result[@intFromEnum(Feature.packed_fp32_ops)] = .{ .llvm_name = "packed-fp32-ops", .description = "Support packed fp32 instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.packed_tid)] = .{ + result[@intFromEnum(Feature.packed_tid)] = .{ .llvm_name = "packed-tid", .description = "Workitem IDs are packed into v0 at kernel launch", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.pk_fmac_f16_inst)] = .{ + result[@intFromEnum(Feature.pk_fmac_f16_inst)] = .{ .llvm_name = "pk-fmac-f16-inst", .description = "Has v_pk_fmac_f16 instruction", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.promote_alloca)] = .{ + result[@intFromEnum(Feature.promote_alloca)] = .{ .llvm_name = "promote-alloca", .description = "Enable promote alloca pass", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.prt_strict_null)] = .{ + result[@intFromEnum(Feature.prt_strict_null)] = .{ .llvm_name = "enable-prt-strict-null", .description = "Enable zeroing of result registers for sparse texture fetches", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.r128_a16)] = .{ + result[@intFromEnum(Feature.r128_a16)] = .{ .llvm_name = "r128-a16", .description = "Support gfx9-style A16 for 16-bit coordinates/gradients/lod/clamp/mip image operands, where a16 is aliased with r128", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.s_memrealtime)] = .{ + result[@intFromEnum(Feature.s_memrealtime)] = .{ .llvm_name = "s-memrealtime", .description = "Has s_memrealtime instruction", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.s_memtime_inst)] = .{ + result[@intFromEnum(Feature.s_memtime_inst)] = .{ .llvm_name = "s-memtime-inst", .description = "Has s_memtime instruction", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.scalar_atomics)] = .{ + result[@intFromEnum(Feature.scalar_atomics)] = .{ .llvm_name = "scalar-atomics", .description = "Has atomic scalar memory instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.scalar_flat_scratch_insts)] = .{ + result[@intFromEnum(Feature.scalar_flat_scratch_insts)] = .{ .llvm_name = "scalar-flat-scratch-insts", .description = "Have s_scratch_* flat memory instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.scalar_stores)] = .{ + result[@intFromEnum(Feature.scalar_stores)] = .{ .llvm_name = "scalar-stores", .description = "Has store scalar memory instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.sdwa)] = .{ + result[@intFromEnum(Feature.sdwa)] = .{ .llvm_name = "sdwa", .description = "Support SDWA (Sub-DWORD Addressing) extension", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.sdwa_mav)] = .{ + result[@intFromEnum(Feature.sdwa_mav)] = .{ .llvm_name = "sdwa-mav", .description = "Support v_mac_f32/f16 with SDWA (Sub-DWORD Addressing) extension", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.sdwa_omod)] = .{ + result[@intFromEnum(Feature.sdwa_omod)] = .{ .llvm_name = "sdwa-omod", .description = "Support OMod with SDWA (Sub-DWORD Addressing) extension", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.sdwa_out_mods_vopc)] = .{ + result[@intFromEnum(Feature.sdwa_out_mods_vopc)] = .{ .llvm_name = "sdwa-out-mods-vopc", .description = "Support clamp for VOPC with SDWA (Sub-DWORD Addressing) extension", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.sdwa_scalar)] = .{ + result[@intFromEnum(Feature.sdwa_scalar)] = .{ .llvm_name = "sdwa-scalar", .description = "Support scalar register with SDWA (Sub-DWORD Addressing) extension", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.sdwa_sdst)] = .{ + result[@intFromEnum(Feature.sdwa_sdst)] = .{ .llvm_name = "sdwa-sdst", .description = "Support scalar dst for VOPC with SDWA (Sub-DWORD Addressing) extension", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.sea_islands)] = .{ + result[@intFromEnum(Feature.sea_islands)] = .{ .llvm_name = "sea-islands", .description = "SEA_ISLANDS GPU generation", .dependencies = featureSet(&[_]Feature{ @@ -868,27 +868,27 @@ pub const all_features = blk: { .wavefrontsize64, }), }; - result[@enumToInt(Feature.sgpr_init_bug)] = .{ + result[@intFromEnum(Feature.sgpr_init_bug)] = .{ .llvm_name = "sgpr-init-bug", .description = "VI SGPR initialization bug requiring a fixed SGPR allocation size", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.shader_cycles_register)] = .{ + result[@intFromEnum(Feature.shader_cycles_register)] = .{ .llvm_name = "shader-cycles-register", .description = "Has SHADER_CYCLES hardware register", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.si_scheduler)] = .{ + result[@intFromEnum(Feature.si_scheduler)] = .{ .llvm_name = "si-scheduler", .description = "Enable SI Machine Scheduler", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.smem_to_vector_write_hazard)] = .{ + result[@intFromEnum(Feature.smem_to_vector_write_hazard)] = .{ .llvm_name = "smem-to-vector-write-hazard", .description = "s_load_dword followed by v_cmp page faults", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.southern_islands)] = .{ + result[@intFromEnum(Feature.southern_islands)] = .{ .llvm_name = "southern-islands", .description = "SOUTHERN_ISLANDS GPU generation", .dependencies = featureSet(&[_]Feature{ @@ -906,97 +906,97 @@ pub const all_features = blk: { .wavefrontsize64, }), }; - result[@enumToInt(Feature.sramecc)] = .{ + result[@intFromEnum(Feature.sramecc)] = .{ .llvm_name = "sramecc", .description = "Enable SRAMECC", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.sramecc_support)] = .{ + result[@intFromEnum(Feature.sramecc_support)] = .{ .llvm_name = "sramecc-support", .description = "Hardware supports SRAMECC", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.tgsplit)] = .{ + result[@intFromEnum(Feature.tgsplit)] = .{ .llvm_name = "tgsplit", .description = "Enable threadgroup split execution", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.trap_handler)] = .{ + result[@intFromEnum(Feature.trap_handler)] = .{ .llvm_name = "trap-handler", .description = "Trap handler support", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.trig_reduced_range)] = .{ + result[@intFromEnum(Feature.trig_reduced_range)] = .{ .llvm_name = "trig-reduced-range", .description = "Requires use of fract on arguments to trig instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.true16)] = .{ + result[@intFromEnum(Feature.true16)] = .{ .llvm_name = "true16", .description = "True 16-bit operand instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.unaligned_access_mode)] = .{ + result[@intFromEnum(Feature.unaligned_access_mode)] = .{ .llvm_name = "unaligned-access-mode", .description = "Enable unaligned global, local and region loads and stores if the hardware supports it", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.unaligned_buffer_access)] = .{ + result[@intFromEnum(Feature.unaligned_buffer_access)] = .{ .llvm_name = "unaligned-buffer-access", .description = "Hardware supports unaligned global loads and stores", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.unaligned_ds_access)] = .{ + result[@intFromEnum(Feature.unaligned_ds_access)] = .{ .llvm_name = "unaligned-ds-access", .description = "Hardware supports unaligned local and region loads and stores", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.unaligned_scratch_access)] = .{ + result[@intFromEnum(Feature.unaligned_scratch_access)] = .{ .llvm_name = "unaligned-scratch-access", .description = "Support unaligned scratch loads and stores", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.unpacked_d16_vmem)] = .{ + result[@intFromEnum(Feature.unpacked_d16_vmem)] = .{ .llvm_name = "unpacked-d16-vmem", .description = "Has unpacked d16 vmem instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.unsafe_ds_offset_folding)] = .{ + result[@intFromEnum(Feature.unsafe_ds_offset_folding)] = .{ .llvm_name = "unsafe-ds-offset-folding", .description = "Force using DS instruction immediate offsets on SI", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.user_sgpr_init16_bug)] = .{ + result[@intFromEnum(Feature.user_sgpr_init16_bug)] = .{ .llvm_name = "user-sgpr-init16-bug", .description = "Bug requiring at least 16 user+system SGPRs to be enabled", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.valu_trans_use_hazard)] = .{ + result[@intFromEnum(Feature.valu_trans_use_hazard)] = .{ .llvm_name = "valu-trans-use-hazard", .description = "Hazard when TRANS instructions are closely followed by a use of the result", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.vcmpx_exec_war_hazard)] = .{ + result[@intFromEnum(Feature.vcmpx_exec_war_hazard)] = .{ .llvm_name = "vcmpx-exec-war-hazard", .description = "V_CMPX WAR hazard on EXEC (V_CMPX issue ONLY)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.vcmpx_permlane_hazard)] = .{ + result[@intFromEnum(Feature.vcmpx_permlane_hazard)] = .{ .llvm_name = "vcmpx-permlane-hazard", .description = "TODO: describe me", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.vgpr_index_mode)] = .{ + result[@intFromEnum(Feature.vgpr_index_mode)] = .{ .llvm_name = "vgpr-index-mode", .description = "Has VGPR mode register indexing", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.vmem_to_scalar_write_hazard)] = .{ + result[@intFromEnum(Feature.vmem_to_scalar_write_hazard)] = .{ .llvm_name = "vmem-to-scalar-write-hazard", .description = "VMEM instruction followed by scalar writing to EXEC mask, M0 or SGPR leads to incorrect execution.", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.volcanic_islands)] = .{ + result[@intFromEnum(Feature.volcanic_islands)] = .{ .llvm_name = "volcanic-islands", .description = "VOLCANIC_ISLANDS GPU generation", .dependencies = featureSet(&[_]Feature{ @@ -1030,47 +1030,47 @@ pub const all_features = blk: { .wavefrontsize64, }), }; - result[@enumToInt(Feature.vop3_literal)] = .{ + result[@intFromEnum(Feature.vop3_literal)] = .{ .llvm_name = "vop3-literal", .description = "Can use one literal in VOP3", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.vop3p)] = .{ + result[@intFromEnum(Feature.vop3p)] = .{ .llvm_name = "vop3p", .description = "Has VOP3P packed instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.vopd)] = .{ + result[@intFromEnum(Feature.vopd)] = .{ .llvm_name = "vopd", .description = "Has VOPD dual issue wave32 instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.vscnt)] = .{ + result[@intFromEnum(Feature.vscnt)] = .{ .llvm_name = "vscnt", .description = "Has separate store vscnt counter", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.wavefrontsize16)] = .{ + result[@intFromEnum(Feature.wavefrontsize16)] = .{ .llvm_name = "wavefrontsize16", .description = "The number of threads per wavefront", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.wavefrontsize32)] = .{ + result[@intFromEnum(Feature.wavefrontsize32)] = .{ .llvm_name = "wavefrontsize32", .description = "The number of threads per wavefront", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.wavefrontsize64)] = .{ + result[@intFromEnum(Feature.wavefrontsize64)] = .{ .llvm_name = "wavefrontsize64", .description = "The number of threads per wavefront", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.xnack)] = .{ + result[@intFromEnum(Feature.xnack)] = .{ .llvm_name = "xnack", .description = "Enable XNACK support", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.xnack_support)] = .{ + result[@intFromEnum(Feature.xnack_support)] = .{ .llvm_name = "xnack-support", .description = "Hardware supports XNACK", .dependencies = featureSet(&[_]Feature{}), diff --git a/lib/std/target/arc.zig b/lib/std/target/arc.zig index 86d803c217..eff13c6637 100644 --- a/lib/std/target/arc.zig +++ b/lib/std/target/arc.zig @@ -17,7 +17,7 @@ pub const all_features = blk: { const len = @typeInfo(Feature).Enum.fields.len; std.debug.assert(len <= CpuFeature.Set.needed_bit_count); var result: [len]CpuFeature = undefined; - result[@enumToInt(Feature.norm)] = .{ + result[@intFromEnum(Feature.norm)] = .{ .llvm_name = "norm", .description = "Enable support for norm instruction.", .dependencies = featureSet(&[_]Feature{}), diff --git a/lib/std/target/arm.zig b/lib/std/target/arm.zig index 18b26d5ba9..a78fd6785a 100644 --- a/lib/std/target/arm.zig +++ b/lib/std/target/arm.zig @@ -214,156 +214,156 @@ pub const all_features = blk: { const len = @typeInfo(Feature).Enum.fields.len; std.debug.assert(len <= CpuFeature.Set.needed_bit_count); var result: [len]CpuFeature = undefined; - result[@enumToInt(Feature.@"32bit")] = .{ + result[@intFromEnum(Feature.@"32bit")] = .{ .llvm_name = "32bit", .description = "Prefer 32-bit Thumb instrs", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.@"8msecext")] = .{ + result[@intFromEnum(Feature.@"8msecext")] = .{ .llvm_name = "8msecext", .description = "Enable support for ARMv8-M Security Extensions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.a76)] = .{ + result[@intFromEnum(Feature.a76)] = .{ .llvm_name = "a76", .description = "Cortex-A76 ARM processors", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.aapcs_frame_chain)] = .{ + result[@intFromEnum(Feature.aapcs_frame_chain)] = .{ .llvm_name = "aapcs-frame-chain", .description = "Create an AAPCS compliant frame chain", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.aapcs_frame_chain_leaf)] = .{ + result[@intFromEnum(Feature.aapcs_frame_chain_leaf)] = .{ .llvm_name = "aapcs-frame-chain-leaf", .description = "Create an AAPCS compliant frame chain for leaf functions", .dependencies = featureSet(&[_]Feature{ .aapcs_frame_chain, }), }; - result[@enumToInt(Feature.aclass)] = .{ + result[@intFromEnum(Feature.aclass)] = .{ .llvm_name = "aclass", .description = "Is application profile ('A' series)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.acquire_release)] = .{ + result[@intFromEnum(Feature.acquire_release)] = .{ .llvm_name = "acquire-release", .description = "Has v8 acquire/release (lda/ldaex etc) instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.aes)] = .{ + result[@intFromEnum(Feature.aes)] = .{ .llvm_name = "aes", .description = "Enable AES support", .dependencies = featureSet(&[_]Feature{ .neon, }), }; - result[@enumToInt(Feature.atomics_32)] = .{ + result[@intFromEnum(Feature.atomics_32)] = .{ .llvm_name = "atomics-32", .description = "Assume that lock-free 32-bit atomics are available", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.avoid_movs_shop)] = .{ + result[@intFromEnum(Feature.avoid_movs_shop)] = .{ .llvm_name = "avoid-movs-shop", .description = "Avoid movs instructions with shifter operand", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.avoid_partial_cpsr)] = .{ + result[@intFromEnum(Feature.avoid_partial_cpsr)] = .{ .llvm_name = "avoid-partial-cpsr", .description = "Avoid CPSR partial update for OOO execution", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.bf16)] = .{ + result[@intFromEnum(Feature.bf16)] = .{ .llvm_name = "bf16", .description = "Enable support for BFloat16 instructions", .dependencies = featureSet(&[_]Feature{ .neon, }), }; - result[@enumToInt(Feature.big_endian_instructions)] = .{ + result[@intFromEnum(Feature.big_endian_instructions)] = .{ .llvm_name = "big-endian-instructions", .description = "Expect instructions to be stored big-endian.", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.cde)] = .{ + result[@intFromEnum(Feature.cde)] = .{ .llvm_name = "cde", .description = "Support CDE instructions", .dependencies = featureSet(&[_]Feature{ .has_v8m_main, }), }; - result[@enumToInt(Feature.cdecp0)] = .{ + result[@intFromEnum(Feature.cdecp0)] = .{ .llvm_name = "cdecp0", .description = "Coprocessor 0 ISA is CDEv1", .dependencies = featureSet(&[_]Feature{ .cde, }), }; - result[@enumToInt(Feature.cdecp1)] = .{ + result[@intFromEnum(Feature.cdecp1)] = .{ .llvm_name = "cdecp1", .description = "Coprocessor 1 ISA is CDEv1", .dependencies = featureSet(&[_]Feature{ .cde, }), }; - result[@enumToInt(Feature.cdecp2)] = .{ + result[@intFromEnum(Feature.cdecp2)] = .{ .llvm_name = "cdecp2", .description = "Coprocessor 2 ISA is CDEv1", .dependencies = featureSet(&[_]Feature{ .cde, }), }; - result[@enumToInt(Feature.cdecp3)] = .{ + result[@intFromEnum(Feature.cdecp3)] = .{ .llvm_name = "cdecp3", .description = "Coprocessor 3 ISA is CDEv1", .dependencies = featureSet(&[_]Feature{ .cde, }), }; - result[@enumToInt(Feature.cdecp4)] = .{ + result[@intFromEnum(Feature.cdecp4)] = .{ .llvm_name = "cdecp4", .description = "Coprocessor 4 ISA is CDEv1", .dependencies = featureSet(&[_]Feature{ .cde, }), }; - result[@enumToInt(Feature.cdecp5)] = .{ + result[@intFromEnum(Feature.cdecp5)] = .{ .llvm_name = "cdecp5", .description = "Coprocessor 5 ISA is CDEv1", .dependencies = featureSet(&[_]Feature{ .cde, }), }; - result[@enumToInt(Feature.cdecp6)] = .{ + result[@intFromEnum(Feature.cdecp6)] = .{ .llvm_name = "cdecp6", .description = "Coprocessor 6 ISA is CDEv1", .dependencies = featureSet(&[_]Feature{ .cde, }), }; - result[@enumToInt(Feature.cdecp7)] = .{ + result[@intFromEnum(Feature.cdecp7)] = .{ .llvm_name = "cdecp7", .description = "Coprocessor 7 ISA is CDEv1", .dependencies = featureSet(&[_]Feature{ .cde, }), }; - result[@enumToInt(Feature.cheap_predicable_cpsr)] = .{ + result[@intFromEnum(Feature.cheap_predicable_cpsr)] = .{ .llvm_name = "cheap-predicable-cpsr", .description = "Disable +1 predication cost for instructions updating CPSR", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.clrbhb)] = .{ + result[@intFromEnum(Feature.clrbhb)] = .{ .llvm_name = "clrbhb", .description = "Enable Clear BHB instruction", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.crc)] = .{ + result[@intFromEnum(Feature.crc)] = .{ .llvm_name = "crc", .description = "Enable support for CRC instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.crypto)] = .{ + result[@intFromEnum(Feature.crypto)] = .{ .llvm_name = "crypto", .description = "Enable support for Cryptography extensions", .dependencies = featureSet(&[_]Feature{ @@ -371,54 +371,54 @@ pub const all_features = blk: { .sha2, }), }; - result[@enumToInt(Feature.d32)] = .{ + result[@intFromEnum(Feature.d32)] = .{ .llvm_name = "d32", .description = "Extend FP to 32 double registers", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.db)] = .{ + result[@intFromEnum(Feature.db)] = .{ .llvm_name = "db", .description = "Has data barrier (dmb/dsb) instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.dfb)] = .{ + result[@intFromEnum(Feature.dfb)] = .{ .llvm_name = "dfb", .description = "Has full data barrier (dfb) instruction", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.disable_postra_scheduler)] = .{ + result[@intFromEnum(Feature.disable_postra_scheduler)] = .{ .llvm_name = "disable-postra-scheduler", .description = "Don't schedule again after register allocation", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.dont_widen_vmovs)] = .{ + result[@intFromEnum(Feature.dont_widen_vmovs)] = .{ .llvm_name = "dont-widen-vmovs", .description = "Don't widen VMOVS to VMOVD", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.dotprod)] = .{ + result[@intFromEnum(Feature.dotprod)] = .{ .llvm_name = "dotprod", .description = "Enable support for dot product instructions", .dependencies = featureSet(&[_]Feature{ .neon, }), }; - result[@enumToInt(Feature.dsp)] = .{ + result[@intFromEnum(Feature.dsp)] = .{ .llvm_name = "dsp", .description = "Supports DSP instructions in ARM and/or Thumb2", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.execute_only)] = .{ + result[@intFromEnum(Feature.execute_only)] = .{ .llvm_name = "execute-only", .description = "Enable the generation of execute only code.", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.expand_fp_mlx)] = .{ + result[@intFromEnum(Feature.expand_fp_mlx)] = .{ .llvm_name = "expand-fp-mlx", .description = "Expand VFP/NEON MLA/MLS instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.exynos)] = .{ + result[@intFromEnum(Feature.exynos)] = .{ .llvm_name = "exynos", .description = "Samsung Exynos processors", .dependencies = featureSet(&[_]Feature{ @@ -441,36 +441,36 @@ pub const all_features = blk: { .zcz, }), }; - result[@enumToInt(Feature.fix_cmse_cve_2021_35465)] = .{ + result[@intFromEnum(Feature.fix_cmse_cve_2021_35465)] = .{ .llvm_name = "fix-cmse-cve-2021-35465", .description = "Mitigate against the cve-2021-35465 security vulnurability", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.fix_cortex_a57_aes_1742098)] = .{ + result[@intFromEnum(Feature.fix_cortex_a57_aes_1742098)] = .{ .llvm_name = "fix-cortex-a57-aes-1742098", .description = "Work around Cortex-A57 Erratum 1742098 / Cortex-A72 Erratum 1655431 (AES)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.fp16)] = .{ + result[@intFromEnum(Feature.fp16)] = .{ .llvm_name = "fp16", .description = "Enable half-precision floating point", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.fp16fml)] = .{ + result[@intFromEnum(Feature.fp16fml)] = .{ .llvm_name = "fp16fml", .description = "Enable full half-precision floating point fml instructions", .dependencies = featureSet(&[_]Feature{ .fullfp16, }), }; - result[@enumToInt(Feature.fp64)] = .{ + result[@intFromEnum(Feature.fp64)] = .{ .llvm_name = "fp64", .description = "Floating point unit supports double precision", .dependencies = featureSet(&[_]Feature{ .fpregs64, }), }; - result[@enumToInt(Feature.fp_armv8)] = .{ + result[@intFromEnum(Feature.fp_armv8)] = .{ .llvm_name = "fp-armv8", .description = "Enable ARMv8 FP", .dependencies = featureSet(&[_]Feature{ @@ -479,7 +479,7 @@ pub const all_features = blk: { .vfp4, }), }; - result[@enumToInt(Feature.fp_armv8d16)] = .{ + result[@intFromEnum(Feature.fp_armv8d16)] = .{ .llvm_name = "fp-armv8d16", .description = "Enable ARMv8 FP with only 16 d-registers", .dependencies = featureSet(&[_]Feature{ @@ -487,14 +487,14 @@ pub const all_features = blk: { .vfp4d16, }), }; - result[@enumToInt(Feature.fp_armv8d16sp)] = .{ + result[@intFromEnum(Feature.fp_armv8d16sp)] = .{ .llvm_name = "fp-armv8d16sp", .description = "Enable ARMv8 FP with only 16 d-registers and no double precision", .dependencies = featureSet(&[_]Feature{ .vfp4d16sp, }), }; - result[@enumToInt(Feature.fp_armv8sp)] = .{ + result[@intFromEnum(Feature.fp_armv8sp)] = .{ .llvm_name = "fp-armv8sp", .description = "Enable ARMv8 FP with no double precision", .dependencies = featureSet(&[_]Feature{ @@ -502,31 +502,31 @@ pub const all_features = blk: { .vfp4sp, }), }; - result[@enumToInt(Feature.fpao)] = .{ + result[@intFromEnum(Feature.fpao)] = .{ .llvm_name = "fpao", .description = "Enable fast computation of positive address offsets", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.fpregs)] = .{ + result[@intFromEnum(Feature.fpregs)] = .{ .llvm_name = "fpregs", .description = "Enable FP registers", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.fpregs16)] = .{ + result[@intFromEnum(Feature.fpregs16)] = .{ .llvm_name = "fpregs16", .description = "Enable 16-bit FP registers", .dependencies = featureSet(&[_]Feature{ .fpregs, }), }; - result[@enumToInt(Feature.fpregs64)] = .{ + result[@intFromEnum(Feature.fpregs64)] = .{ .llvm_name = "fpregs64", .description = "Enable 64-bit FP registers", .dependencies = featureSet(&[_]Feature{ .fpregs, }), }; - result[@enumToInt(Feature.fullfp16)] = .{ + result[@intFromEnum(Feature.fullfp16)] = .{ .llvm_name = "fullfp16", .description = "Enable full half-precision floating point", .dependencies = featureSet(&[_]Feature{ @@ -534,72 +534,72 @@ pub const all_features = blk: { .fpregs16, }), }; - result[@enumToInt(Feature.fuse_aes)] = .{ + result[@intFromEnum(Feature.fuse_aes)] = .{ .llvm_name = "fuse-aes", .description = "CPU fuses AES crypto operations", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.fuse_literals)] = .{ + result[@intFromEnum(Feature.fuse_literals)] = .{ .llvm_name = "fuse-literals", .description = "CPU fuses literal generation operations", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.harden_sls_blr)] = .{ + result[@intFromEnum(Feature.harden_sls_blr)] = .{ .llvm_name = "harden-sls-blr", .description = "Harden against straight line speculation across indirect calls", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.harden_sls_nocomdat)] = .{ + result[@intFromEnum(Feature.harden_sls_nocomdat)] = .{ .llvm_name = "harden-sls-nocomdat", .description = "Generate thunk code for SLS mitigation in the normal text section", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.harden_sls_retbr)] = .{ + result[@intFromEnum(Feature.harden_sls_retbr)] = .{ .llvm_name = "harden-sls-retbr", .description = "Harden against straight line speculation across RETurn and BranchRegister instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.has_v4t)] = .{ + result[@intFromEnum(Feature.has_v4t)] = .{ .llvm_name = "v4t", .description = "Support ARM v4T instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.has_v5t)] = .{ + result[@intFromEnum(Feature.has_v5t)] = .{ .llvm_name = "v5t", .description = "Support ARM v5T instructions", .dependencies = featureSet(&[_]Feature{ .has_v4t, }), }; - result[@enumToInt(Feature.has_v5te)] = .{ + result[@intFromEnum(Feature.has_v5te)] = .{ .llvm_name = "v5te", .description = "Support ARM v5TE, v5TEj, and v5TExp instructions", .dependencies = featureSet(&[_]Feature{ .has_v5t, }), }; - result[@enumToInt(Feature.has_v6)] = .{ + result[@intFromEnum(Feature.has_v6)] = .{ .llvm_name = "v6", .description = "Support ARM v6 instructions", .dependencies = featureSet(&[_]Feature{ .has_v5te, }), }; - result[@enumToInt(Feature.has_v6k)] = .{ + result[@intFromEnum(Feature.has_v6k)] = .{ .llvm_name = "v6k", .description = "Support ARM v6k instructions", .dependencies = featureSet(&[_]Feature{ .has_v6, }), }; - result[@enumToInt(Feature.has_v6m)] = .{ + result[@intFromEnum(Feature.has_v6m)] = .{ .llvm_name = "v6m", .description = "Support ARM v6M instructions", .dependencies = featureSet(&[_]Feature{ .has_v6, }), }; - result[@enumToInt(Feature.has_v6t2)] = .{ + result[@intFromEnum(Feature.has_v6t2)] = .{ .llvm_name = "v6t2", .description = "Support ARM v6t2 instructions", .dependencies = featureSet(&[_]Feature{ @@ -608,7 +608,7 @@ pub const all_features = blk: { .thumb2, }), }; - result[@enumToInt(Feature.has_v7)] = .{ + result[@intFromEnum(Feature.has_v7)] = .{ .llvm_name = "v7", .description = "Support ARM v7 instructions", .dependencies = featureSet(&[_]Feature{ @@ -616,12 +616,12 @@ pub const all_features = blk: { .has_v7clrex, }), }; - result[@enumToInt(Feature.has_v7clrex)] = .{ + result[@intFromEnum(Feature.has_v7clrex)] = .{ .llvm_name = "v7clrex", .description = "Has v7 clrex instruction", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.has_v8)] = .{ + result[@intFromEnum(Feature.has_v8)] = .{ .llvm_name = "v8", .description = "Support ARM v8 instructions", .dependencies = featureSet(&[_]Feature{ @@ -630,35 +630,35 @@ pub const all_features = blk: { .perfmon, }), }; - result[@enumToInt(Feature.has_v8_1a)] = .{ + result[@intFromEnum(Feature.has_v8_1a)] = .{ .llvm_name = "v8.1a", .description = "Support ARM v8.1a instructions", .dependencies = featureSet(&[_]Feature{ .has_v8, }), }; - result[@enumToInt(Feature.has_v8_1m_main)] = .{ + result[@intFromEnum(Feature.has_v8_1m_main)] = .{ .llvm_name = "v8.1m.main", .description = "Support ARM v8-1M Mainline instructions", .dependencies = featureSet(&[_]Feature{ .has_v8m_main, }), }; - result[@enumToInt(Feature.has_v8_2a)] = .{ + result[@intFromEnum(Feature.has_v8_2a)] = .{ .llvm_name = "v8.2a", .description = "Support ARM v8.2a instructions", .dependencies = featureSet(&[_]Feature{ .has_v8_1a, }), }; - result[@enumToInt(Feature.has_v8_3a)] = .{ + result[@intFromEnum(Feature.has_v8_3a)] = .{ .llvm_name = "v8.3a", .description = "Support ARM v8.3a instructions", .dependencies = featureSet(&[_]Feature{ .has_v8_2a, }), }; - result[@enumToInt(Feature.has_v8_4a)] = .{ + result[@intFromEnum(Feature.has_v8_4a)] = .{ .llvm_name = "v8.4a", .description = "Support ARM v8.4a instructions", .dependencies = featureSet(&[_]Feature{ @@ -666,7 +666,7 @@ pub const all_features = blk: { .has_v8_3a, }), }; - result[@enumToInt(Feature.has_v8_5a)] = .{ + result[@intFromEnum(Feature.has_v8_5a)] = .{ .llvm_name = "v8.5a", .description = "Support ARM v8.5a instructions", .dependencies = featureSet(&[_]Feature{ @@ -674,7 +674,7 @@ pub const all_features = blk: { .sb, }), }; - result[@enumToInt(Feature.has_v8_6a)] = .{ + result[@intFromEnum(Feature.has_v8_6a)] = .{ .llvm_name = "v8.6a", .description = "Support ARM v8.6a instructions", .dependencies = featureSet(&[_]Feature{ @@ -683,21 +683,21 @@ pub const all_features = blk: { .i8mm, }), }; - result[@enumToInt(Feature.has_v8_7a)] = .{ + result[@intFromEnum(Feature.has_v8_7a)] = .{ .llvm_name = "v8.7a", .description = "Support ARM v8.7a instructions", .dependencies = featureSet(&[_]Feature{ .has_v8_6a, }), }; - result[@enumToInt(Feature.has_v8_8a)] = .{ + result[@intFromEnum(Feature.has_v8_8a)] = .{ .llvm_name = "v8.8a", .description = "Support ARM v8.8a instructions", .dependencies = featureSet(&[_]Feature{ .has_v8_7a, }), }; - result[@enumToInt(Feature.has_v8_9a)] = .{ + result[@intFromEnum(Feature.has_v8_9a)] = .{ .llvm_name = "v8.9a", .description = "Support ARM v8.9a instructions", .dependencies = featureSet(&[_]Feature{ @@ -705,21 +705,21 @@ pub const all_features = blk: { .has_v8_8a, }), }; - result[@enumToInt(Feature.has_v8m)] = .{ + result[@intFromEnum(Feature.has_v8m)] = .{ .llvm_name = "v8m", .description = "Support ARM v8M Baseline instructions", .dependencies = featureSet(&[_]Feature{ .has_v6m, }), }; - result[@enumToInt(Feature.has_v8m_main)] = .{ + result[@intFromEnum(Feature.has_v8m_main)] = .{ .llvm_name = "v8m.main", .description = "Support ARM v8M Mainline instructions", .dependencies = featureSet(&[_]Feature{ .has_v7, }), }; - result[@enumToInt(Feature.has_v9_1a)] = .{ + result[@intFromEnum(Feature.has_v9_1a)] = .{ .llvm_name = "v9.1a", .description = "Support ARM v9.1a instructions", .dependencies = featureSet(&[_]Feature{ @@ -727,7 +727,7 @@ pub const all_features = blk: { .has_v9a, }), }; - result[@enumToInt(Feature.has_v9_2a)] = .{ + result[@intFromEnum(Feature.has_v9_2a)] = .{ .llvm_name = "v9.2a", .description = "Support ARM v9.2a instructions", .dependencies = featureSet(&[_]Feature{ @@ -735,7 +735,7 @@ pub const all_features = blk: { .has_v9_1a, }), }; - result[@enumToInt(Feature.has_v9_3a)] = .{ + result[@intFromEnum(Feature.has_v9_3a)] = .{ .llvm_name = "v9.3a", .description = "Support ARM v9.3a instructions", .dependencies = featureSet(&[_]Feature{ @@ -743,7 +743,7 @@ pub const all_features = blk: { .has_v9_2a, }), }; - result[@enumToInt(Feature.has_v9_4a)] = .{ + result[@intFromEnum(Feature.has_v9_4a)] = .{ .llvm_name = "v9.4a", .description = "Support ARM v9.4a instructions", .dependencies = featureSet(&[_]Feature{ @@ -751,80 +751,80 @@ pub const all_features = blk: { .has_v9_3a, }), }; - result[@enumToInt(Feature.has_v9a)] = .{ + result[@intFromEnum(Feature.has_v9a)] = .{ .llvm_name = "v9a", .description = "Support ARM v9a instructions", .dependencies = featureSet(&[_]Feature{ .has_v8_5a, }), }; - result[@enumToInt(Feature.hwdiv)] = .{ + result[@intFromEnum(Feature.hwdiv)] = .{ .llvm_name = "hwdiv", .description = "Enable divide instructions in Thumb", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.hwdiv_arm)] = .{ + result[@intFromEnum(Feature.hwdiv_arm)] = .{ .llvm_name = "hwdiv-arm", .description = "Enable divide instructions in ARM mode", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.i8mm)] = .{ + result[@intFromEnum(Feature.i8mm)] = .{ .llvm_name = "i8mm", .description = "Enable Matrix Multiply Int8 Extension", .dependencies = featureSet(&[_]Feature{ .neon, }), }; - result[@enumToInt(Feature.iwmmxt)] = .{ + result[@intFromEnum(Feature.iwmmxt)] = .{ .llvm_name = "iwmmxt", .description = "ARMv5te architecture", .dependencies = featureSet(&[_]Feature{ .v5te, }), }; - result[@enumToInt(Feature.iwmmxt2)] = .{ + result[@intFromEnum(Feature.iwmmxt2)] = .{ .llvm_name = "iwmmxt2", .description = "ARMv5te architecture", .dependencies = featureSet(&[_]Feature{ .v5te, }), }; - result[@enumToInt(Feature.lob)] = .{ + result[@intFromEnum(Feature.lob)] = .{ .llvm_name = "lob", .description = "Enable Low Overhead Branch extensions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.long_calls)] = .{ + result[@intFromEnum(Feature.long_calls)] = .{ .llvm_name = "long-calls", .description = "Generate calls via indirect call instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.loop_align)] = .{ + result[@intFromEnum(Feature.loop_align)] = .{ .llvm_name = "loop-align", .description = "Prefer 32-bit alignment for loops", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.m3)] = .{ + result[@intFromEnum(Feature.m3)] = .{ .llvm_name = "m3", .description = "Cortex-M3 ARM processors", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.mclass)] = .{ + result[@intFromEnum(Feature.mclass)] = .{ .llvm_name = "mclass", .description = "Is microcontroller profile ('M' series)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.mp)] = .{ + result[@intFromEnum(Feature.mp)] = .{ .llvm_name = "mp", .description = "Supports Multiprocessing extension", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.muxed_units)] = .{ + result[@intFromEnum(Feature.muxed_units)] = .{ .llvm_name = "muxed-units", .description = "Has muxed AGU and NEON/FPU", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.mve)] = .{ + result[@intFromEnum(Feature.mve)] = .{ .llvm_name = "mve", .description = "Support M-Class Vector Extension with integer ops", .dependencies = featureSet(&[_]Feature{ @@ -834,22 +834,22 @@ pub const all_features = blk: { .has_v8_1m_main, }), }; - result[@enumToInt(Feature.mve1beat)] = .{ + result[@intFromEnum(Feature.mve1beat)] = .{ .llvm_name = "mve1beat", .description = "Model MVE instructions as a 1 beat per tick architecture", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.mve2beat)] = .{ + result[@intFromEnum(Feature.mve2beat)] = .{ .llvm_name = "mve2beat", .description = "Model MVE instructions as a 2 beats per tick architecture", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.mve4beat)] = .{ + result[@intFromEnum(Feature.mve4beat)] = .{ .llvm_name = "mve4beat", .description = "Model MVE instructions as a 4 beats per tick architecture", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.mve_fp)] = .{ + result[@intFromEnum(Feature.mve_fp)] = .{ .llvm_name = "mve.fp", .description = "Support M-Class Vector Extension with integer and floating ops", .dependencies = featureSet(&[_]Feature{ @@ -857,243 +857,243 @@ pub const all_features = blk: { .mve, }), }; - result[@enumToInt(Feature.nacl_trap)] = .{ + result[@intFromEnum(Feature.nacl_trap)] = .{ .llvm_name = "nacl-trap", .description = "NaCl trap", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.neon)] = .{ + result[@intFromEnum(Feature.neon)] = .{ .llvm_name = "neon", .description = "Enable NEON instructions", .dependencies = featureSet(&[_]Feature{ .vfp3, }), }; - result[@enumToInt(Feature.neon_fpmovs)] = .{ + result[@intFromEnum(Feature.neon_fpmovs)] = .{ .llvm_name = "neon-fpmovs", .description = "Convert VMOVSR, VMOVRS, VMOVS to NEON", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.neonfp)] = .{ + result[@intFromEnum(Feature.neonfp)] = .{ .llvm_name = "neonfp", .description = "Use NEON for single precision FP", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.no_branch_predictor)] = .{ + result[@intFromEnum(Feature.no_branch_predictor)] = .{ .llvm_name = "no-branch-predictor", .description = "Has no branch predictor", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.no_bti_at_return_twice)] = .{ + result[@intFromEnum(Feature.no_bti_at_return_twice)] = .{ .llvm_name = "no-bti-at-return-twice", .description = "Don't place a BTI instruction after a return-twice", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.no_movt)] = .{ + result[@intFromEnum(Feature.no_movt)] = .{ .llvm_name = "no-movt", .description = "Don't use movt/movw pairs for 32-bit imms", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.no_neg_immediates)] = .{ + result[@intFromEnum(Feature.no_neg_immediates)] = .{ .llvm_name = "no-neg-immediates", .description = "Convert immediates and instructions to their negated or complemented equivalent when the immediate does not fit in the encoding.", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.noarm)] = .{ + result[@intFromEnum(Feature.noarm)] = .{ .llvm_name = "noarm", .description = "Does not support ARM mode execution", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.nonpipelined_vfp)] = .{ + result[@intFromEnum(Feature.nonpipelined_vfp)] = .{ .llvm_name = "nonpipelined-vfp", .description = "VFP instructions are not pipelined", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.pacbti)] = .{ + result[@intFromEnum(Feature.pacbti)] = .{ .llvm_name = "pacbti", .description = "Enable Pointer Authentication and Branch Target Identification", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.perfmon)] = .{ + result[@intFromEnum(Feature.perfmon)] = .{ .llvm_name = "perfmon", .description = "Enable support for Performance Monitor extensions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.prefer_ishst)] = .{ + result[@intFromEnum(Feature.prefer_ishst)] = .{ .llvm_name = "prefer-ishst", .description = "Prefer ISHST barriers", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.prefer_vmovsr)] = .{ + result[@intFromEnum(Feature.prefer_vmovsr)] = .{ .llvm_name = "prefer-vmovsr", .description = "Prefer VMOVSR", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.prof_unpr)] = .{ + result[@intFromEnum(Feature.prof_unpr)] = .{ .llvm_name = "prof-unpr", .description = "Is profitable to unpredicate", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.r4)] = .{ + result[@intFromEnum(Feature.r4)] = .{ .llvm_name = "r4", .description = "Cortex-R4 ARM processors", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.ras)] = .{ + result[@intFromEnum(Feature.ras)] = .{ .llvm_name = "ras", .description = "Enable Reliability, Availability and Serviceability extensions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.rclass)] = .{ + result[@intFromEnum(Feature.rclass)] = .{ .llvm_name = "rclass", .description = "Is realtime profile ('R' series)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.read_tp_hard)] = .{ + result[@intFromEnum(Feature.read_tp_hard)] = .{ .llvm_name = "read-tp-hard", .description = "Reading thread pointer from register", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserve_r9)] = .{ + result[@intFromEnum(Feature.reserve_r9)] = .{ .llvm_name = "reserve-r9", .description = "Reserve R9, making it unavailable as GPR", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.ret_addr_stack)] = .{ + result[@intFromEnum(Feature.ret_addr_stack)] = .{ .llvm_name = "ret-addr-stack", .description = "Has return address stack", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.sb)] = .{ + result[@intFromEnum(Feature.sb)] = .{ .llvm_name = "sb", .description = "Enable v8.5a Speculation Barrier", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.sha2)] = .{ + result[@intFromEnum(Feature.sha2)] = .{ .llvm_name = "sha2", .description = "Enable SHA1 and SHA256 support", .dependencies = featureSet(&[_]Feature{ .neon, }), }; - result[@enumToInt(Feature.slow_fp_brcc)] = .{ + result[@intFromEnum(Feature.slow_fp_brcc)] = .{ .llvm_name = "slow-fp-brcc", .description = "FP compare + branch is slow", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.slow_load_D_subreg)] = .{ + result[@intFromEnum(Feature.slow_load_D_subreg)] = .{ .llvm_name = "slow-load-D-subreg", .description = "Loading into D subregs is slow", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.slow_odd_reg)] = .{ + result[@intFromEnum(Feature.slow_odd_reg)] = .{ .llvm_name = "slow-odd-reg", .description = "VLDM/VSTM starting with an odd register is slow", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.slow_vdup32)] = .{ + result[@intFromEnum(Feature.slow_vdup32)] = .{ .llvm_name = "slow-vdup32", .description = "Has slow VDUP32 - prefer VMOV", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.slow_vgetlni32)] = .{ + result[@intFromEnum(Feature.slow_vgetlni32)] = .{ .llvm_name = "slow-vgetlni32", .description = "Has slow VGETLNi32 - prefer VMOV", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.slowfpvfmx)] = .{ + result[@intFromEnum(Feature.slowfpvfmx)] = .{ .llvm_name = "slowfpvfmx", .description = "Disable VFP / NEON FMA instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.slowfpvmlx)] = .{ + result[@intFromEnum(Feature.slowfpvmlx)] = .{ .llvm_name = "slowfpvmlx", .description = "Disable VFP / NEON MAC instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.soft_float)] = .{ + result[@intFromEnum(Feature.soft_float)] = .{ .llvm_name = "soft-float", .description = "Use software floating point features.", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.splat_vfp_neon)] = .{ + result[@intFromEnum(Feature.splat_vfp_neon)] = .{ .llvm_name = "splat-vfp-neon", .description = "Splat register from VFP to NEON", .dependencies = featureSet(&[_]Feature{ .dont_widen_vmovs, }), }; - result[@enumToInt(Feature.strict_align)] = .{ + result[@intFromEnum(Feature.strict_align)] = .{ .llvm_name = "strict-align", .description = "Disallow all unaligned memory access", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.swift)] = .{ + result[@intFromEnum(Feature.swift)] = .{ .llvm_name = "swift", .description = "Swift ARM processors", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.thumb2)] = .{ + result[@intFromEnum(Feature.thumb2)] = .{ .llvm_name = "thumb2", .description = "Enable Thumb2 instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.thumb_mode)] = .{ + result[@intFromEnum(Feature.thumb_mode)] = .{ .llvm_name = "thumb-mode", .description = "Thumb mode", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.trustzone)] = .{ + result[@intFromEnum(Feature.trustzone)] = .{ .llvm_name = "trustzone", .description = "Enable support for TrustZone security extensions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.use_mipipeliner)] = .{ + result[@intFromEnum(Feature.use_mipipeliner)] = .{ .llvm_name = "use-mipipeliner", .description = "Use the MachinePipeliner", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.use_misched)] = .{ + result[@intFromEnum(Feature.use_misched)] = .{ .llvm_name = "use-misched", .description = "Use the MachineScheduler", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.v2)] = .{ + result[@intFromEnum(Feature.v2)] = .{ .llvm_name = null, .description = "ARMv2 architecture", .dependencies = featureSet(&[_]Feature{ .strict_align, }), }; - result[@enumToInt(Feature.v2a)] = .{ + result[@intFromEnum(Feature.v2a)] = .{ .llvm_name = null, .description = "ARMv2a architecture", .dependencies = featureSet(&[_]Feature{ .strict_align, }), }; - result[@enumToInt(Feature.v3)] = .{ + result[@intFromEnum(Feature.v3)] = .{ .llvm_name = null, .description = "ARMv3 architecture", .dependencies = featureSet(&[_]Feature{ .strict_align, }), }; - result[@enumToInt(Feature.v3m)] = .{ + result[@intFromEnum(Feature.v3m)] = .{ .llvm_name = null, .description = "ARMv3m architecture", .dependencies = featureSet(&[_]Feature{ .strict_align, }), }; - result[@enumToInt(Feature.v4)] = .{ + result[@intFromEnum(Feature.v4)] = .{ .llvm_name = "armv4", .description = "ARMv4 architecture", .dependencies = featureSet(&[_]Feature{ .strict_align, }), }; - result[@enumToInt(Feature.v4t)] = .{ + result[@intFromEnum(Feature.v4t)] = .{ .llvm_name = "armv4t", .description = "ARMv4t architecture", .dependencies = featureSet(&[_]Feature{ @@ -1101,7 +1101,7 @@ pub const all_features = blk: { .strict_align, }), }; - result[@enumToInt(Feature.v5t)] = .{ + result[@intFromEnum(Feature.v5t)] = .{ .llvm_name = "armv5t", .description = "ARMv5t architecture", .dependencies = featureSet(&[_]Feature{ @@ -1109,7 +1109,7 @@ pub const all_features = blk: { .strict_align, }), }; - result[@enumToInt(Feature.v5te)] = .{ + result[@intFromEnum(Feature.v5te)] = .{ .llvm_name = "armv5te", .description = "ARMv5te architecture", .dependencies = featureSet(&[_]Feature{ @@ -1117,7 +1117,7 @@ pub const all_features = blk: { .strict_align, }), }; - result[@enumToInt(Feature.v5tej)] = .{ + result[@intFromEnum(Feature.v5tej)] = .{ .llvm_name = "armv5tej", .description = "ARMv5tej architecture", .dependencies = featureSet(&[_]Feature{ @@ -1125,7 +1125,7 @@ pub const all_features = blk: { .strict_align, }), }; - result[@enumToInt(Feature.v6)] = .{ + result[@intFromEnum(Feature.v6)] = .{ .llvm_name = "armv6", .description = "ARMv6 architecture", .dependencies = featureSet(&[_]Feature{ @@ -1133,21 +1133,21 @@ pub const all_features = blk: { .has_v6, }), }; - result[@enumToInt(Feature.v6j)] = .{ + result[@intFromEnum(Feature.v6j)] = .{ .llvm_name = "armv6j", .description = "ARMv7a architecture", .dependencies = featureSet(&[_]Feature{ .v6, }), }; - result[@enumToInt(Feature.v6k)] = .{ + result[@intFromEnum(Feature.v6k)] = .{ .llvm_name = "armv6k", .description = "ARMv6k architecture", .dependencies = featureSet(&[_]Feature{ .has_v6k, }), }; - result[@enumToInt(Feature.v6kz)] = .{ + result[@intFromEnum(Feature.v6kz)] = .{ .llvm_name = "armv6kz", .description = "ARMv6kz architecture", .dependencies = featureSet(&[_]Feature{ @@ -1155,7 +1155,7 @@ pub const all_features = blk: { .trustzone, }), }; - result[@enumToInt(Feature.v6m)] = .{ + result[@intFromEnum(Feature.v6m)] = .{ .llvm_name = "armv6-m", .description = "ARMv6m architecture", .dependencies = featureSet(&[_]Feature{ @@ -1167,7 +1167,7 @@ pub const all_features = blk: { .thumb_mode, }), }; - result[@enumToInt(Feature.v6sm)] = .{ + result[@intFromEnum(Feature.v6sm)] = .{ .llvm_name = "armv6s-m", .description = "ARMv6sm architecture", .dependencies = featureSet(&[_]Feature{ @@ -1179,7 +1179,7 @@ pub const all_features = blk: { .thumb_mode, }), }; - result[@enumToInt(Feature.v6t2)] = .{ + result[@intFromEnum(Feature.v6t2)] = .{ .llvm_name = "armv6t2", .description = "ARMv6t2 architecture", .dependencies = featureSet(&[_]Feature{ @@ -1187,7 +1187,7 @@ pub const all_features = blk: { .has_v6t2, }), }; - result[@enumToInt(Feature.v7a)] = .{ + result[@intFromEnum(Feature.v7a)] = .{ .llvm_name = "armv7-a", .description = "ARMv7a architecture", .dependencies = featureSet(&[_]Feature{ @@ -1199,7 +1199,7 @@ pub const all_features = blk: { .perfmon, }), }; - result[@enumToInt(Feature.v7em)] = .{ + result[@intFromEnum(Feature.v7em)] = .{ .llvm_name = "armv7e-m", .description = "ARMv7em architecture", .dependencies = featureSet(&[_]Feature{ @@ -1212,14 +1212,14 @@ pub const all_features = blk: { .thumb_mode, }), }; - result[@enumToInt(Feature.v7k)] = .{ + result[@intFromEnum(Feature.v7k)] = .{ .llvm_name = "armv7k", .description = "ARMv7a architecture", .dependencies = featureSet(&[_]Feature{ .v7a, }), }; - result[@enumToInt(Feature.v7m)] = .{ + result[@intFromEnum(Feature.v7m)] = .{ .llvm_name = "armv7-m", .description = "ARMv7m architecture", .dependencies = featureSet(&[_]Feature{ @@ -1231,7 +1231,7 @@ pub const all_features = blk: { .thumb_mode, }), }; - result[@enumToInt(Feature.v7r)] = .{ + result[@intFromEnum(Feature.v7r)] = .{ .llvm_name = "armv7-r", .description = "ARMv7r architecture", .dependencies = featureSet(&[_]Feature{ @@ -1243,14 +1243,14 @@ pub const all_features = blk: { .rclass, }), }; - result[@enumToInt(Feature.v7s)] = .{ + result[@intFromEnum(Feature.v7s)] = .{ .llvm_name = "armv7s", .description = "ARMv7a architecture", .dependencies = featureSet(&[_]Feature{ .v7a, }), }; - result[@enumToInt(Feature.v7ve)] = .{ + result[@intFromEnum(Feature.v7ve)] = .{ .llvm_name = "armv7ve", .description = "ARMv7ve architecture", .dependencies = featureSet(&[_]Feature{ @@ -1265,7 +1265,7 @@ pub const all_features = blk: { .virtualization, }), }; - result[@enumToInt(Feature.v8_1a)] = .{ + result[@intFromEnum(Feature.v8_1a)] = .{ .llvm_name = "armv8.1-a", .description = "ARMv81a architecture", .dependencies = featureSet(&[_]Feature{ @@ -1281,7 +1281,7 @@ pub const all_features = blk: { .virtualization, }), }; - result[@enumToInt(Feature.v8_1m_main)] = .{ + result[@intFromEnum(Feature.v8_1m_main)] = .{ .llvm_name = "armv8.1-m.main", .description = "ARMv81mMainline architecture", .dependencies = featureSet(&[_]Feature{ @@ -1297,7 +1297,7 @@ pub const all_features = blk: { .thumb_mode, }), }; - result[@enumToInt(Feature.v8_2a)] = .{ + result[@intFromEnum(Feature.v8_2a)] = .{ .llvm_name = "armv8.2-a", .description = "ARMv82a architecture", .dependencies = featureSet(&[_]Feature{ @@ -1314,7 +1314,7 @@ pub const all_features = blk: { .virtualization, }), }; - result[@enumToInt(Feature.v8_3a)] = .{ + result[@intFromEnum(Feature.v8_3a)] = .{ .llvm_name = "armv8.3-a", .description = "ARMv83a architecture", .dependencies = featureSet(&[_]Feature{ @@ -1331,7 +1331,7 @@ pub const all_features = blk: { .virtualization, }), }; - result[@enumToInt(Feature.v8_4a)] = .{ + result[@intFromEnum(Feature.v8_4a)] = .{ .llvm_name = "armv8.4-a", .description = "ARMv84a architecture", .dependencies = featureSet(&[_]Feature{ @@ -1348,7 +1348,7 @@ pub const all_features = blk: { .virtualization, }), }; - result[@enumToInt(Feature.v8_5a)] = .{ + result[@intFromEnum(Feature.v8_5a)] = .{ .llvm_name = "armv8.5-a", .description = "ARMv85a architecture", .dependencies = featureSet(&[_]Feature{ @@ -1365,7 +1365,7 @@ pub const all_features = blk: { .virtualization, }), }; - result[@enumToInt(Feature.v8_6a)] = .{ + result[@intFromEnum(Feature.v8_6a)] = .{ .llvm_name = "armv8.6-a", .description = "ARMv86a architecture", .dependencies = featureSet(&[_]Feature{ @@ -1382,7 +1382,7 @@ pub const all_features = blk: { .virtualization, }), }; - result[@enumToInt(Feature.v8_7a)] = .{ + result[@intFromEnum(Feature.v8_7a)] = .{ .llvm_name = "armv8.7-a", .description = "ARMv87a architecture", .dependencies = featureSet(&[_]Feature{ @@ -1399,7 +1399,7 @@ pub const all_features = blk: { .virtualization, }), }; - result[@enumToInt(Feature.v8_8a)] = .{ + result[@intFromEnum(Feature.v8_8a)] = .{ .llvm_name = "armv8.8-a", .description = "ARMv88a architecture", .dependencies = featureSet(&[_]Feature{ @@ -1416,7 +1416,7 @@ pub const all_features = blk: { .virtualization, }), }; - result[@enumToInt(Feature.v8_9a)] = .{ + result[@intFromEnum(Feature.v8_9a)] = .{ .llvm_name = "armv8.9-a", .description = "ARMv89a architecture", .dependencies = featureSet(&[_]Feature{ @@ -1433,7 +1433,7 @@ pub const all_features = blk: { .virtualization, }), }; - result[@enumToInt(Feature.v8a)] = .{ + result[@intFromEnum(Feature.v8a)] = .{ .llvm_name = "armv8-a", .description = "ARMv8a architecture", .dependencies = featureSet(&[_]Feature{ @@ -1449,7 +1449,7 @@ pub const all_features = blk: { .virtualization, }), }; - result[@enumToInt(Feature.v8m)] = .{ + result[@intFromEnum(Feature.v8m)] = .{ .llvm_name = "armv8-m.base", .description = "ARMv8mBaseline architecture", .dependencies = featureSet(&[_]Feature{ @@ -1465,7 +1465,7 @@ pub const all_features = blk: { .thumb_mode, }), }; - result[@enumToInt(Feature.v8m_main)] = .{ + result[@intFromEnum(Feature.v8m_main)] = .{ .llvm_name = "armv8-m.main", .description = "ARMv8mMainline architecture", .dependencies = featureSet(&[_]Feature{ @@ -1479,7 +1479,7 @@ pub const all_features = blk: { .thumb_mode, }), }; - result[@enumToInt(Feature.v8r)] = .{ + result[@intFromEnum(Feature.v8r)] = .{ .llvm_name = "armv8-r", .description = "ARMv8r architecture", .dependencies = featureSet(&[_]Feature{ @@ -1495,7 +1495,7 @@ pub const all_features = blk: { .virtualization, }), }; - result[@enumToInt(Feature.v9_1a)] = .{ + result[@intFromEnum(Feature.v9_1a)] = .{ .llvm_name = "armv9.1-a", .description = "ARMv91a architecture", .dependencies = featureSet(&[_]Feature{ @@ -1511,7 +1511,7 @@ pub const all_features = blk: { .virtualization, }), }; - result[@enumToInt(Feature.v9_2a)] = .{ + result[@intFromEnum(Feature.v9_2a)] = .{ .llvm_name = "armv9.2-a", .description = "ARMv92a architecture", .dependencies = featureSet(&[_]Feature{ @@ -1527,7 +1527,7 @@ pub const all_features = blk: { .virtualization, }), }; - result[@enumToInt(Feature.v9_3a)] = .{ + result[@intFromEnum(Feature.v9_3a)] = .{ .llvm_name = "armv9.3-a", .description = "ARMv93a architecture", .dependencies = featureSet(&[_]Feature{ @@ -1544,7 +1544,7 @@ pub const all_features = blk: { .virtualization, }), }; - result[@enumToInt(Feature.v9_4a)] = .{ + result[@intFromEnum(Feature.v9_4a)] = .{ .llvm_name = "armv9.4-a", .description = "ARMv94a architecture", .dependencies = featureSet(&[_]Feature{ @@ -1560,7 +1560,7 @@ pub const all_features = blk: { .virtualization, }), }; - result[@enumToInt(Feature.v9a)] = .{ + result[@intFromEnum(Feature.v9a)] = .{ .llvm_name = "armv9-a", .description = "ARMv9a architecture", .dependencies = featureSet(&[_]Feature{ @@ -1576,7 +1576,7 @@ pub const all_features = blk: { .virtualization, }), }; - result[@enumToInt(Feature.vfp2)] = .{ + result[@intFromEnum(Feature.vfp2)] = .{ .llvm_name = "vfp2", .description = "Enable VFP2 instructions", .dependencies = featureSet(&[_]Feature{ @@ -1584,14 +1584,14 @@ pub const all_features = blk: { .vfp2sp, }), }; - result[@enumToInt(Feature.vfp2sp)] = .{ + result[@intFromEnum(Feature.vfp2sp)] = .{ .llvm_name = "vfp2sp", .description = "Enable VFP2 instructions with no double precision", .dependencies = featureSet(&[_]Feature{ .fpregs, }), }; - result[@enumToInt(Feature.vfp3)] = .{ + result[@intFromEnum(Feature.vfp3)] = .{ .llvm_name = "vfp3", .description = "Enable VFP3 instructions", .dependencies = featureSet(&[_]Feature{ @@ -1599,7 +1599,7 @@ pub const all_features = blk: { .vfp3sp, }), }; - result[@enumToInt(Feature.vfp3d16)] = .{ + result[@intFromEnum(Feature.vfp3d16)] = .{ .llvm_name = "vfp3d16", .description = "Enable VFP3 instructions with only 16 d-registers", .dependencies = featureSet(&[_]Feature{ @@ -1607,14 +1607,14 @@ pub const all_features = blk: { .vfp3d16sp, }), }; - result[@enumToInt(Feature.vfp3d16sp)] = .{ + result[@intFromEnum(Feature.vfp3d16sp)] = .{ .llvm_name = "vfp3d16sp", .description = "Enable VFP3 instructions with only 16 d-registers and no double precision", .dependencies = featureSet(&[_]Feature{ .vfp2sp, }), }; - result[@enumToInt(Feature.vfp3sp)] = .{ + result[@intFromEnum(Feature.vfp3sp)] = .{ .llvm_name = "vfp3sp", .description = "Enable VFP3 instructions with no double precision", .dependencies = featureSet(&[_]Feature{ @@ -1622,7 +1622,7 @@ pub const all_features = blk: { .vfp3d16sp, }), }; - result[@enumToInt(Feature.vfp4)] = .{ + result[@intFromEnum(Feature.vfp4)] = .{ .llvm_name = "vfp4", .description = "Enable VFP4 instructions", .dependencies = featureSet(&[_]Feature{ @@ -1631,7 +1631,7 @@ pub const all_features = blk: { .vfp4sp, }), }; - result[@enumToInt(Feature.vfp4d16)] = .{ + result[@intFromEnum(Feature.vfp4d16)] = .{ .llvm_name = "vfp4d16", .description = "Enable VFP4 instructions with only 16 d-registers", .dependencies = featureSet(&[_]Feature{ @@ -1639,7 +1639,7 @@ pub const all_features = blk: { .vfp4d16sp, }), }; - result[@enumToInt(Feature.vfp4d16sp)] = .{ + result[@intFromEnum(Feature.vfp4d16sp)] = .{ .llvm_name = "vfp4d16sp", .description = "Enable VFP4 instructions with only 16 d-registers and no double precision", .dependencies = featureSet(&[_]Feature{ @@ -1647,7 +1647,7 @@ pub const all_features = blk: { .vfp3d16sp, }), }; - result[@enumToInt(Feature.vfp4sp)] = .{ + result[@intFromEnum(Feature.vfp4sp)] = .{ .llvm_name = "vfp4sp", .description = "Enable VFP4 instructions with no double precision", .dependencies = featureSet(&[_]Feature{ @@ -1655,7 +1655,7 @@ pub const all_features = blk: { .vfp4d16sp, }), }; - result[@enumToInt(Feature.virtualization)] = .{ + result[@intFromEnum(Feature.virtualization)] = .{ .llvm_name = "virtualization", .description = "Supports Virtualization extension", .dependencies = featureSet(&[_]Feature{ @@ -1663,34 +1663,34 @@ pub const all_features = blk: { .hwdiv_arm, }), }; - result[@enumToInt(Feature.vldn_align)] = .{ + result[@intFromEnum(Feature.vldn_align)] = .{ .llvm_name = "vldn-align", .description = "Check for VLDn unaligned access", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.vmlx_forwarding)] = .{ + result[@intFromEnum(Feature.vmlx_forwarding)] = .{ .llvm_name = "vmlx-forwarding", .description = "Has multiplier accumulator forwarding", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.vmlx_hazards)] = .{ + result[@intFromEnum(Feature.vmlx_hazards)] = .{ .llvm_name = "vmlx-hazards", .description = "Has VMLx hazards", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.wide_stride_vfp)] = .{ + result[@intFromEnum(Feature.wide_stride_vfp)] = .{ .llvm_name = "wide-stride-vfp", .description = "Use a wide stride when allocating VFP registers", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.xscale)] = .{ + result[@intFromEnum(Feature.xscale)] = .{ .llvm_name = "xscale", .description = "ARMv5te architecture", .dependencies = featureSet(&[_]Feature{ .v5te, }), }; - result[@enumToInt(Feature.zcz)] = .{ + result[@intFromEnum(Feature.zcz)] = .{ .llvm_name = "zcz", .description = "Has zero-cycle zeroing instructions", .dependencies = featureSet(&[_]Feature{}), diff --git a/lib/std/target/avr.zig b/lib/std/target/avr.zig index e670682ff9..a39475cb2a 100644 --- a/lib/std/target/avr.zig +++ b/lib/std/target/avr.zig @@ -52,17 +52,17 @@ pub const all_features = blk: { const len = @typeInfo(Feature).Enum.fields.len; std.debug.assert(len <= CpuFeature.Set.needed_bit_count); var result: [len]CpuFeature = undefined; - result[@enumToInt(Feature.addsubiw)] = .{ + result[@intFromEnum(Feature.addsubiw)] = .{ .llvm_name = "addsubiw", .description = "Enable 16-bit register-immediate addition and subtraction instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.avr0)] = .{ + result[@intFromEnum(Feature.avr0)] = .{ .llvm_name = "avr0", .description = "The device is a part of the avr0 family", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.avr1)] = .{ + result[@intFromEnum(Feature.avr1)] = .{ .llvm_name = "avr1", .description = "The device is a part of the avr1 family", .dependencies = featureSet(&[_]Feature{ @@ -72,7 +72,7 @@ pub const all_features = blk: { .progmem, }), }; - result[@enumToInt(Feature.avr2)] = .{ + result[@intFromEnum(Feature.avr2)] = .{ .llvm_name = "avr2", .description = "The device is a part of the avr2 family", .dependencies = featureSet(&[_]Feature{ @@ -82,7 +82,7 @@ pub const all_features = blk: { .sram, }), }; - result[@enumToInt(Feature.avr25)] = .{ + result[@intFromEnum(Feature.avr25)] = .{ .llvm_name = "avr25", .description = "The device is a part of the avr25 family", .dependencies = featureSet(&[_]Feature{ @@ -93,7 +93,7 @@ pub const all_features = blk: { .spm, }), }; - result[@enumToInt(Feature.avr3)] = .{ + result[@intFromEnum(Feature.avr3)] = .{ .llvm_name = "avr3", .description = "The device is a part of the avr3 family", .dependencies = featureSet(&[_]Feature{ @@ -101,7 +101,7 @@ pub const all_features = blk: { .jmpcall, }), }; - result[@enumToInt(Feature.avr31)] = .{ + result[@intFromEnum(Feature.avr31)] = .{ .llvm_name = "avr31", .description = "The device is a part of the avr31 family", .dependencies = featureSet(&[_]Feature{ @@ -109,7 +109,7 @@ pub const all_features = blk: { .elpm, }), }; - result[@enumToInt(Feature.avr35)] = .{ + result[@intFromEnum(Feature.avr35)] = .{ .llvm_name = "avr35", .description = "The device is a part of the avr35 family", .dependencies = featureSet(&[_]Feature{ @@ -120,7 +120,7 @@ pub const all_features = blk: { .spm, }), }; - result[@enumToInt(Feature.avr4)] = .{ + result[@intFromEnum(Feature.avr4)] = .{ .llvm_name = "avr4", .description = "The device is a part of the avr4 family", .dependencies = featureSet(&[_]Feature{ @@ -132,7 +132,7 @@ pub const all_features = blk: { .spm, }), }; - result[@enumToInt(Feature.avr5)] = .{ + result[@intFromEnum(Feature.avr5)] = .{ .llvm_name = "avr5", .description = "The device is a part of the avr5 family", .dependencies = featureSet(&[_]Feature{ @@ -144,7 +144,7 @@ pub const all_features = blk: { .spm, }), }; - result[@enumToInt(Feature.avr51)] = .{ + result[@intFromEnum(Feature.avr51)] = .{ .llvm_name = "avr51", .description = "The device is a part of the avr51 family", .dependencies = featureSet(&[_]Feature{ @@ -153,7 +153,7 @@ pub const all_features = blk: { .elpmx, }), }; - result[@enumToInt(Feature.avr6)] = .{ + result[@intFromEnum(Feature.avr6)] = .{ .llvm_name = "avr6", .description = "The device is a part of the avr6 family", .dependencies = featureSet(&[_]Feature{ @@ -161,7 +161,7 @@ pub const all_features = blk: { .eijmpcall, }), }; - result[@enumToInt(Feature.avrtiny)] = .{ + result[@intFromEnum(Feature.avrtiny)] = .{ .llvm_name = "avrtiny", .description = "The device is a part of the avrtiny family", .dependencies = featureSet(&[_]Feature{ @@ -172,82 +172,82 @@ pub const all_features = blk: { .tinyencoding, }), }; - result[@enumToInt(Feature.@"break")] = .{ + result[@intFromEnum(Feature.@"break")] = .{ .llvm_name = "break", .description = "The device supports the `BREAK` debugging instruction", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.des)] = .{ + result[@intFromEnum(Feature.des)] = .{ .llvm_name = "des", .description = "The device supports the `DES k` encryption instruction", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.eijmpcall)] = .{ + result[@intFromEnum(Feature.eijmpcall)] = .{ .llvm_name = "eijmpcall", .description = "The device supports the `EIJMP`/`EICALL` instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.elpm)] = .{ + result[@intFromEnum(Feature.elpm)] = .{ .llvm_name = "elpm", .description = "The device supports the ELPM instruction", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.elpmx)] = .{ + result[@intFromEnum(Feature.elpmx)] = .{ .llvm_name = "elpmx", .description = "The device supports the `ELPM Rd, Z[+]` instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.ijmpcall)] = .{ + result[@intFromEnum(Feature.ijmpcall)] = .{ .llvm_name = "ijmpcall", .description = "The device supports `IJMP`/`ICALL`instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.jmpcall)] = .{ + result[@intFromEnum(Feature.jmpcall)] = .{ .llvm_name = "jmpcall", .description = "The device supports the `JMP` and `CALL` instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.lpm)] = .{ + result[@intFromEnum(Feature.lpm)] = .{ .llvm_name = "lpm", .description = "The device supports the `LPM` instruction", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.lpmx)] = .{ + result[@intFromEnum(Feature.lpmx)] = .{ .llvm_name = "lpmx", .description = "The device supports the `LPM Rd, Z[+]` instruction", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.memmappedregs)] = .{ + result[@intFromEnum(Feature.memmappedregs)] = .{ .llvm_name = "memmappedregs", .description = "The device has CPU registers mapped in data address space", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.movw)] = .{ + result[@intFromEnum(Feature.movw)] = .{ .llvm_name = "movw", .description = "The device supports the 16-bit MOVW instruction", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.mul)] = .{ + result[@intFromEnum(Feature.mul)] = .{ .llvm_name = "mul", .description = "The device supports the multiplication instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.progmem)] = .{ + result[@intFromEnum(Feature.progmem)] = .{ .llvm_name = "progmem", .description = "The device has a separate flash namespace", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.rmw)] = .{ + result[@intFromEnum(Feature.rmw)] = .{ .llvm_name = "rmw", .description = "The device supports the read-write-modify instructions: XCH, LAS, LAC, LAT", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.smallstack)] = .{ + result[@intFromEnum(Feature.smallstack)] = .{ .llvm_name = "smallstack", .description = "The device has an 8-bit stack pointer", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.special)] = .{ + result[@intFromEnum(Feature.special)] = .{ .llvm_name = "special", .description = "Enable use of the entire instruction set - used for debugging", .dependencies = featureSet(&[_]Feature{ @@ -270,27 +270,27 @@ pub const all_features = blk: { .sram, }), }; - result[@enumToInt(Feature.spm)] = .{ + result[@intFromEnum(Feature.spm)] = .{ .llvm_name = "spm", .description = "The device supports the `SPM` instruction", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.spmx)] = .{ + result[@intFromEnum(Feature.spmx)] = .{ .llvm_name = "spmx", .description = "The device supports the `SPM Z+` instruction", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.sram)] = .{ + result[@intFromEnum(Feature.sram)] = .{ .llvm_name = "sram", .description = "The device has random access memory", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.tinyencoding)] = .{ + result[@intFromEnum(Feature.tinyencoding)] = .{ .llvm_name = "tinyencoding", .description = "The device has Tiny core specific instruction encodings", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.xmega)] = .{ + result[@intFromEnum(Feature.xmega)] = .{ .llvm_name = "xmega", .description = "The device is a part of the xmega family", .dependencies = featureSet(&[_]Feature{ @@ -313,7 +313,7 @@ pub const all_features = blk: { .sram, }), }; - result[@enumToInt(Feature.xmega3)] = .{ + result[@intFromEnum(Feature.xmega3)] = .{ .llvm_name = "xmega3", .description = "The device is a part of the xmega3 family", .dependencies = featureSet(&[_]Feature{ @@ -330,7 +330,7 @@ pub const all_features = blk: { .sram, }), }; - result[@enumToInt(Feature.xmegau)] = .{ + result[@intFromEnum(Feature.xmegau)] = .{ .llvm_name = "xmegau", .description = "The device is a part of the xmegau family", .dependencies = featureSet(&[_]Feature{ diff --git a/lib/std/target/bpf.zig b/lib/std/target/bpf.zig index 82503c11a4..35f4aac57f 100644 --- a/lib/std/target/bpf.zig +++ b/lib/std/target/bpf.zig @@ -19,17 +19,17 @@ pub const all_features = blk: { const len = @typeInfo(Feature).Enum.fields.len; std.debug.assert(len <= CpuFeature.Set.needed_bit_count); var result: [len]CpuFeature = undefined; - result[@enumToInt(Feature.alu32)] = .{ + result[@intFromEnum(Feature.alu32)] = .{ .llvm_name = "alu32", .description = "Enable ALU32 instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.dummy)] = .{ + result[@intFromEnum(Feature.dummy)] = .{ .llvm_name = "dummy", .description = "unused feature", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.dwarfris)] = .{ + result[@intFromEnum(Feature.dwarfris)] = .{ .llvm_name = "dwarfris", .description = "Disable MCAsmInfo DwarfUsesRelocationsAcrossSections", .dependencies = featureSet(&[_]Feature{}), diff --git a/lib/std/target/csky.zig b/lib/std/target/csky.zig index 0a2812c6d9..ef153a2708 100644 --- a/lib/std/target/csky.zig +++ b/lib/std/target/csky.zig @@ -79,26 +79,26 @@ pub const all_features = blk: { const len = @typeInfo(Feature).Enum.fields.len; std.debug.assert(len <= CpuFeature.Set.needed_bit_count); var result: [len]CpuFeature = undefined; - result[@enumToInt(Feature.@"10e60")] = .{ + result[@intFromEnum(Feature.@"10e60")] = .{ .llvm_name = "10e60", .description = "Support CSKY 10e60 instructions", .dependencies = featureSet(&[_]Feature{ .@"7e10", }), }; - result[@enumToInt(Feature.@"2e3")] = .{ + result[@intFromEnum(Feature.@"2e3")] = .{ .llvm_name = "2e3", .description = "Support CSKY 2e3 instructions", .dependencies = featureSet(&[_]Feature{ .e2, }), }; - result[@enumToInt(Feature.@"3e3r1")] = .{ + result[@intFromEnum(Feature.@"3e3r1")] = .{ .llvm_name = "3e3r1", .description = "Support CSKY 3e3r1 instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.@"3e3r2")] = .{ + result[@intFromEnum(Feature.@"3e3r2")] = .{ .llvm_name = "3e3r2", .description = "Support CSKY 3e3r2 instructions", .dependencies = featureSet(&[_]Feature{ @@ -106,311 +106,311 @@ pub const all_features = blk: { .doloop, }), }; - result[@enumToInt(Feature.@"3e3r3")] = .{ + result[@intFromEnum(Feature.@"3e3r3")] = .{ .llvm_name = "3e3r3", .description = "Support CSKY 3e3r3 instructions", .dependencies = featureSet(&[_]Feature{ .doloop, }), }; - result[@enumToInt(Feature.@"3e7")] = .{ + result[@intFromEnum(Feature.@"3e7")] = .{ .llvm_name = "3e7", .description = "Support CSKY 3e7 instructions", .dependencies = featureSet(&[_]Feature{ .@"2e3", }), }; - result[@enumToInt(Feature.@"7e10")] = .{ + result[@intFromEnum(Feature.@"7e10")] = .{ .llvm_name = "7e10", .description = "Support CSKY 7e10 instructions", .dependencies = featureSet(&[_]Feature{ .@"3e7", }), }; - result[@enumToInt(Feature.btst16)] = .{ + result[@intFromEnum(Feature.btst16)] = .{ .llvm_name = "btst16", .description = "Use the 16-bit btsti instruction", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.cache)] = .{ + result[@intFromEnum(Feature.cache)] = .{ .llvm_name = "cache", .description = "Enable cache", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.ccrt)] = .{ + result[@intFromEnum(Feature.ccrt)] = .{ .llvm_name = "ccrt", .description = "Use CSKY compiler runtime", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.ck801)] = .{ + result[@intFromEnum(Feature.ck801)] = .{ .llvm_name = "ck801", .description = "CSKY ck801 processors", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.ck802)] = .{ + result[@intFromEnum(Feature.ck802)] = .{ .llvm_name = "ck802", .description = "CSKY ck802 processors", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.ck803)] = .{ + result[@intFromEnum(Feature.ck803)] = .{ .llvm_name = "ck803", .description = "CSKY ck803 processors", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.ck803s)] = .{ + result[@intFromEnum(Feature.ck803s)] = .{ .llvm_name = "ck803s", .description = "CSKY ck803s processors", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.ck804)] = .{ + result[@intFromEnum(Feature.ck804)] = .{ .llvm_name = "ck804", .description = "CSKY ck804 processors", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.ck805)] = .{ + result[@intFromEnum(Feature.ck805)] = .{ .llvm_name = "ck805", .description = "CSKY ck805 processors", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.ck807)] = .{ + result[@intFromEnum(Feature.ck807)] = .{ .llvm_name = "ck807", .description = "CSKY ck807 processors", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.ck810)] = .{ + result[@intFromEnum(Feature.ck810)] = .{ .llvm_name = "ck810", .description = "CSKY ck810 processors", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.ck810v)] = .{ + result[@intFromEnum(Feature.ck810v)] = .{ .llvm_name = "ck810v", .description = "CSKY ck810v processors", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.ck860)] = .{ + result[@intFromEnum(Feature.ck860)] = .{ .llvm_name = "ck860", .description = "CSKY ck860 processors", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.ck860v)] = .{ + result[@intFromEnum(Feature.ck860v)] = .{ .llvm_name = "ck860v", .description = "CSKY ck860v processors", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.constpool)] = .{ + result[@intFromEnum(Feature.constpool)] = .{ .llvm_name = "constpool", .description = "Dump the constant pool by compiler", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.doloop)] = .{ + result[@intFromEnum(Feature.doloop)] = .{ .llvm_name = "doloop", .description = "Enable doloop instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.dsp1e2)] = .{ + result[@intFromEnum(Feature.dsp1e2)] = .{ .llvm_name = "dsp1e2", .description = "Support CSKY dsp1e2 instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.dsp_silan)] = .{ + result[@intFromEnum(Feature.dsp_silan)] = .{ .llvm_name = "dsp_silan", .description = "Enable DSP Silan instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.dspe60)] = .{ + result[@intFromEnum(Feature.dspe60)] = .{ .llvm_name = "dspe60", .description = "Support CSKY dspe60 instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.dspv2)] = .{ + result[@intFromEnum(Feature.dspv2)] = .{ .llvm_name = "dspv2", .description = "Enable DSP V2.0 instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.e1)] = .{ + result[@intFromEnum(Feature.e1)] = .{ .llvm_name = "e1", .description = "Support CSKY e1 instructions", .dependencies = featureSet(&[_]Feature{ .elrw, }), }; - result[@enumToInt(Feature.e2)] = .{ + result[@intFromEnum(Feature.e2)] = .{ .llvm_name = "e2", .description = "Support CSKY e2 instructions", .dependencies = featureSet(&[_]Feature{ .e1, }), }; - result[@enumToInt(Feature.edsp)] = .{ + result[@intFromEnum(Feature.edsp)] = .{ .llvm_name = "edsp", .description = "Enable DSP instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.elrw)] = .{ + result[@intFromEnum(Feature.elrw)] = .{ .llvm_name = "elrw", .description = "Use the extend LRW instruction", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.fdivdu)] = .{ + result[@intFromEnum(Feature.fdivdu)] = .{ .llvm_name = "fdivdu", .description = "Enable float divide instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.float1e2)] = .{ + result[@intFromEnum(Feature.float1e2)] = .{ .llvm_name = "float1e2", .description = "Support CSKY float1e2 instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.float1e3)] = .{ + result[@intFromEnum(Feature.float1e3)] = .{ .llvm_name = "float1e3", .description = "Support CSKY float1e3 instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.float3e4)] = .{ + result[@intFromEnum(Feature.float3e4)] = .{ .llvm_name = "float3e4", .description = "Support CSKY float3e4 instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.float7e60)] = .{ + result[@intFromEnum(Feature.float7e60)] = .{ .llvm_name = "float7e60", .description = "Support CSKY float7e60 instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.floate1)] = .{ + result[@intFromEnum(Feature.floate1)] = .{ .llvm_name = "floate1", .description = "Support CSKY floate1 instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.fpuv2_df)] = .{ + result[@intFromEnum(Feature.fpuv2_df)] = .{ .llvm_name = "fpuv2_df", .description = "Enable FPUv2 double float instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.fpuv2_sf)] = .{ + result[@intFromEnum(Feature.fpuv2_sf)] = .{ .llvm_name = "fpuv2_sf", .description = "Enable FPUv2 single float instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.fpuv3_df)] = .{ + result[@intFromEnum(Feature.fpuv3_df)] = .{ .llvm_name = "fpuv3_df", .description = "Enable FPUv3 double float instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.fpuv3_hf)] = .{ + result[@intFromEnum(Feature.fpuv3_hf)] = .{ .llvm_name = "fpuv3_hf", .description = "Enable FPUv3 harf precision operate instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.fpuv3_hi)] = .{ + result[@intFromEnum(Feature.fpuv3_hi)] = .{ .llvm_name = "fpuv3_hi", .description = "Enable FPUv3 harf word converting instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.fpuv3_sf)] = .{ + result[@intFromEnum(Feature.fpuv3_sf)] = .{ .llvm_name = "fpuv3_sf", .description = "Enable FPUv3 single float instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.hard_float)] = .{ + result[@intFromEnum(Feature.hard_float)] = .{ .llvm_name = "hard-float", .description = "Use hard floating point features", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.hard_float_abi)] = .{ + result[@intFromEnum(Feature.hard_float_abi)] = .{ .llvm_name = "hard-float-abi", .description = "Use hard floating point ABI to pass args", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.hard_tp)] = .{ + result[@intFromEnum(Feature.hard_tp)] = .{ .llvm_name = "hard-tp", .description = "Enable TLS Pointer register", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.high_registers)] = .{ + result[@intFromEnum(Feature.high_registers)] = .{ .llvm_name = "high-registers", .description = "Enable r16-r31 registers", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.hwdiv)] = .{ + result[@intFromEnum(Feature.hwdiv)] = .{ .llvm_name = "hwdiv", .description = "Enable divide instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.istack)] = .{ + result[@intFromEnum(Feature.istack)] = .{ .llvm_name = "istack", .description = "Enable interrupt attribute", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.java)] = .{ + result[@intFromEnum(Feature.java)] = .{ .llvm_name = "java", .description = "Enable java instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.mp)] = .{ + result[@intFromEnum(Feature.mp)] = .{ .llvm_name = "mp", .description = "Support CSKY mp instructions", .dependencies = featureSet(&[_]Feature{ .@"2e3", }), }; - result[@enumToInt(Feature.mp1e2)] = .{ + result[@intFromEnum(Feature.mp1e2)] = .{ .llvm_name = "mp1e2", .description = "Support CSKY mp1e2 instructions", .dependencies = featureSet(&[_]Feature{ .@"3e7", }), }; - result[@enumToInt(Feature.multiple_stld)] = .{ + result[@intFromEnum(Feature.multiple_stld)] = .{ .llvm_name = "multiple_stld", .description = "Enable multiple load/store instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.nvic)] = .{ + result[@intFromEnum(Feature.nvic)] = .{ .llvm_name = "nvic", .description = "Enable NVIC", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.pushpop)] = .{ + result[@intFromEnum(Feature.pushpop)] = .{ .llvm_name = "pushpop", .description = "Enable push/pop instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.smart)] = .{ + result[@intFromEnum(Feature.smart)] = .{ .llvm_name = "smart", .description = "Let CPU work in Smart Mode", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.soft_tp)] = .{ + result[@intFromEnum(Feature.soft_tp)] = .{ .llvm_name = "soft-tp", .description = "Disable TLS Pointer register", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.stack_size)] = .{ + result[@intFromEnum(Feature.stack_size)] = .{ .llvm_name = "stack-size", .description = "Output stack size information", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.trust)] = .{ + result[@intFromEnum(Feature.trust)] = .{ .llvm_name = "trust", .description = "Enable trust instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.vdsp2e3)] = .{ + result[@intFromEnum(Feature.vdsp2e3)] = .{ .llvm_name = "vdsp2e3", .description = "Support CSKY vdsp2e3 instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.vdsp2e60f)] = .{ + result[@intFromEnum(Feature.vdsp2e60f)] = .{ .llvm_name = "vdsp2e60f", .description = "Support CSKY vdsp2e60f instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.vdspv1)] = .{ + result[@intFromEnum(Feature.vdspv1)] = .{ .llvm_name = "vdspv1", .description = "Enable 128bit vdsp-v1 instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.vdspv2)] = .{ + result[@intFromEnum(Feature.vdspv2)] = .{ .llvm_name = "vdspv2", .description = "Enable vdsp-v2 instructions", .dependencies = featureSet(&[_]Feature{}), diff --git a/lib/std/target/hexagon.zig b/lib/std/target/hexagon.zig index fb075513bb..c84b2cb0c8 100644 --- a/lib/std/target/hexagon.zig +++ b/lib/std/target/hexagon.zig @@ -58,77 +58,77 @@ pub const all_features = blk: { const len = @typeInfo(Feature).Enum.fields.len; std.debug.assert(len <= CpuFeature.Set.needed_bit_count); var result: [len]CpuFeature = undefined; - result[@enumToInt(Feature.audio)] = .{ + result[@intFromEnum(Feature.audio)] = .{ .llvm_name = "audio", .description = "Hexagon Audio extension instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.cabac)] = .{ + result[@intFromEnum(Feature.cabac)] = .{ .llvm_name = "cabac", .description = "Emit the CABAC instruction", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.compound)] = .{ + result[@intFromEnum(Feature.compound)] = .{ .llvm_name = "compound", .description = "Use compound instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.duplex)] = .{ + result[@intFromEnum(Feature.duplex)] = .{ .llvm_name = "duplex", .description = "Enable generation of duplex instruction", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.hvx)] = .{ + result[@intFromEnum(Feature.hvx)] = .{ .llvm_name = "hvx", .description = "Hexagon HVX instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.hvx_ieee_fp)] = .{ + result[@intFromEnum(Feature.hvx_ieee_fp)] = .{ .llvm_name = "hvx-ieee-fp", .description = "Hexagon HVX IEEE floating point instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.hvx_length128b)] = .{ + result[@intFromEnum(Feature.hvx_length128b)] = .{ .llvm_name = "hvx-length128b", .description = "Hexagon HVX 128B instructions", .dependencies = featureSet(&[_]Feature{ .hvx, }), }; - result[@enumToInt(Feature.hvx_length64b)] = .{ + result[@intFromEnum(Feature.hvx_length64b)] = .{ .llvm_name = "hvx-length64b", .description = "Hexagon HVX 64B instructions", .dependencies = featureSet(&[_]Feature{ .hvx, }), }; - result[@enumToInt(Feature.hvx_qfloat)] = .{ + result[@intFromEnum(Feature.hvx_qfloat)] = .{ .llvm_name = "hvx-qfloat", .description = "Hexagon HVX QFloating point instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.hvxv60)] = .{ + result[@intFromEnum(Feature.hvxv60)] = .{ .llvm_name = "hvxv60", .description = "Hexagon HVX instructions", .dependencies = featureSet(&[_]Feature{ .hvx, }), }; - result[@enumToInt(Feature.hvxv62)] = .{ + result[@intFromEnum(Feature.hvxv62)] = .{ .llvm_name = "hvxv62", .description = "Hexagon HVX instructions", .dependencies = featureSet(&[_]Feature{ .hvxv60, }), }; - result[@enumToInt(Feature.hvxv65)] = .{ + result[@intFromEnum(Feature.hvxv65)] = .{ .llvm_name = "hvxv65", .description = "Hexagon HVX instructions", .dependencies = featureSet(&[_]Feature{ .hvxv62, }), }; - result[@enumToInt(Feature.hvxv66)] = .{ + result[@intFromEnum(Feature.hvxv66)] = .{ .llvm_name = "hvxv66", .description = "Hexagon HVX instructions", .dependencies = featureSet(&[_]Feature{ @@ -136,161 +136,161 @@ pub const all_features = blk: { .zreg, }), }; - result[@enumToInt(Feature.hvxv67)] = .{ + result[@intFromEnum(Feature.hvxv67)] = .{ .llvm_name = "hvxv67", .description = "Hexagon HVX instructions", .dependencies = featureSet(&[_]Feature{ .hvxv66, }), }; - result[@enumToInt(Feature.hvxv68)] = .{ + result[@intFromEnum(Feature.hvxv68)] = .{ .llvm_name = "hvxv68", .description = "Hexagon HVX instructions", .dependencies = featureSet(&[_]Feature{ .hvxv67, }), }; - result[@enumToInt(Feature.hvxv69)] = .{ + result[@intFromEnum(Feature.hvxv69)] = .{ .llvm_name = "hvxv69", .description = "Hexagon HVX instructions", .dependencies = featureSet(&[_]Feature{ .hvxv68, }), }; - result[@enumToInt(Feature.hvxv71)] = .{ + result[@intFromEnum(Feature.hvxv71)] = .{ .llvm_name = "hvxv71", .description = "Hexagon HVX instructions", .dependencies = featureSet(&[_]Feature{ .hvxv69, }), }; - result[@enumToInt(Feature.hvxv73)] = .{ + result[@intFromEnum(Feature.hvxv73)] = .{ .llvm_name = "hvxv73", .description = "Hexagon HVX instructions", .dependencies = featureSet(&[_]Feature{ .hvxv71, }), }; - result[@enumToInt(Feature.long_calls)] = .{ + result[@intFromEnum(Feature.long_calls)] = .{ .llvm_name = "long-calls", .description = "Use constant-extended calls", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.mem_noshuf)] = .{ + result[@intFromEnum(Feature.mem_noshuf)] = .{ .llvm_name = "mem_noshuf", .description = "Supports mem_noshuf feature", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.memops)] = .{ + result[@intFromEnum(Feature.memops)] = .{ .llvm_name = "memops", .description = "Use memop instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.noreturn_stack_elim)] = .{ + result[@intFromEnum(Feature.noreturn_stack_elim)] = .{ .llvm_name = "noreturn-stack-elim", .description = "Eliminate stack allocation in a noreturn function when possible", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.nvj)] = .{ + result[@intFromEnum(Feature.nvj)] = .{ .llvm_name = "nvj", .description = "Support for new-value jumps", .dependencies = featureSet(&[_]Feature{ .packets, }), }; - result[@enumToInt(Feature.nvs)] = .{ + result[@intFromEnum(Feature.nvs)] = .{ .llvm_name = "nvs", .description = "Support for new-value stores", .dependencies = featureSet(&[_]Feature{ .packets, }), }; - result[@enumToInt(Feature.packets)] = .{ + result[@intFromEnum(Feature.packets)] = .{ .llvm_name = "packets", .description = "Support for instruction packets", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.prev65)] = .{ + result[@intFromEnum(Feature.prev65)] = .{ .llvm_name = "prev65", .description = "Support features deprecated in v65", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserved_r19)] = .{ + result[@intFromEnum(Feature.reserved_r19)] = .{ .llvm_name = "reserved-r19", .description = "Reserve register R19", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.small_data)] = .{ + result[@intFromEnum(Feature.small_data)] = .{ .llvm_name = "small-data", .description = "Allow GP-relative addressing of global variables", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.tinycore)] = .{ + result[@intFromEnum(Feature.tinycore)] = .{ .llvm_name = "tinycore", .description = "Hexagon Tiny Core", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.unsafe_fp)] = .{ + result[@intFromEnum(Feature.unsafe_fp)] = .{ .llvm_name = "unsafe-fp", .description = "Use unsafe FP math", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.v5)] = .{ + result[@intFromEnum(Feature.v5)] = .{ .llvm_name = "v5", .description = "Enable Hexagon V5 architecture", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.v55)] = .{ + result[@intFromEnum(Feature.v55)] = .{ .llvm_name = "v55", .description = "Enable Hexagon V55 architecture", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.v60)] = .{ + result[@intFromEnum(Feature.v60)] = .{ .llvm_name = "v60", .description = "Enable Hexagon V60 architecture", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.v62)] = .{ + result[@intFromEnum(Feature.v62)] = .{ .llvm_name = "v62", .description = "Enable Hexagon V62 architecture", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.v65)] = .{ + result[@intFromEnum(Feature.v65)] = .{ .llvm_name = "v65", .description = "Enable Hexagon V65 architecture", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.v66)] = .{ + result[@intFromEnum(Feature.v66)] = .{ .llvm_name = "v66", .description = "Enable Hexagon V66 architecture", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.v67)] = .{ + result[@intFromEnum(Feature.v67)] = .{ .llvm_name = "v67", .description = "Enable Hexagon V67 architecture", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.v68)] = .{ + result[@intFromEnum(Feature.v68)] = .{ .llvm_name = "v68", .description = "Enable Hexagon V68 architecture", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.v69)] = .{ + result[@intFromEnum(Feature.v69)] = .{ .llvm_name = "v69", .description = "Enable Hexagon V69 architecture", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.v71)] = .{ + result[@intFromEnum(Feature.v71)] = .{ .llvm_name = "v71", .description = "Enable Hexagon V71 architecture", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.v73)] = .{ + result[@intFromEnum(Feature.v73)] = .{ .llvm_name = "v73", .description = "Enable Hexagon V73 architecture", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.zreg)] = .{ + result[@intFromEnum(Feature.zreg)] = .{ .llvm_name = "zreg", .description = "Hexagon ZReg extension instructions", .dependencies = featureSet(&[_]Feature{}), diff --git a/lib/std/target/loongarch.zig b/lib/std/target/loongarch.zig index dcc6bd43fc..6f0bf426bb 100644 --- a/lib/std/target/loongarch.zig +++ b/lib/std/target/loongarch.zig @@ -27,63 +27,63 @@ pub const all_features = blk: { const len = @typeInfo(Feature).Enum.fields.len; std.debug.assert(len <= CpuFeature.Set.needed_bit_count); var result: [len]CpuFeature = undefined; - result[@enumToInt(Feature.@"32bit")] = .{ + result[@intFromEnum(Feature.@"32bit")] = .{ .llvm_name = "32bit", .description = "LA32 Basic Integer and Privilege Instruction Set", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.@"64bit")] = .{ + result[@intFromEnum(Feature.@"64bit")] = .{ .llvm_name = "64bit", .description = "LA64 Basic Integer and Privilege Instruction Set", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.d)] = .{ + result[@intFromEnum(Feature.d)] = .{ .llvm_name = "d", .description = "'D' (Double-Precision Floating-Point)", .dependencies = featureSet(&[_]Feature{ .f, }), }; - result[@enumToInt(Feature.f)] = .{ + result[@intFromEnum(Feature.f)] = .{ .llvm_name = "f", .description = "'F' (Single-Precision Floating-Point)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.la_global_with_abs)] = .{ + result[@intFromEnum(Feature.la_global_with_abs)] = .{ .llvm_name = "la-global-with-abs", .description = "Expand la.global as la.abs", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.la_global_with_pcrel)] = .{ + result[@intFromEnum(Feature.la_global_with_pcrel)] = .{ .llvm_name = "la-global-with-pcrel", .description = "Expand la.global as la.pcrel", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.la_local_with_abs)] = .{ + result[@intFromEnum(Feature.la_local_with_abs)] = .{ .llvm_name = "la-local-with-abs", .description = "Expand la.local as la.abs", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.lasx)] = .{ + result[@intFromEnum(Feature.lasx)] = .{ .llvm_name = "lasx", .description = "'LASX' (Loongson Advanced SIMD Extension)", .dependencies = featureSet(&[_]Feature{ .lsx, }), }; - result[@enumToInt(Feature.lbt)] = .{ + result[@intFromEnum(Feature.lbt)] = .{ .llvm_name = "lbt", .description = "'LBT' (Loongson Binary Translation Extension)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.lsx)] = .{ + result[@intFromEnum(Feature.lsx)] = .{ .llvm_name = "lsx", .description = "'LSX' (Loongson SIMD Extension)", .dependencies = featureSet(&[_]Feature{ .d, }), }; - result[@enumToInt(Feature.lvz)] = .{ + result[@intFromEnum(Feature.lvz)] = .{ .llvm_name = "lvz", .description = "'LVZ' (Loongson Virtualization Extension)", .dependencies = featureSet(&[_]Feature{}), diff --git a/lib/std/target/m68k.zig b/lib/std/target/m68k.zig index 10a8ae4dc2..422b95ca17 100644 --- a/lib/std/target/m68k.zig +++ b/lib/std/target/m68k.zig @@ -37,117 +37,117 @@ pub const all_features = blk: { const len = @typeInfo(Feature).Enum.fields.len; std.debug.assert(len <= CpuFeature.Set.needed_bit_count); var result: [len]CpuFeature = undefined; - result[@enumToInt(Feature.isa_68000)] = .{ + result[@intFromEnum(Feature.isa_68000)] = .{ .llvm_name = "isa-68000", .description = "Is M68000 ISA supported", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.isa_68010)] = .{ + result[@intFromEnum(Feature.isa_68010)] = .{ .llvm_name = "isa-68010", .description = "Is M68010 ISA supported", .dependencies = featureSet(&[_]Feature{ .isa_68000, }), }; - result[@enumToInt(Feature.isa_68020)] = .{ + result[@intFromEnum(Feature.isa_68020)] = .{ .llvm_name = "isa-68020", .description = "Is M68020 ISA supported", .dependencies = featureSet(&[_]Feature{ .isa_68010, }), }; - result[@enumToInt(Feature.isa_68030)] = .{ + result[@intFromEnum(Feature.isa_68030)] = .{ .llvm_name = "isa-68030", .description = "Is M68030 ISA supported", .dependencies = featureSet(&[_]Feature{ .isa_68020, }), }; - result[@enumToInt(Feature.isa_68040)] = .{ + result[@intFromEnum(Feature.isa_68040)] = .{ .llvm_name = "isa-68040", .description = "Is M68040 ISA supported", .dependencies = featureSet(&[_]Feature{ .isa_68030, }), }; - result[@enumToInt(Feature.isa_68060)] = .{ + result[@intFromEnum(Feature.isa_68060)] = .{ .llvm_name = "isa-68060", .description = "Is M68060 ISA supported", .dependencies = featureSet(&[_]Feature{ .isa_68040, }), }; - result[@enumToInt(Feature.reserve_a0)] = .{ + result[@intFromEnum(Feature.reserve_a0)] = .{ .llvm_name = "reserve-a0", .description = "Reserve A0 register", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserve_a1)] = .{ + result[@intFromEnum(Feature.reserve_a1)] = .{ .llvm_name = "reserve-a1", .description = "Reserve A1 register", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserve_a2)] = .{ + result[@intFromEnum(Feature.reserve_a2)] = .{ .llvm_name = "reserve-a2", .description = "Reserve A2 register", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserve_a3)] = .{ + result[@intFromEnum(Feature.reserve_a3)] = .{ .llvm_name = "reserve-a3", .description = "Reserve A3 register", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserve_a4)] = .{ + result[@intFromEnum(Feature.reserve_a4)] = .{ .llvm_name = "reserve-a4", .description = "Reserve A4 register", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserve_a5)] = .{ + result[@intFromEnum(Feature.reserve_a5)] = .{ .llvm_name = "reserve-a5", .description = "Reserve A5 register", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserve_a6)] = .{ + result[@intFromEnum(Feature.reserve_a6)] = .{ .llvm_name = "reserve-a6", .description = "Reserve A6 register", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserve_d0)] = .{ + result[@intFromEnum(Feature.reserve_d0)] = .{ .llvm_name = "reserve-d0", .description = "Reserve D0 register", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserve_d1)] = .{ + result[@intFromEnum(Feature.reserve_d1)] = .{ .llvm_name = "reserve-d1", .description = "Reserve D1 register", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserve_d2)] = .{ + result[@intFromEnum(Feature.reserve_d2)] = .{ .llvm_name = "reserve-d2", .description = "Reserve D2 register", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserve_d3)] = .{ + result[@intFromEnum(Feature.reserve_d3)] = .{ .llvm_name = "reserve-d3", .description = "Reserve D3 register", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserve_d4)] = .{ + result[@intFromEnum(Feature.reserve_d4)] = .{ .llvm_name = "reserve-d4", .description = "Reserve D4 register", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserve_d5)] = .{ + result[@intFromEnum(Feature.reserve_d5)] = .{ .llvm_name = "reserve-d5", .description = "Reserve D5 register", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserve_d6)] = .{ + result[@intFromEnum(Feature.reserve_d6)] = .{ .llvm_name = "reserve-d6", .description = "Reserve D6 register", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserve_d7)] = .{ + result[@intFromEnum(Feature.reserve_d7)] = .{ .llvm_name = "reserve-d7", .description = "Reserve D7 register", .dependencies = featureSet(&[_]Feature{}), diff --git a/lib/std/target/mips.zig b/lib/std/target/mips.zig index 5650bd64c2..8f3c0994d1 100644 --- a/lib/std/target/mips.zig +++ b/lib/std/target/mips.zig @@ -68,102 +68,102 @@ pub const all_features = blk: { const len = @typeInfo(Feature).Enum.fields.len; std.debug.assert(len <= CpuFeature.Set.needed_bit_count); var result: [len]CpuFeature = undefined; - result[@enumToInt(Feature.abs2008)] = .{ + result[@intFromEnum(Feature.abs2008)] = .{ .llvm_name = "abs2008", .description = "Disable IEEE 754-2008 abs.fmt mode", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.cnmips)] = .{ + result[@intFromEnum(Feature.cnmips)] = .{ .llvm_name = "cnmips", .description = "Octeon cnMIPS Support", .dependencies = featureSet(&[_]Feature{ .mips64r2, }), }; - result[@enumToInt(Feature.cnmipsp)] = .{ + result[@intFromEnum(Feature.cnmipsp)] = .{ .llvm_name = "cnmipsp", .description = "Octeon+ cnMIPS Support", .dependencies = featureSet(&[_]Feature{ .cnmips, }), }; - result[@enumToInt(Feature.crc)] = .{ + result[@intFromEnum(Feature.crc)] = .{ .llvm_name = "crc", .description = "Mips R6 CRC ASE", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.dsp)] = .{ + result[@intFromEnum(Feature.dsp)] = .{ .llvm_name = "dsp", .description = "Mips DSP ASE", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.dspr2)] = .{ + result[@intFromEnum(Feature.dspr2)] = .{ .llvm_name = "dspr2", .description = "Mips DSP-R2 ASE", .dependencies = featureSet(&[_]Feature{ .dsp, }), }; - result[@enumToInt(Feature.dspr3)] = .{ + result[@intFromEnum(Feature.dspr3)] = .{ .llvm_name = "dspr3", .description = "Mips DSP-R3 ASE", .dependencies = featureSet(&[_]Feature{ .dspr2, }), }; - result[@enumToInt(Feature.eva)] = .{ + result[@intFromEnum(Feature.eva)] = .{ .llvm_name = "eva", .description = "Mips EVA ASE", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.fp64)] = .{ + result[@intFromEnum(Feature.fp64)] = .{ .llvm_name = "fp64", .description = "Support 64-bit FP registers", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.fpxx)] = .{ + result[@intFromEnum(Feature.fpxx)] = .{ .llvm_name = "fpxx", .description = "Support for FPXX", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.ginv)] = .{ + result[@intFromEnum(Feature.ginv)] = .{ .llvm_name = "ginv", .description = "Mips Global Invalidate ASE", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.gp64)] = .{ + result[@intFromEnum(Feature.gp64)] = .{ .llvm_name = "gp64", .description = "General Purpose Registers are 64-bit wide", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.long_calls)] = .{ + result[@intFromEnum(Feature.long_calls)] = .{ .llvm_name = "long-calls", .description = "Disable use of the jal instruction", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.micromips)] = .{ + result[@intFromEnum(Feature.micromips)] = .{ .llvm_name = "micromips", .description = "microMips mode", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.mips1)] = .{ + result[@intFromEnum(Feature.mips1)] = .{ .llvm_name = "mips1", .description = "Mips I ISA Support [highly experimental]", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.mips16)] = .{ + result[@intFromEnum(Feature.mips16)] = .{ .llvm_name = "mips16", .description = "Mips16 mode", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.mips2)] = .{ + result[@intFromEnum(Feature.mips2)] = .{ .llvm_name = "mips2", .description = "Mips II ISA Support [highly experimental]", .dependencies = featureSet(&[_]Feature{ .mips1, }), }; - result[@enumToInt(Feature.mips3)] = .{ + result[@intFromEnum(Feature.mips3)] = .{ .llvm_name = "mips3", .description = "MIPS III ISA Support [highly experimental]", .dependencies = featureSet(&[_]Feature{ @@ -174,7 +174,7 @@ pub const all_features = blk: { .mips3_32r2, }), }; - result[@enumToInt(Feature.mips32)] = .{ + result[@intFromEnum(Feature.mips32)] = .{ .llvm_name = "mips32", .description = "Mips32 ISA Support", .dependencies = featureSet(&[_]Feature{ @@ -183,7 +183,7 @@ pub const all_features = blk: { .mips4_32, }), }; - result[@enumToInt(Feature.mips32r2)] = .{ + result[@intFromEnum(Feature.mips32r2)] = .{ .llvm_name = "mips32r2", .description = "Mips32r2 ISA Support", .dependencies = featureSet(&[_]Feature{ @@ -193,21 +193,21 @@ pub const all_features = blk: { .mips5_32r2, }), }; - result[@enumToInt(Feature.mips32r3)] = .{ + result[@intFromEnum(Feature.mips32r3)] = .{ .llvm_name = "mips32r3", .description = "Mips32r3 ISA Support", .dependencies = featureSet(&[_]Feature{ .mips32r2, }), }; - result[@enumToInt(Feature.mips32r5)] = .{ + result[@intFromEnum(Feature.mips32r5)] = .{ .llvm_name = "mips32r5", .description = "Mips32r5 ISA Support", .dependencies = featureSet(&[_]Feature{ .mips32r3, }), }; - result[@enumToInt(Feature.mips32r6)] = .{ + result[@intFromEnum(Feature.mips32r6)] = .{ .llvm_name = "mips32r6", .description = "Mips32r6 ISA Support [experimental]", .dependencies = featureSet(&[_]Feature{ @@ -217,22 +217,22 @@ pub const all_features = blk: { .nan2008, }), }; - result[@enumToInt(Feature.mips3_32)] = .{ + result[@intFromEnum(Feature.mips3_32)] = .{ .llvm_name = "mips3_32", .description = "Subset of MIPS-III that is also in MIPS32 [highly experimental]", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.mips3_32r2)] = .{ + result[@intFromEnum(Feature.mips3_32r2)] = .{ .llvm_name = "mips3_32r2", .description = "Subset of MIPS-III that is also in MIPS32r2 [highly experimental]", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.mips3d)] = .{ + result[@intFromEnum(Feature.mips3d)] = .{ .llvm_name = "mips3d", .description = "Mips 3D ASE", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.mips4)] = .{ + result[@intFromEnum(Feature.mips4)] = .{ .llvm_name = "mips4", .description = "MIPS IV ISA Support", .dependencies = featureSet(&[_]Feature{ @@ -241,17 +241,17 @@ pub const all_features = blk: { .mips4_32r2, }), }; - result[@enumToInt(Feature.mips4_32)] = .{ + result[@intFromEnum(Feature.mips4_32)] = .{ .llvm_name = "mips4_32", .description = "Subset of MIPS-IV that is also in MIPS32 [highly experimental]", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.mips4_32r2)] = .{ + result[@intFromEnum(Feature.mips4_32r2)] = .{ .llvm_name = "mips4_32r2", .description = "Subset of MIPS-IV that is also in MIPS32r2 [highly experimental]", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.mips5)] = .{ + result[@intFromEnum(Feature.mips5)] = .{ .llvm_name = "mips5", .description = "MIPS V ISA Support [highly experimental]", .dependencies = featureSet(&[_]Feature{ @@ -259,12 +259,12 @@ pub const all_features = blk: { .mips5_32r2, }), }; - result[@enumToInt(Feature.mips5_32r2)] = .{ + result[@intFromEnum(Feature.mips5_32r2)] = .{ .llvm_name = "mips5_32r2", .description = "Subset of MIPS-V that is also in MIPS32r2 [highly experimental]", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.mips64)] = .{ + result[@intFromEnum(Feature.mips64)] = .{ .llvm_name = "mips64", .description = "Mips64 ISA Support", .dependencies = featureSet(&[_]Feature{ @@ -272,7 +272,7 @@ pub const all_features = blk: { .mips5, }), }; - result[@enumToInt(Feature.mips64r2)] = .{ + result[@intFromEnum(Feature.mips64r2)] = .{ .llvm_name = "mips64r2", .description = "Mips64r2 ISA Support", .dependencies = featureSet(&[_]Feature{ @@ -280,7 +280,7 @@ pub const all_features = blk: { .mips64, }), }; - result[@enumToInt(Feature.mips64r3)] = .{ + result[@intFromEnum(Feature.mips64r3)] = .{ .llvm_name = "mips64r3", .description = "Mips64r3 ISA Support", .dependencies = featureSet(&[_]Feature{ @@ -288,7 +288,7 @@ pub const all_features = blk: { .mips64r2, }), }; - result[@enumToInt(Feature.mips64r5)] = .{ + result[@intFromEnum(Feature.mips64r5)] = .{ .llvm_name = "mips64r5", .description = "Mips64r5 ISA Support", .dependencies = featureSet(&[_]Feature{ @@ -296,7 +296,7 @@ pub const all_features = blk: { .mips64r3, }), }; - result[@enumToInt(Feature.mips64r6)] = .{ + result[@intFromEnum(Feature.mips64r6)] = .{ .llvm_name = "mips64r6", .description = "Mips64r6 ISA Support [experimental]", .dependencies = featureSet(&[_]Feature{ @@ -304,84 +304,84 @@ pub const all_features = blk: { .mips64r5, }), }; - result[@enumToInt(Feature.msa)] = .{ + result[@intFromEnum(Feature.msa)] = .{ .llvm_name = "msa", .description = "Mips MSA ASE", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.mt)] = .{ + result[@intFromEnum(Feature.mt)] = .{ .llvm_name = "mt", .description = "Mips MT ASE", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.nan2008)] = .{ + result[@intFromEnum(Feature.nan2008)] = .{ .llvm_name = "nan2008", .description = "IEEE 754-2008 NaN encoding", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.noabicalls)] = .{ + result[@intFromEnum(Feature.noabicalls)] = .{ .llvm_name = "noabicalls", .description = "Disable SVR4-style position-independent code", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.nomadd4)] = .{ + result[@intFromEnum(Feature.nomadd4)] = .{ .llvm_name = "nomadd4", .description = "Disable 4-operand madd.fmt and related instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.nooddspreg)] = .{ + result[@intFromEnum(Feature.nooddspreg)] = .{ .llvm_name = "nooddspreg", .description = "Disable odd numbered single-precision registers", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.p5600)] = .{ + result[@intFromEnum(Feature.p5600)] = .{ .llvm_name = "p5600", .description = "The P5600 Processor", .dependencies = featureSet(&[_]Feature{ .mips32r5, }), }; - result[@enumToInt(Feature.ptr64)] = .{ + result[@intFromEnum(Feature.ptr64)] = .{ .llvm_name = "ptr64", .description = "Pointers are 64-bit wide", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.single_float)] = .{ + result[@intFromEnum(Feature.single_float)] = .{ .llvm_name = "single-float", .description = "Only supports single precision float", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.soft_float)] = .{ + result[@intFromEnum(Feature.soft_float)] = .{ .llvm_name = "soft-float", .description = "Does not support floating point instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.sym32)] = .{ + result[@intFromEnum(Feature.sym32)] = .{ .llvm_name = "sym32", .description = "Symbols are 32 bit on Mips64", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.use_indirect_jump_hazard)] = .{ + result[@intFromEnum(Feature.use_indirect_jump_hazard)] = .{ .llvm_name = "use-indirect-jump-hazard", .description = "Use indirect jump guards to prevent certain speculation based attacks", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.use_tcc_in_div)] = .{ + result[@intFromEnum(Feature.use_tcc_in_div)] = .{ .llvm_name = "use-tcc-in-div", .description = "Force the assembler to use trapping", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.vfpu)] = .{ + result[@intFromEnum(Feature.vfpu)] = .{ .llvm_name = "vfpu", .description = "Enable vector FPU instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.virt)] = .{ + result[@intFromEnum(Feature.virt)] = .{ .llvm_name = "virt", .description = "Mips Virtualization ASE", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.xgot)] = .{ + result[@intFromEnum(Feature.xgot)] = .{ .llvm_name = "xgot", .description = "Assume 32-bit GOT", .dependencies = featureSet(&[_]Feature{}), diff --git a/lib/std/target/msp430.zig b/lib/std/target/msp430.zig index 8e2b8536c8..98ea32d17f 100644 --- a/lib/std/target/msp430.zig +++ b/lib/std/target/msp430.zig @@ -20,22 +20,22 @@ pub const all_features = blk: { const len = @typeInfo(Feature).Enum.fields.len; std.debug.assert(len <= CpuFeature.Set.needed_bit_count); var result: [len]CpuFeature = undefined; - result[@enumToInt(Feature.ext)] = .{ + result[@intFromEnum(Feature.ext)] = .{ .llvm_name = "ext", .description = "Enable MSP430-X extensions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.hwmult16)] = .{ + result[@intFromEnum(Feature.hwmult16)] = .{ .llvm_name = "hwmult16", .description = "Enable 16-bit hardware multiplier", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.hwmult32)] = .{ + result[@intFromEnum(Feature.hwmult32)] = .{ .llvm_name = "hwmult32", .description = "Enable 32-bit hardware multiplier", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.hwmultf5)] = .{ + result[@intFromEnum(Feature.hwmultf5)] = .{ .llvm_name = "hwmultf5", .description = "Enable F5 series hardware multiplier", .dependencies = featureSet(&[_]Feature{}), diff --git a/lib/std/target/nvptx.zig b/lib/std/target/nvptx.zig index 135e66715e..dfe3061bae 100644 --- a/lib/std/target/nvptx.zig +++ b/lib/std/target/nvptx.zig @@ -56,202 +56,202 @@ pub const all_features = blk: { const len = @typeInfo(Feature).Enum.fields.len; std.debug.assert(len <= CpuFeature.Set.needed_bit_count); var result: [len]CpuFeature = undefined; - result[@enumToInt(Feature.ptx32)] = .{ + result[@intFromEnum(Feature.ptx32)] = .{ .llvm_name = "ptx32", .description = "Use PTX version 3.2", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.ptx40)] = .{ + result[@intFromEnum(Feature.ptx40)] = .{ .llvm_name = "ptx40", .description = "Use PTX version 4.0", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.ptx41)] = .{ + result[@intFromEnum(Feature.ptx41)] = .{ .llvm_name = "ptx41", .description = "Use PTX version 4.1", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.ptx42)] = .{ + result[@intFromEnum(Feature.ptx42)] = .{ .llvm_name = "ptx42", .description = "Use PTX version 4.2", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.ptx43)] = .{ + result[@intFromEnum(Feature.ptx43)] = .{ .llvm_name = "ptx43", .description = "Use PTX version 4.3", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.ptx50)] = .{ + result[@intFromEnum(Feature.ptx50)] = .{ .llvm_name = "ptx50", .description = "Use PTX version 5.0", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.ptx60)] = .{ + result[@intFromEnum(Feature.ptx60)] = .{ .llvm_name = "ptx60", .description = "Use PTX version 6.0", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.ptx61)] = .{ + result[@intFromEnum(Feature.ptx61)] = .{ .llvm_name = "ptx61", .description = "Use PTX version 6.1", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.ptx63)] = .{ + result[@intFromEnum(Feature.ptx63)] = .{ .llvm_name = "ptx63", .description = "Use PTX version 6.3", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.ptx64)] = .{ + result[@intFromEnum(Feature.ptx64)] = .{ .llvm_name = "ptx64", .description = "Use PTX version 6.4", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.ptx65)] = .{ + result[@intFromEnum(Feature.ptx65)] = .{ .llvm_name = "ptx65", .description = "Use PTX version 6.5", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.ptx70)] = .{ + result[@intFromEnum(Feature.ptx70)] = .{ .llvm_name = "ptx70", .description = "Use PTX version 7.0", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.ptx71)] = .{ + result[@intFromEnum(Feature.ptx71)] = .{ .llvm_name = "ptx71", .description = "Use PTX version 7.1", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.ptx72)] = .{ + result[@intFromEnum(Feature.ptx72)] = .{ .llvm_name = "ptx72", .description = "Use PTX version 7.2", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.ptx73)] = .{ + result[@intFromEnum(Feature.ptx73)] = .{ .llvm_name = "ptx73", .description = "Use PTX version 7.3", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.ptx74)] = .{ + result[@intFromEnum(Feature.ptx74)] = .{ .llvm_name = "ptx74", .description = "Use PTX version 7.4", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.ptx75)] = .{ + result[@intFromEnum(Feature.ptx75)] = .{ .llvm_name = "ptx75", .description = "Use PTX version 7.5", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.ptx76)] = .{ + result[@intFromEnum(Feature.ptx76)] = .{ .llvm_name = "ptx76", .description = "Use PTX version 7.6", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.ptx77)] = .{ + result[@intFromEnum(Feature.ptx77)] = .{ .llvm_name = "ptx77", .description = "Use PTX version 7.7", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.ptx78)] = .{ + result[@intFromEnum(Feature.ptx78)] = .{ .llvm_name = "ptx78", .description = "Use PTX version 7.8", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.sm_20)] = .{ + result[@intFromEnum(Feature.sm_20)] = .{ .llvm_name = "sm_20", .description = "Target SM 2.0", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.sm_21)] = .{ + result[@intFromEnum(Feature.sm_21)] = .{ .llvm_name = "sm_21", .description = "Target SM 2.1", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.sm_30)] = .{ + result[@intFromEnum(Feature.sm_30)] = .{ .llvm_name = "sm_30", .description = "Target SM 3.0", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.sm_32)] = .{ + result[@intFromEnum(Feature.sm_32)] = .{ .llvm_name = "sm_32", .description = "Target SM 3.2", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.sm_35)] = .{ + result[@intFromEnum(Feature.sm_35)] = .{ .llvm_name = "sm_35", .description = "Target SM 3.5", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.sm_37)] = .{ + result[@intFromEnum(Feature.sm_37)] = .{ .llvm_name = "sm_37", .description = "Target SM 3.7", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.sm_50)] = .{ + result[@intFromEnum(Feature.sm_50)] = .{ .llvm_name = "sm_50", .description = "Target SM 5.0", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.sm_52)] = .{ + result[@intFromEnum(Feature.sm_52)] = .{ .llvm_name = "sm_52", .description = "Target SM 5.2", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.sm_53)] = .{ + result[@intFromEnum(Feature.sm_53)] = .{ .llvm_name = "sm_53", .description = "Target SM 5.3", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.sm_60)] = .{ + result[@intFromEnum(Feature.sm_60)] = .{ .llvm_name = "sm_60", .description = "Target SM 6.0", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.sm_61)] = .{ + result[@intFromEnum(Feature.sm_61)] = .{ .llvm_name = "sm_61", .description = "Target SM 6.1", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.sm_62)] = .{ + result[@intFromEnum(Feature.sm_62)] = .{ .llvm_name = "sm_62", .description = "Target SM 6.2", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.sm_70)] = .{ + result[@intFromEnum(Feature.sm_70)] = .{ .llvm_name = "sm_70", .description = "Target SM 7.0", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.sm_72)] = .{ + result[@intFromEnum(Feature.sm_72)] = .{ .llvm_name = "sm_72", .description = "Target SM 7.2", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.sm_75)] = .{ + result[@intFromEnum(Feature.sm_75)] = .{ .llvm_name = "sm_75", .description = "Target SM 7.5", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.sm_80)] = .{ + result[@intFromEnum(Feature.sm_80)] = .{ .llvm_name = "sm_80", .description = "Target SM 8.0", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.sm_86)] = .{ + result[@intFromEnum(Feature.sm_86)] = .{ .llvm_name = "sm_86", .description = "Target SM 8.6", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.sm_87)] = .{ + result[@intFromEnum(Feature.sm_87)] = .{ .llvm_name = "sm_87", .description = "Target SM 8.7", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.sm_89)] = .{ + result[@intFromEnum(Feature.sm_89)] = .{ .llvm_name = "sm_89", .description = "Target SM 8.9", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.sm_90)] = .{ + result[@intFromEnum(Feature.sm_90)] = .{ .llvm_name = "sm_90", .description = "Target SM 9.0", .dependencies = featureSet(&[_]Feature{}), diff --git a/lib/std/target/powerpc.zig b/lib/std/target/powerpc.zig index 68d86777aa..c350c166ba 100644 --- a/lib/std/target/powerpc.zig +++ b/lib/std/target/powerpc.zig @@ -97,329 +97,329 @@ pub const all_features = blk: { const len = @typeInfo(Feature).Enum.fields.len; std.debug.assert(len <= CpuFeature.Set.needed_bit_count); var result: [len]CpuFeature = undefined; - result[@enumToInt(Feature.@"64bit")] = .{ + result[@intFromEnum(Feature.@"64bit")] = .{ .llvm_name = "64bit", .description = "Enable 64-bit instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.@"64bitregs")] = .{ + result[@intFromEnum(Feature.@"64bitregs")] = .{ .llvm_name = "64bitregs", .description = "Enable 64-bit registers usage for ppc32 [beta]", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.aix)] = .{ + result[@intFromEnum(Feature.aix)] = .{ .llvm_name = "aix", .description = "AIX OS", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.allow_unaligned_fp_access)] = .{ + result[@intFromEnum(Feature.allow_unaligned_fp_access)] = .{ .llvm_name = "allow-unaligned-fp-access", .description = "CPU does not trap on unaligned FP access", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.altivec)] = .{ + result[@intFromEnum(Feature.altivec)] = .{ .llvm_name = "altivec", .description = "Enable Altivec instructions", .dependencies = featureSet(&[_]Feature{ .fpu, }), }; - result[@enumToInt(Feature.booke)] = .{ + result[@intFromEnum(Feature.booke)] = .{ .llvm_name = "booke", .description = "Enable Book E instructions", .dependencies = featureSet(&[_]Feature{ .icbt, }), }; - result[@enumToInt(Feature.bpermd)] = .{ + result[@intFromEnum(Feature.bpermd)] = .{ .llvm_name = "bpermd", .description = "Enable the bpermd instruction", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.cmpb)] = .{ + result[@intFromEnum(Feature.cmpb)] = .{ .llvm_name = "cmpb", .description = "Enable the cmpb instruction", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.crbits)] = .{ + result[@intFromEnum(Feature.crbits)] = .{ .llvm_name = "crbits", .description = "Use condition-register bits individually", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.crypto)] = .{ + result[@intFromEnum(Feature.crypto)] = .{ .llvm_name = "crypto", .description = "Enable POWER8 Crypto instructions", .dependencies = featureSet(&[_]Feature{ .power8_altivec, }), }; - result[@enumToInt(Feature.direct_move)] = .{ + result[@intFromEnum(Feature.direct_move)] = .{ .llvm_name = "direct-move", .description = "Enable Power8 direct move instructions", .dependencies = featureSet(&[_]Feature{ .vsx, }), }; - result[@enumToInt(Feature.e500)] = .{ + result[@intFromEnum(Feature.e500)] = .{ .llvm_name = "e500", .description = "Enable E500/E500mc instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.efpu2)] = .{ + result[@intFromEnum(Feature.efpu2)] = .{ .llvm_name = "efpu2", .description = "Enable Embedded Floating-Point APU 2 instructions", .dependencies = featureSet(&[_]Feature{ .spe, }), }; - result[@enumToInt(Feature.extdiv)] = .{ + result[@intFromEnum(Feature.extdiv)] = .{ .llvm_name = "extdiv", .description = "Enable extended divide instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.fast_MFLR)] = .{ + result[@intFromEnum(Feature.fast_MFLR)] = .{ .llvm_name = "fast-MFLR", .description = "MFLR is a fast instruction", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.fcpsgn)] = .{ + result[@intFromEnum(Feature.fcpsgn)] = .{ .llvm_name = "fcpsgn", .description = "Enable the fcpsgn instruction", .dependencies = featureSet(&[_]Feature{ .fpu, }), }; - result[@enumToInt(Feature.float128)] = .{ + result[@intFromEnum(Feature.float128)] = .{ .llvm_name = "float128", .description = "Enable the __float128 data type for IEEE-754R Binary128.", .dependencies = featureSet(&[_]Feature{ .vsx, }), }; - result[@enumToInt(Feature.fpcvt)] = .{ + result[@intFromEnum(Feature.fpcvt)] = .{ .llvm_name = "fpcvt", .description = "Enable fc[ft]* (unsigned and single-precision) and lfiwzx instructions", .dependencies = featureSet(&[_]Feature{ .fpu, }), }; - result[@enumToInt(Feature.fprnd)] = .{ + result[@intFromEnum(Feature.fprnd)] = .{ .llvm_name = "fprnd", .description = "Enable the fri[mnpz] instructions", .dependencies = featureSet(&[_]Feature{ .fpu, }), }; - result[@enumToInt(Feature.fpu)] = .{ + result[@intFromEnum(Feature.fpu)] = .{ .llvm_name = "fpu", .description = "Enable classic FPU instructions", .dependencies = featureSet(&[_]Feature{ .hard_float, }), }; - result[@enumToInt(Feature.fre)] = .{ + result[@intFromEnum(Feature.fre)] = .{ .llvm_name = "fre", .description = "Enable the fre instruction", .dependencies = featureSet(&[_]Feature{ .fpu, }), }; - result[@enumToInt(Feature.fres)] = .{ + result[@intFromEnum(Feature.fres)] = .{ .llvm_name = "fres", .description = "Enable the fres instruction", .dependencies = featureSet(&[_]Feature{ .fpu, }), }; - result[@enumToInt(Feature.frsqrte)] = .{ + result[@intFromEnum(Feature.frsqrte)] = .{ .llvm_name = "frsqrte", .description = "Enable the frsqrte instruction", .dependencies = featureSet(&[_]Feature{ .fpu, }), }; - result[@enumToInt(Feature.frsqrtes)] = .{ + result[@intFromEnum(Feature.frsqrtes)] = .{ .llvm_name = "frsqrtes", .description = "Enable the frsqrtes instruction", .dependencies = featureSet(&[_]Feature{ .fpu, }), }; - result[@enumToInt(Feature.fsqrt)] = .{ + result[@intFromEnum(Feature.fsqrt)] = .{ .llvm_name = "fsqrt", .description = "Enable the fsqrt instruction", .dependencies = featureSet(&[_]Feature{ .fpu, }), }; - result[@enumToInt(Feature.fuse_add_logical)] = .{ + result[@intFromEnum(Feature.fuse_add_logical)] = .{ .llvm_name = "fuse-add-logical", .description = "Target supports Add with Logical Operations fusion", .dependencies = featureSet(&[_]Feature{ .fusion, }), }; - result[@enumToInt(Feature.fuse_addi_load)] = .{ + result[@intFromEnum(Feature.fuse_addi_load)] = .{ .llvm_name = "fuse-addi-load", .description = "Power8 Addi-Load fusion", .dependencies = featureSet(&[_]Feature{ .fusion, }), }; - result[@enumToInt(Feature.fuse_addis_load)] = .{ + result[@intFromEnum(Feature.fuse_addis_load)] = .{ .llvm_name = "fuse-addis-load", .description = "Power8 Addis-Load fusion", .dependencies = featureSet(&[_]Feature{ .fusion, }), }; - result[@enumToInt(Feature.fuse_arith_add)] = .{ + result[@intFromEnum(Feature.fuse_arith_add)] = .{ .llvm_name = "fuse-arith-add", .description = "Target supports Arithmetic Operations with Add fusion", .dependencies = featureSet(&[_]Feature{ .fusion, }), }; - result[@enumToInt(Feature.fuse_back2back)] = .{ + result[@intFromEnum(Feature.fuse_back2back)] = .{ .llvm_name = "fuse-back2back", .description = "Target supports general back to back fusion", .dependencies = featureSet(&[_]Feature{ .fusion, }), }; - result[@enumToInt(Feature.fuse_cmp)] = .{ + result[@intFromEnum(Feature.fuse_cmp)] = .{ .llvm_name = "fuse-cmp", .description = "Target supports Comparison Operations fusion", .dependencies = featureSet(&[_]Feature{ .fusion, }), }; - result[@enumToInt(Feature.fuse_logical)] = .{ + result[@intFromEnum(Feature.fuse_logical)] = .{ .llvm_name = "fuse-logical", .description = "Target supports Logical Operations fusion", .dependencies = featureSet(&[_]Feature{ .fusion, }), }; - result[@enumToInt(Feature.fuse_logical_add)] = .{ + result[@intFromEnum(Feature.fuse_logical_add)] = .{ .llvm_name = "fuse-logical-add", .description = "Target supports Logical with Add Operations fusion", .dependencies = featureSet(&[_]Feature{ .fusion, }), }; - result[@enumToInt(Feature.fuse_sha3)] = .{ + result[@intFromEnum(Feature.fuse_sha3)] = .{ .llvm_name = "fuse-sha3", .description = "Target supports SHA3 assist fusion", .dependencies = featureSet(&[_]Feature{ .fusion, }), }; - result[@enumToInt(Feature.fuse_store)] = .{ + result[@intFromEnum(Feature.fuse_store)] = .{ .llvm_name = "fuse-store", .description = "Target supports store clustering", .dependencies = featureSet(&[_]Feature{ .fusion, }), }; - result[@enumToInt(Feature.fuse_wideimm)] = .{ + result[@intFromEnum(Feature.fuse_wideimm)] = .{ .llvm_name = "fuse-wideimm", .description = "Target supports Wide-Immediate fusion", .dependencies = featureSet(&[_]Feature{ .fusion, }), }; - result[@enumToInt(Feature.fuse_zeromove)] = .{ + result[@intFromEnum(Feature.fuse_zeromove)] = .{ .llvm_name = "fuse-zeromove", .description = "Target supports move to SPR with branch fusion", .dependencies = featureSet(&[_]Feature{ .fusion, }), }; - result[@enumToInt(Feature.fusion)] = .{ + result[@intFromEnum(Feature.fusion)] = .{ .llvm_name = "fusion", .description = "Target supports instruction fusion", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.hard_float)] = .{ + result[@intFromEnum(Feature.hard_float)] = .{ .llvm_name = "hard-float", .description = "Enable floating-point instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.htm)] = .{ + result[@intFromEnum(Feature.htm)] = .{ .llvm_name = "htm", .description = "Enable Hardware Transactional Memory instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.icbt)] = .{ + result[@intFromEnum(Feature.icbt)] = .{ .llvm_name = "icbt", .description = "Enable icbt instruction", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.invariant_function_descriptors)] = .{ + result[@intFromEnum(Feature.invariant_function_descriptors)] = .{ .llvm_name = "invariant-function-descriptors", .description = "Assume function descriptors are invariant", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.isa_future_instructions)] = .{ + result[@intFromEnum(Feature.isa_future_instructions)] = .{ .llvm_name = "isa-future-instructions", .description = "Enable instructions for Future ISA.", .dependencies = featureSet(&[_]Feature{ .isa_v31_instructions, }), }; - result[@enumToInt(Feature.isa_v206_instructions)] = .{ + result[@intFromEnum(Feature.isa_v206_instructions)] = .{ .llvm_name = "isa-v206-instructions", .description = "Enable instructions in ISA 2.06.", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.isa_v207_instructions)] = .{ + result[@intFromEnum(Feature.isa_v207_instructions)] = .{ .llvm_name = "isa-v207-instructions", .description = "Enable instructions in ISA 2.07.", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.isa_v30_instructions)] = .{ + result[@intFromEnum(Feature.isa_v30_instructions)] = .{ .llvm_name = "isa-v30-instructions", .description = "Enable instructions in ISA 3.0.", .dependencies = featureSet(&[_]Feature{ .isa_v207_instructions, }), }; - result[@enumToInt(Feature.isa_v31_instructions)] = .{ + result[@intFromEnum(Feature.isa_v31_instructions)] = .{ .llvm_name = "isa-v31-instructions", .description = "Enable instructions in ISA 3.1.", .dependencies = featureSet(&[_]Feature{ .isa_v30_instructions, }), }; - result[@enumToInt(Feature.isel)] = .{ + result[@intFromEnum(Feature.isel)] = .{ .llvm_name = "isel", .description = "Enable the isel instruction", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.ldbrx)] = .{ + result[@intFromEnum(Feature.ldbrx)] = .{ .llvm_name = "ldbrx", .description = "Enable the ldbrx instruction", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.lfiwax)] = .{ + result[@intFromEnum(Feature.lfiwax)] = .{ .llvm_name = "lfiwax", .description = "Enable the lfiwax instruction", .dependencies = featureSet(&[_]Feature{ .fpu, }), }; - result[@enumToInt(Feature.longcall)] = .{ + result[@intFromEnum(Feature.longcall)] = .{ .llvm_name = "longcall", .description = "Always use indirect calls", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.mfocrf)] = .{ + result[@intFromEnum(Feature.mfocrf)] = .{ .llvm_name = "mfocrf", .description = "Enable the MFOCRF instruction", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.mma)] = .{ + result[@intFromEnum(Feature.mma)] = .{ .llvm_name = "mma", .description = "Enable MMA instructions", .dependencies = featureSet(&[_]Feature{ @@ -428,43 +428,43 @@ pub const all_features = blk: { .power9_altivec, }), }; - result[@enumToInt(Feature.modern_aix_as)] = .{ + result[@intFromEnum(Feature.modern_aix_as)] = .{ .llvm_name = "modern-aix-as", .description = "AIX system assembler is modern enough to support new mnes", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.msync)] = .{ + result[@intFromEnum(Feature.msync)] = .{ .llvm_name = "msync", .description = "Has only the msync instruction instead of sync", .dependencies = featureSet(&[_]Feature{ .booke, }), }; - result[@enumToInt(Feature.paired_vector_memops)] = .{ + result[@intFromEnum(Feature.paired_vector_memops)] = .{ .llvm_name = "paired-vector-memops", .description = "32Byte load and store instructions", .dependencies = featureSet(&[_]Feature{ .isa_v30_instructions, }), }; - result[@enumToInt(Feature.partword_atomics)] = .{ + result[@intFromEnum(Feature.partword_atomics)] = .{ .llvm_name = "partword-atomics", .description = "Enable l[bh]arx and st[bh]cx.", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.pcrelative_memops)] = .{ + result[@intFromEnum(Feature.pcrelative_memops)] = .{ .llvm_name = "pcrelative-memops", .description = "Enable PC relative Memory Ops", .dependencies = featureSet(&[_]Feature{ .prefix_instrs, }), }; - result[@enumToInt(Feature.popcntd)] = .{ + result[@intFromEnum(Feature.popcntd)] = .{ .llvm_name = "popcntd", .description = "Enable the popcnt[dw] instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.power10_vector)] = .{ + result[@intFromEnum(Feature.power10_vector)] = .{ .llvm_name = "power10-vector", .description = "Enable POWER10 vector instructions", .dependencies = featureSet(&[_]Feature{ @@ -472,14 +472,14 @@ pub const all_features = blk: { .power9_vector, }), }; - result[@enumToInt(Feature.power8_altivec)] = .{ + result[@intFromEnum(Feature.power8_altivec)] = .{ .llvm_name = "power8-altivec", .description = "Enable POWER8 Altivec instructions", .dependencies = featureSet(&[_]Feature{ .altivec, }), }; - result[@enumToInt(Feature.power8_vector)] = .{ + result[@intFromEnum(Feature.power8_vector)] = .{ .llvm_name = "power8-vector", .description = "Enable POWER8 vector instructions", .dependencies = featureSet(&[_]Feature{ @@ -487,7 +487,7 @@ pub const all_features = blk: { .vsx, }), }; - result[@enumToInt(Feature.power9_altivec)] = .{ + result[@intFromEnum(Feature.power9_altivec)] = .{ .llvm_name = "power9-altivec", .description = "Enable POWER9 Altivec instructions", .dependencies = featureSet(&[_]Feature{ @@ -495,7 +495,7 @@ pub const all_features = blk: { .power8_altivec, }), }; - result[@enumToInt(Feature.power9_vector)] = .{ + result[@intFromEnum(Feature.power9_vector)] = .{ .llvm_name = "power9-vector", .description = "Enable POWER9 vector instructions", .dependencies = featureSet(&[_]Feature{ @@ -503,32 +503,32 @@ pub const all_features = blk: { .power9_altivec, }), }; - result[@enumToInt(Feature.ppc4xx)] = .{ + result[@intFromEnum(Feature.ppc4xx)] = .{ .llvm_name = "ppc4xx", .description = "Enable PPC 4xx instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.ppc6xx)] = .{ + result[@intFromEnum(Feature.ppc6xx)] = .{ .llvm_name = "ppc6xx", .description = "Enable PPC 6xx instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.ppc_postra_sched)] = .{ + result[@intFromEnum(Feature.ppc_postra_sched)] = .{ .llvm_name = "ppc-postra-sched", .description = "Use PowerPC post-RA scheduling strategy", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.ppc_prera_sched)] = .{ + result[@intFromEnum(Feature.ppc_prera_sched)] = .{ .llvm_name = "ppc-prera-sched", .description = "Use PowerPC pre-RA scheduling strategy", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.predictable_select_expensive)] = .{ + result[@intFromEnum(Feature.predictable_select_expensive)] = .{ .llvm_name = "predictable-select-expensive", .description = "Prefer likely predicted branches over selects", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.prefix_instrs)] = .{ + result[@intFromEnum(Feature.prefix_instrs)] = .{ .llvm_name = "prefix-instrs", .description = "Enable prefixed instructions", .dependencies = featureSet(&[_]Feature{ @@ -536,61 +536,61 @@ pub const all_features = blk: { .power9_altivec, }), }; - result[@enumToInt(Feature.privileged)] = .{ + result[@intFromEnum(Feature.privileged)] = .{ .llvm_name = "privileged", .description = "Add privileged instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.quadword_atomics)] = .{ + result[@intFromEnum(Feature.quadword_atomics)] = .{ .llvm_name = "quadword-atomics", .description = "Enable lqarx and stqcx.", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.recipprec)] = .{ + result[@intFromEnum(Feature.recipprec)] = .{ .llvm_name = "recipprec", .description = "Assume higher precision reciprocal estimates", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.rop_protect)] = .{ + result[@intFromEnum(Feature.rop_protect)] = .{ .llvm_name = "rop-protect", .description = "Add ROP protect", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.secure_plt)] = .{ + result[@intFromEnum(Feature.secure_plt)] = .{ .llvm_name = "secure-plt", .description = "Enable secure plt mode", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.slow_popcntd)] = .{ + result[@intFromEnum(Feature.slow_popcntd)] = .{ .llvm_name = "slow-popcntd", .description = "Has slow popcnt[dw] instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.spe)] = .{ + result[@intFromEnum(Feature.spe)] = .{ .llvm_name = "spe", .description = "Enable SPE instructions", .dependencies = featureSet(&[_]Feature{ .hard_float, }), }; - result[@enumToInt(Feature.stfiwx)] = .{ + result[@intFromEnum(Feature.stfiwx)] = .{ .llvm_name = "stfiwx", .description = "Enable the stfiwx instruction", .dependencies = featureSet(&[_]Feature{ .fpu, }), }; - result[@enumToInt(Feature.two_const_nr)] = .{ + result[@intFromEnum(Feature.two_const_nr)] = .{ .llvm_name = "two-const-nr", .description = "Requires two constant Newton-Raphson computation", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.vectors_use_two_units)] = .{ + result[@intFromEnum(Feature.vectors_use_two_units)] = .{ .llvm_name = "vectors-use-two-units", .description = "Vectors use two units", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.vsx)] = .{ + result[@intFromEnum(Feature.vsx)] = .{ .llvm_name = "vsx", .description = "Enable VSX instructions", .dependencies = featureSet(&[_]Feature{ diff --git a/lib/std/target/riscv.zig b/lib/std/target/riscv.zig index 0e72fa6e96..8e49a6b180 100644 --- a/lib/std/target/riscv.zig +++ b/lib/std/target/riscv.zig @@ -124,311 +124,311 @@ pub const all_features = blk: { const len = @typeInfo(Feature).Enum.fields.len; std.debug.assert(len <= CpuFeature.Set.needed_bit_count); var result: [len]CpuFeature = undefined; - result[@enumToInt(Feature.@"32bit")] = .{ + result[@intFromEnum(Feature.@"32bit")] = .{ .llvm_name = "32bit", .description = "Implements RV32", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.@"64bit")] = .{ + result[@intFromEnum(Feature.@"64bit")] = .{ .llvm_name = "64bit", .description = "Implements RV64", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.a)] = .{ + result[@intFromEnum(Feature.a)] = .{ .llvm_name = "a", .description = "'A' (Atomic Instructions)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.c)] = .{ + result[@intFromEnum(Feature.c)] = .{ .llvm_name = "c", .description = "'C' (Compressed Instructions)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.d)] = .{ + result[@intFromEnum(Feature.d)] = .{ .llvm_name = "d", .description = "'D' (Double-Precision Floating-Point)", .dependencies = featureSet(&[_]Feature{ .f, }), }; - result[@enumToInt(Feature.e)] = .{ + result[@intFromEnum(Feature.e)] = .{ .llvm_name = "e", .description = "Implements RV32E (provides 16 rather than 32 GPRs)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.experimental_zawrs)] = .{ + result[@intFromEnum(Feature.experimental_zawrs)] = .{ .llvm_name = "experimental-zawrs", .description = "'Zawrs' (Wait on Reservation Set)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.experimental_zca)] = .{ + result[@intFromEnum(Feature.experimental_zca)] = .{ .llvm_name = "experimental-zca", .description = "'Zca' (part of the C extension, excluding compressed floating point loads/stores)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.experimental_zcd)] = .{ + result[@intFromEnum(Feature.experimental_zcd)] = .{ .llvm_name = "experimental-zcd", .description = "'Zcd' (Compressed Double-Precision Floating-Point Instructions)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.experimental_zcf)] = .{ + result[@intFromEnum(Feature.experimental_zcf)] = .{ .llvm_name = "experimental-zcf", .description = "'Zcf' (Compressed Single-Precision Floating-Point Instructions)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.experimental_zihintntl)] = .{ + result[@intFromEnum(Feature.experimental_zihintntl)] = .{ .llvm_name = "experimental-zihintntl", .description = "'zihintntl' (Non-Temporal Locality Hints)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.experimental_ztso)] = .{ + result[@intFromEnum(Feature.experimental_ztso)] = .{ .llvm_name = "experimental-ztso", .description = "'Ztso' (Memory Model - Total Store Order)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.experimental_zvfh)] = .{ + result[@intFromEnum(Feature.experimental_zvfh)] = .{ .llvm_name = "experimental-zvfh", .description = "'Zvfh' (Vector Half-Precision Floating-Point)", .dependencies = featureSet(&[_]Feature{ .zve32f, }), }; - result[@enumToInt(Feature.f)] = .{ + result[@intFromEnum(Feature.f)] = .{ .llvm_name = "f", .description = "'F' (Single-Precision Floating-Point)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.forced_atomics)] = .{ + result[@intFromEnum(Feature.forced_atomics)] = .{ .llvm_name = "forced-atomics", .description = "Assume that lock-free native-width atomics are available", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.h)] = .{ + result[@intFromEnum(Feature.h)] = .{ .llvm_name = "h", .description = "'H' (Hypervisor)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.lui_addi_fusion)] = .{ + result[@intFromEnum(Feature.lui_addi_fusion)] = .{ .llvm_name = "lui-addi-fusion", .description = "Enable LUI+ADDI macrofusion", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.m)] = .{ + result[@intFromEnum(Feature.m)] = .{ .llvm_name = "m", .description = "'M' (Integer Multiplication and Division)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.no_default_unroll)] = .{ + result[@intFromEnum(Feature.no_default_unroll)] = .{ .llvm_name = "no-default-unroll", .description = "Disable default unroll preference.", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.no_optimized_zero_stride_load)] = .{ + result[@intFromEnum(Feature.no_optimized_zero_stride_load)] = .{ .llvm_name = "no-optimized-zero-stride-load", .description = "Hasn't optimized (perform fewer memory operations)zero-stride vector load", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.no_rvc_hints)] = .{ + result[@intFromEnum(Feature.no_rvc_hints)] = .{ .llvm_name = "no-rvc-hints", .description = "Disable RVC Hint Instructions.", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.relax)] = .{ + result[@intFromEnum(Feature.relax)] = .{ .llvm_name = "relax", .description = "Enable Linker relaxation.", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserve_x1)] = .{ + result[@intFromEnum(Feature.reserve_x1)] = .{ .llvm_name = "reserve-x1", .description = "Reserve X1", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserve_x10)] = .{ + result[@intFromEnum(Feature.reserve_x10)] = .{ .llvm_name = "reserve-x10", .description = "Reserve X10", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserve_x11)] = .{ + result[@intFromEnum(Feature.reserve_x11)] = .{ .llvm_name = "reserve-x11", .description = "Reserve X11", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserve_x12)] = .{ + result[@intFromEnum(Feature.reserve_x12)] = .{ .llvm_name = "reserve-x12", .description = "Reserve X12", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserve_x13)] = .{ + result[@intFromEnum(Feature.reserve_x13)] = .{ .llvm_name = "reserve-x13", .description = "Reserve X13", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserve_x14)] = .{ + result[@intFromEnum(Feature.reserve_x14)] = .{ .llvm_name = "reserve-x14", .description = "Reserve X14", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserve_x15)] = .{ + result[@intFromEnum(Feature.reserve_x15)] = .{ .llvm_name = "reserve-x15", .description = "Reserve X15", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserve_x16)] = .{ + result[@intFromEnum(Feature.reserve_x16)] = .{ .llvm_name = "reserve-x16", .description = "Reserve X16", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserve_x17)] = .{ + result[@intFromEnum(Feature.reserve_x17)] = .{ .llvm_name = "reserve-x17", .description = "Reserve X17", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserve_x18)] = .{ + result[@intFromEnum(Feature.reserve_x18)] = .{ .llvm_name = "reserve-x18", .description = "Reserve X18", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserve_x19)] = .{ + result[@intFromEnum(Feature.reserve_x19)] = .{ .llvm_name = "reserve-x19", .description = "Reserve X19", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserve_x2)] = .{ + result[@intFromEnum(Feature.reserve_x2)] = .{ .llvm_name = "reserve-x2", .description = "Reserve X2", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserve_x20)] = .{ + result[@intFromEnum(Feature.reserve_x20)] = .{ .llvm_name = "reserve-x20", .description = "Reserve X20", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserve_x21)] = .{ + result[@intFromEnum(Feature.reserve_x21)] = .{ .llvm_name = "reserve-x21", .description = "Reserve X21", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserve_x22)] = .{ + result[@intFromEnum(Feature.reserve_x22)] = .{ .llvm_name = "reserve-x22", .description = "Reserve X22", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserve_x23)] = .{ + result[@intFromEnum(Feature.reserve_x23)] = .{ .llvm_name = "reserve-x23", .description = "Reserve X23", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserve_x24)] = .{ + result[@intFromEnum(Feature.reserve_x24)] = .{ .llvm_name = "reserve-x24", .description = "Reserve X24", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserve_x25)] = .{ + result[@intFromEnum(Feature.reserve_x25)] = .{ .llvm_name = "reserve-x25", .description = "Reserve X25", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserve_x26)] = .{ + result[@intFromEnum(Feature.reserve_x26)] = .{ .llvm_name = "reserve-x26", .description = "Reserve X26", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserve_x27)] = .{ + result[@intFromEnum(Feature.reserve_x27)] = .{ .llvm_name = "reserve-x27", .description = "Reserve X27", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserve_x28)] = .{ + result[@intFromEnum(Feature.reserve_x28)] = .{ .llvm_name = "reserve-x28", .description = "Reserve X28", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserve_x29)] = .{ + result[@intFromEnum(Feature.reserve_x29)] = .{ .llvm_name = "reserve-x29", .description = "Reserve X29", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserve_x3)] = .{ + result[@intFromEnum(Feature.reserve_x3)] = .{ .llvm_name = "reserve-x3", .description = "Reserve X3", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserve_x30)] = .{ + result[@intFromEnum(Feature.reserve_x30)] = .{ .llvm_name = "reserve-x30", .description = "Reserve X30", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserve_x31)] = .{ + result[@intFromEnum(Feature.reserve_x31)] = .{ .llvm_name = "reserve-x31", .description = "Reserve X31", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserve_x4)] = .{ + result[@intFromEnum(Feature.reserve_x4)] = .{ .llvm_name = "reserve-x4", .description = "Reserve X4", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserve_x5)] = .{ + result[@intFromEnum(Feature.reserve_x5)] = .{ .llvm_name = "reserve-x5", .description = "Reserve X5", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserve_x6)] = .{ + result[@intFromEnum(Feature.reserve_x6)] = .{ .llvm_name = "reserve-x6", .description = "Reserve X6", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserve_x7)] = .{ + result[@intFromEnum(Feature.reserve_x7)] = .{ .llvm_name = "reserve-x7", .description = "Reserve X7", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserve_x8)] = .{ + result[@intFromEnum(Feature.reserve_x8)] = .{ .llvm_name = "reserve-x8", .description = "Reserve X8", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reserve_x9)] = .{ + result[@intFromEnum(Feature.reserve_x9)] = .{ .llvm_name = "reserve-x9", .description = "Reserve X9", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.save_restore)] = .{ + result[@intFromEnum(Feature.save_restore)] = .{ .llvm_name = "save-restore", .description = "Enable save/restore.", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.short_forward_branch_opt)] = .{ + result[@intFromEnum(Feature.short_forward_branch_opt)] = .{ .llvm_name = "short-forward-branch-opt", .description = "Enable short forward branch optimization", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.svinval)] = .{ + result[@intFromEnum(Feature.svinval)] = .{ .llvm_name = "svinval", .description = "'Svinval' (Fine-Grained Address-Translation Cache Invalidation)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.svnapot)] = .{ + result[@intFromEnum(Feature.svnapot)] = .{ .llvm_name = "svnapot", .description = "'Svnapot' (NAPOT Translation Contiguity)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.svpbmt)] = .{ + result[@intFromEnum(Feature.svpbmt)] = .{ .llvm_name = "svpbmt", .description = "'Svpbmt' (Page-Based Memory Types)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.tagged_globals)] = .{ + result[@intFromEnum(Feature.tagged_globals)] = .{ .llvm_name = "tagged-globals", .description = "Use an instruction sequence for taking the address of a global that allows a memory tag in the upper address bits", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.unaligned_scalar_mem)] = .{ + result[@intFromEnum(Feature.unaligned_scalar_mem)] = .{ .llvm_name = "unaligned-scalar-mem", .description = "Has reasonably performant unaligned scalar loads and stores", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.v)] = .{ + result[@intFromEnum(Feature.v)] = .{ .llvm_name = "v", .description = "'V' (Vector Extension for Application Processors)", .dependencies = featureSet(&[_]Feature{ @@ -437,114 +437,114 @@ pub const all_features = blk: { .zvl128b, }), }; - result[@enumToInt(Feature.xtheadvdot)] = .{ + result[@intFromEnum(Feature.xtheadvdot)] = .{ .llvm_name = "xtheadvdot", .description = "'xtheadvdot' (T-Head Vector Extensions for Dot)", .dependencies = featureSet(&[_]Feature{ .v, }), }; - result[@enumToInt(Feature.xventanacondops)] = .{ + result[@intFromEnum(Feature.xventanacondops)] = .{ .llvm_name = "xventanacondops", .description = "'XVentanaCondOps' (Ventana Conditional Ops)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.zba)] = .{ + result[@intFromEnum(Feature.zba)] = .{ .llvm_name = "zba", .description = "'Zba' (Address Generation Instructions)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.zbb)] = .{ + result[@intFromEnum(Feature.zbb)] = .{ .llvm_name = "zbb", .description = "'Zbb' (Basic Bit-Manipulation)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.zbc)] = .{ + result[@intFromEnum(Feature.zbc)] = .{ .llvm_name = "zbc", .description = "'Zbc' (Carry-Less Multiplication)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.zbkb)] = .{ + result[@intFromEnum(Feature.zbkb)] = .{ .llvm_name = "zbkb", .description = "'Zbkb' (Bitmanip instructions for Cryptography)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.zbkc)] = .{ + result[@intFromEnum(Feature.zbkc)] = .{ .llvm_name = "zbkc", .description = "'Zbkc' (Carry-less multiply instructions for Cryptography)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.zbkx)] = .{ + result[@intFromEnum(Feature.zbkx)] = .{ .llvm_name = "zbkx", .description = "'Zbkx' (Crossbar permutation instructions)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.zbs)] = .{ + result[@intFromEnum(Feature.zbs)] = .{ .llvm_name = "zbs", .description = "'Zbs' (Single-Bit Instructions)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.zdinx)] = .{ + result[@intFromEnum(Feature.zdinx)] = .{ .llvm_name = "zdinx", .description = "'Zdinx' (Double in Integer)", .dependencies = featureSet(&[_]Feature{ .zfinx, }), }; - result[@enumToInt(Feature.zfh)] = .{ + result[@intFromEnum(Feature.zfh)] = .{ .llvm_name = "zfh", .description = "'Zfh' (Half-Precision Floating-Point)", .dependencies = featureSet(&[_]Feature{ .f, }), }; - result[@enumToInt(Feature.zfhmin)] = .{ + result[@intFromEnum(Feature.zfhmin)] = .{ .llvm_name = "zfhmin", .description = "'Zfhmin' (Half-Precision Floating-Point Minimal)", .dependencies = featureSet(&[_]Feature{ .f, }), }; - result[@enumToInt(Feature.zfinx)] = .{ + result[@intFromEnum(Feature.zfinx)] = .{ .llvm_name = "zfinx", .description = "'Zfinx' (Float in Integer)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.zhinx)] = .{ + result[@intFromEnum(Feature.zhinx)] = .{ .llvm_name = "zhinx", .description = "'Zhinx' (Half Float in Integer)", .dependencies = featureSet(&[_]Feature{ .zfinx, }), }; - result[@enumToInt(Feature.zhinxmin)] = .{ + result[@intFromEnum(Feature.zhinxmin)] = .{ .llvm_name = "zhinxmin", .description = "'Zhinxmin' (Half Float in Integer Minimal)", .dependencies = featureSet(&[_]Feature{ .zfinx, }), }; - result[@enumToInt(Feature.zicbom)] = .{ + result[@intFromEnum(Feature.zicbom)] = .{ .llvm_name = "zicbom", .description = "'Zicbom' (Cache-Block Management Instructions)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.zicbop)] = .{ + result[@intFromEnum(Feature.zicbop)] = .{ .llvm_name = "zicbop", .description = "'Zicbop' (Cache-Block Prefetch Instructions)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.zicboz)] = .{ + result[@intFromEnum(Feature.zicboz)] = .{ .llvm_name = "zicboz", .description = "'Zicboz' (Cache-Block Zero Instructions)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.zihintpause)] = .{ + result[@intFromEnum(Feature.zihintpause)] = .{ .llvm_name = "zihintpause", .description = "'zihintpause' (Pause Hint)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.zk)] = .{ + result[@intFromEnum(Feature.zk)] = .{ .llvm_name = "zk", .description = "'Zk' (Standard scalar cryptography extension)", .dependencies = featureSet(&[_]Feature{ @@ -553,7 +553,7 @@ pub const all_features = blk: { .zkt, }), }; - result[@enumToInt(Feature.zkn)] = .{ + result[@intFromEnum(Feature.zkn)] = .{ .llvm_name = "zkn", .description = "'Zkn' (NIST Algorithm Suite)", .dependencies = featureSet(&[_]Feature{ @@ -565,27 +565,27 @@ pub const all_features = blk: { .zknh, }), }; - result[@enumToInt(Feature.zknd)] = .{ + result[@intFromEnum(Feature.zknd)] = .{ .llvm_name = "zknd", .description = "'Zknd' (NIST Suite: AES Decryption)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.zkne)] = .{ + result[@intFromEnum(Feature.zkne)] = .{ .llvm_name = "zkne", .description = "'Zkne' (NIST Suite: AES Encryption)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.zknh)] = .{ + result[@intFromEnum(Feature.zknh)] = .{ .llvm_name = "zknh", .description = "'Zknh' (NIST Suite: Hash Function Instructions)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.zkr)] = .{ + result[@intFromEnum(Feature.zkr)] = .{ .llvm_name = "zkr", .description = "'Zkr' (Entropy Source Extension)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.zks)] = .{ + result[@intFromEnum(Feature.zks)] = .{ .llvm_name = "zks", .description = "'Zks' (ShangMi Algorithm Suite)", .dependencies = featureSet(&[_]Feature{ @@ -596,48 +596,48 @@ pub const all_features = blk: { .zksh, }), }; - result[@enumToInt(Feature.zksed)] = .{ + result[@intFromEnum(Feature.zksed)] = .{ .llvm_name = "zksed", .description = "'Zksed' (ShangMi Suite: SM4 Block Cipher Instructions)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.zksh)] = .{ + result[@intFromEnum(Feature.zksh)] = .{ .llvm_name = "zksh", .description = "'Zksh' (ShangMi Suite: SM3 Hash Function Instructions)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.zkt)] = .{ + result[@intFromEnum(Feature.zkt)] = .{ .llvm_name = "zkt", .description = "'Zkt' (Data Independent Execution Latency)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.zmmul)] = .{ + result[@intFromEnum(Feature.zmmul)] = .{ .llvm_name = "zmmul", .description = "'Zmmul' (Integer Multiplication)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.zve32f)] = .{ + result[@intFromEnum(Feature.zve32f)] = .{ .llvm_name = "zve32f", .description = "'Zve32f' (Vector Extensions for Embedded Processors with maximal 32 EEW and F extension)", .dependencies = featureSet(&[_]Feature{ .zve32x, }), }; - result[@enumToInt(Feature.zve32x)] = .{ + result[@intFromEnum(Feature.zve32x)] = .{ .llvm_name = "zve32x", .description = "'Zve32x' (Vector Extensions for Embedded Processors with maximal 32 EEW)", .dependencies = featureSet(&[_]Feature{ .zvl32b, }), }; - result[@enumToInt(Feature.zve64d)] = .{ + result[@intFromEnum(Feature.zve64d)] = .{ .llvm_name = "zve64d", .description = "'Zve64d' (Vector Extensions for Embedded Processors with maximal 64 EEW, F and D extension)", .dependencies = featureSet(&[_]Feature{ .zve64f, }), }; - result[@enumToInt(Feature.zve64f)] = .{ + result[@intFromEnum(Feature.zve64f)] = .{ .llvm_name = "zve64f", .description = "'Zve64f' (Vector Extensions for Embedded Processors with maximal 64 EEW and F extension)", .dependencies = featureSet(&[_]Feature{ @@ -645,7 +645,7 @@ pub const all_features = blk: { .zve64x, }), }; - result[@enumToInt(Feature.zve64x)] = .{ + result[@intFromEnum(Feature.zve64x)] = .{ .llvm_name = "zve64x", .description = "'Zve64x' (Vector Extensions for Embedded Processors with maximal 64 EEW)", .dependencies = featureSet(&[_]Feature{ @@ -653,82 +653,82 @@ pub const all_features = blk: { .zvl64b, }), }; - result[@enumToInt(Feature.zvl1024b)] = .{ + result[@intFromEnum(Feature.zvl1024b)] = .{ .llvm_name = "zvl1024b", .description = "'Zvl' (Minimum Vector Length) 1024", .dependencies = featureSet(&[_]Feature{ .zvl512b, }), }; - result[@enumToInt(Feature.zvl128b)] = .{ + result[@intFromEnum(Feature.zvl128b)] = .{ .llvm_name = "zvl128b", .description = "'Zvl' (Minimum Vector Length) 128", .dependencies = featureSet(&[_]Feature{ .zvl64b, }), }; - result[@enumToInt(Feature.zvl16384b)] = .{ + result[@intFromEnum(Feature.zvl16384b)] = .{ .llvm_name = "zvl16384b", .description = "'Zvl' (Minimum Vector Length) 16384", .dependencies = featureSet(&[_]Feature{ .zvl8192b, }), }; - result[@enumToInt(Feature.zvl2048b)] = .{ + result[@intFromEnum(Feature.zvl2048b)] = .{ .llvm_name = "zvl2048b", .description = "'Zvl' (Minimum Vector Length) 2048", .dependencies = featureSet(&[_]Feature{ .zvl1024b, }), }; - result[@enumToInt(Feature.zvl256b)] = .{ + result[@intFromEnum(Feature.zvl256b)] = .{ .llvm_name = "zvl256b", .description = "'Zvl' (Minimum Vector Length) 256", .dependencies = featureSet(&[_]Feature{ .zvl128b, }), }; - result[@enumToInt(Feature.zvl32768b)] = .{ + result[@intFromEnum(Feature.zvl32768b)] = .{ .llvm_name = "zvl32768b", .description = "'Zvl' (Minimum Vector Length) 32768", .dependencies = featureSet(&[_]Feature{ .zvl16384b, }), }; - result[@enumToInt(Feature.zvl32b)] = .{ + result[@intFromEnum(Feature.zvl32b)] = .{ .llvm_name = "zvl32b", .description = "'Zvl' (Minimum Vector Length) 32", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.zvl4096b)] = .{ + result[@intFromEnum(Feature.zvl4096b)] = .{ .llvm_name = "zvl4096b", .description = "'Zvl' (Minimum Vector Length) 4096", .dependencies = featureSet(&[_]Feature{ .zvl2048b, }), }; - result[@enumToInt(Feature.zvl512b)] = .{ + result[@intFromEnum(Feature.zvl512b)] = .{ .llvm_name = "zvl512b", .description = "'Zvl' (Minimum Vector Length) 512", .dependencies = featureSet(&[_]Feature{ .zvl256b, }), }; - result[@enumToInt(Feature.zvl64b)] = .{ + result[@intFromEnum(Feature.zvl64b)] = .{ .llvm_name = "zvl64b", .description = "'Zvl' (Minimum Vector Length) 64", .dependencies = featureSet(&[_]Feature{ .zvl32b, }), }; - result[@enumToInt(Feature.zvl65536b)] = .{ + result[@intFromEnum(Feature.zvl65536b)] = .{ .llvm_name = "zvl65536b", .description = "'Zvl' (Minimum Vector Length) 65536", .dependencies = featureSet(&[_]Feature{ .zvl32768b, }), }; - result[@enumToInt(Feature.zvl8192b)] = .{ + result[@intFromEnum(Feature.zvl8192b)] = .{ .llvm_name = "zvl8192b", .description = "'Zvl' (Minimum Vector Length) 8192", .dependencies = featureSet(&[_]Feature{ diff --git a/lib/std/target/s390x.zig b/lib/std/target/s390x.zig index 546cbadfbd..b642847258 100644 --- a/lib/std/target/s390x.zig +++ b/lib/std/target/s390x.zig @@ -57,207 +57,207 @@ pub const all_features = blk: { const len = @typeInfo(Feature).Enum.fields.len; std.debug.assert(len <= CpuFeature.Set.needed_bit_count); var result: [len]CpuFeature = undefined; - result[@enumToInt(Feature.bear_enhancement)] = .{ + result[@intFromEnum(Feature.bear_enhancement)] = .{ .llvm_name = "bear-enhancement", .description = "Assume that the BEAR-enhancement facility is installed", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.deflate_conversion)] = .{ + result[@intFromEnum(Feature.deflate_conversion)] = .{ .llvm_name = "deflate-conversion", .description = "Assume that the deflate-conversion facility is installed", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.dfp_packed_conversion)] = .{ + result[@intFromEnum(Feature.dfp_packed_conversion)] = .{ .llvm_name = "dfp-packed-conversion", .description = "Assume that the DFP packed-conversion facility is installed", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.dfp_zoned_conversion)] = .{ + result[@intFromEnum(Feature.dfp_zoned_conversion)] = .{ .llvm_name = "dfp-zoned-conversion", .description = "Assume that the DFP zoned-conversion facility is installed", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.distinct_ops)] = .{ + result[@intFromEnum(Feature.distinct_ops)] = .{ .llvm_name = "distinct-ops", .description = "Assume that the distinct-operands facility is installed", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.enhanced_dat_2)] = .{ + result[@intFromEnum(Feature.enhanced_dat_2)] = .{ .llvm_name = "enhanced-dat-2", .description = "Assume that the enhanced-DAT facility 2 is installed", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.enhanced_sort)] = .{ + result[@intFromEnum(Feature.enhanced_sort)] = .{ .llvm_name = "enhanced-sort", .description = "Assume that the enhanced-sort facility is installed", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.execution_hint)] = .{ + result[@intFromEnum(Feature.execution_hint)] = .{ .llvm_name = "execution-hint", .description = "Assume that the execution-hint facility is installed", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.fast_serialization)] = .{ + result[@intFromEnum(Feature.fast_serialization)] = .{ .llvm_name = "fast-serialization", .description = "Assume that the fast-serialization facility is installed", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.fp_extension)] = .{ + result[@intFromEnum(Feature.fp_extension)] = .{ .llvm_name = "fp-extension", .description = "Assume that the floating-point extension facility is installed", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.guarded_storage)] = .{ + result[@intFromEnum(Feature.guarded_storage)] = .{ .llvm_name = "guarded-storage", .description = "Assume that the guarded-storage facility is installed", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.high_word)] = .{ + result[@intFromEnum(Feature.high_word)] = .{ .llvm_name = "high-word", .description = "Assume that the high-word facility is installed", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.insert_reference_bits_multiple)] = .{ + result[@intFromEnum(Feature.insert_reference_bits_multiple)] = .{ .llvm_name = "insert-reference-bits-multiple", .description = "Assume that the insert-reference-bits-multiple facility is installed", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.interlocked_access1)] = .{ + result[@intFromEnum(Feature.interlocked_access1)] = .{ .llvm_name = "interlocked-access1", .description = "Assume that interlocked-access facility 1 is installed", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.load_and_trap)] = .{ + result[@intFromEnum(Feature.load_and_trap)] = .{ .llvm_name = "load-and-trap", .description = "Assume that the load-and-trap facility is installed", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.load_and_zero_rightmost_byte)] = .{ + result[@intFromEnum(Feature.load_and_zero_rightmost_byte)] = .{ .llvm_name = "load-and-zero-rightmost-byte", .description = "Assume that the load-and-zero-rightmost-byte facility is installed", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.load_store_on_cond)] = .{ + result[@intFromEnum(Feature.load_store_on_cond)] = .{ .llvm_name = "load-store-on-cond", .description = "Assume that the load/store-on-condition facility is installed", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.load_store_on_cond_2)] = .{ + result[@intFromEnum(Feature.load_store_on_cond_2)] = .{ .llvm_name = "load-store-on-cond-2", .description = "Assume that the load/store-on-condition facility 2 is installed", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.message_security_assist_extension3)] = .{ + result[@intFromEnum(Feature.message_security_assist_extension3)] = .{ .llvm_name = "message-security-assist-extension3", .description = "Assume that the message-security-assist extension facility 3 is installed", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.message_security_assist_extension4)] = .{ + result[@intFromEnum(Feature.message_security_assist_extension4)] = .{ .llvm_name = "message-security-assist-extension4", .description = "Assume that the message-security-assist extension facility 4 is installed", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.message_security_assist_extension5)] = .{ + result[@intFromEnum(Feature.message_security_assist_extension5)] = .{ .llvm_name = "message-security-assist-extension5", .description = "Assume that the message-security-assist extension facility 5 is installed", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.message_security_assist_extension7)] = .{ + result[@intFromEnum(Feature.message_security_assist_extension7)] = .{ .llvm_name = "message-security-assist-extension7", .description = "Assume that the message-security-assist extension facility 7 is installed", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.message_security_assist_extension8)] = .{ + result[@intFromEnum(Feature.message_security_assist_extension8)] = .{ .llvm_name = "message-security-assist-extension8", .description = "Assume that the message-security-assist extension facility 8 is installed", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.message_security_assist_extension9)] = .{ + result[@intFromEnum(Feature.message_security_assist_extension9)] = .{ .llvm_name = "message-security-assist-extension9", .description = "Assume that the message-security-assist extension facility 9 is installed", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.miscellaneous_extensions)] = .{ + result[@intFromEnum(Feature.miscellaneous_extensions)] = .{ .llvm_name = "miscellaneous-extensions", .description = "Assume that the miscellaneous-extensions facility is installed", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.miscellaneous_extensions_2)] = .{ + result[@intFromEnum(Feature.miscellaneous_extensions_2)] = .{ .llvm_name = "miscellaneous-extensions-2", .description = "Assume that the miscellaneous-extensions facility 2 is installed", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.miscellaneous_extensions_3)] = .{ + result[@intFromEnum(Feature.miscellaneous_extensions_3)] = .{ .llvm_name = "miscellaneous-extensions-3", .description = "Assume that the miscellaneous-extensions facility 3 is installed", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.nnp_assist)] = .{ + result[@intFromEnum(Feature.nnp_assist)] = .{ .llvm_name = "nnp-assist", .description = "Assume that the NNP-assist facility is installed", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.population_count)] = .{ + result[@intFromEnum(Feature.population_count)] = .{ .llvm_name = "population-count", .description = "Assume that the population-count facility is installed", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.processor_activity_instrumentation)] = .{ + result[@intFromEnum(Feature.processor_activity_instrumentation)] = .{ .llvm_name = "processor-activity-instrumentation", .description = "Assume that the processor-activity-instrumentation facility is installed", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.processor_assist)] = .{ + result[@intFromEnum(Feature.processor_assist)] = .{ .llvm_name = "processor-assist", .description = "Assume that the processor-assist facility is installed", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reset_dat_protection)] = .{ + result[@intFromEnum(Feature.reset_dat_protection)] = .{ .llvm_name = "reset-dat-protection", .description = "Assume that the reset-DAT-protection facility is installed", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reset_reference_bits_multiple)] = .{ + result[@intFromEnum(Feature.reset_reference_bits_multiple)] = .{ .llvm_name = "reset-reference-bits-multiple", .description = "Assume that the reset-reference-bits-multiple facility is installed", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.soft_float)] = .{ + result[@intFromEnum(Feature.soft_float)] = .{ .llvm_name = "soft-float", .description = "Use software emulation for floating point", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.transactional_execution)] = .{ + result[@intFromEnum(Feature.transactional_execution)] = .{ .llvm_name = "transactional-execution", .description = "Assume that the transactional-execution facility is installed", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.vector)] = .{ + result[@intFromEnum(Feature.vector)] = .{ .llvm_name = "vector", .description = "Assume that the vectory facility is installed", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.vector_enhancements_1)] = .{ + result[@intFromEnum(Feature.vector_enhancements_1)] = .{ .llvm_name = "vector-enhancements-1", .description = "Assume that the vector enhancements facility 1 is installed", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.vector_enhancements_2)] = .{ + result[@intFromEnum(Feature.vector_enhancements_2)] = .{ .llvm_name = "vector-enhancements-2", .description = "Assume that the vector enhancements facility 2 is installed", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.vector_packed_decimal)] = .{ + result[@intFromEnum(Feature.vector_packed_decimal)] = .{ .llvm_name = "vector-packed-decimal", .description = "Assume that the vector packed decimal facility is installed", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.vector_packed_decimal_enhancement)] = .{ + result[@intFromEnum(Feature.vector_packed_decimal_enhancement)] = .{ .llvm_name = "vector-packed-decimal-enhancement", .description = "Assume that the vector packed decimal enhancement facility is installed", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.vector_packed_decimal_enhancement_2)] = .{ + result[@intFromEnum(Feature.vector_packed_decimal_enhancement_2)] = .{ .llvm_name = "vector-packed-decimal-enhancement-2", .description = "Assume that the vector packed decimal enhancement facility 2 is installed", .dependencies = featureSet(&[_]Feature{}), diff --git a/lib/std/target/sparc.zig b/lib/std/target/sparc.zig index 7deb01db24..87bd95697c 100644 --- a/lib/std/target/sparc.zig +++ b/lib/std/target/sparc.zig @@ -35,97 +35,97 @@ pub const all_features = blk: { const len = @typeInfo(Feature).Enum.fields.len; std.debug.assert(len <= CpuFeature.Set.needed_bit_count); var result: [len]CpuFeature = undefined; - result[@enumToInt(Feature.deprecated_v8)] = .{ + result[@intFromEnum(Feature.deprecated_v8)] = .{ .llvm_name = "deprecated-v8", .description = "Enable deprecated V8 instructions in V9 mode", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.detectroundchange)] = .{ + result[@intFromEnum(Feature.detectroundchange)] = .{ .llvm_name = "detectroundchange", .description = "LEON3 erratum detection: Detects any rounding mode change request: use only the round-to-nearest rounding mode", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.fixallfdivsqrt)] = .{ + result[@intFromEnum(Feature.fixallfdivsqrt)] = .{ .llvm_name = "fixallfdivsqrt", .description = "LEON erratum fix: Fix FDIVS/FDIVD/FSQRTS/FSQRTD instructions with NOPs and floating-point store", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.hard_quad_float)] = .{ + result[@intFromEnum(Feature.hard_quad_float)] = .{ .llvm_name = "hard-quad-float", .description = "Enable quad-word floating point instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.hasleoncasa)] = .{ + result[@intFromEnum(Feature.hasleoncasa)] = .{ .llvm_name = "hasleoncasa", .description = "Enable CASA instruction for LEON3 and LEON4 processors", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.hasumacsmac)] = .{ + result[@intFromEnum(Feature.hasumacsmac)] = .{ .llvm_name = "hasumacsmac", .description = "Enable UMAC and SMAC for LEON3 and LEON4 processors", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.insertnopload)] = .{ + result[@intFromEnum(Feature.insertnopload)] = .{ .llvm_name = "insertnopload", .description = "LEON3 erratum fix: Insert a NOP instruction after every single-cycle load instruction when the next instruction is another load/store instruction", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.leon)] = .{ + result[@intFromEnum(Feature.leon)] = .{ .llvm_name = "leon", .description = "Enable LEON extensions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.leoncyclecounter)] = .{ + result[@intFromEnum(Feature.leoncyclecounter)] = .{ .llvm_name = "leoncyclecounter", .description = "Use the Leon cycle counter register", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.leonpwrpsr)] = .{ + result[@intFromEnum(Feature.leonpwrpsr)] = .{ .llvm_name = "leonpwrpsr", .description = "Enable the PWRPSR instruction", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.no_fmuls)] = .{ + result[@intFromEnum(Feature.no_fmuls)] = .{ .llvm_name = "no-fmuls", .description = "Disable the fmuls instruction.", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.no_fsmuld)] = .{ + result[@intFromEnum(Feature.no_fsmuld)] = .{ .llvm_name = "no-fsmuld", .description = "Disable the fsmuld instruction.", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.popc)] = .{ + result[@intFromEnum(Feature.popc)] = .{ .llvm_name = "popc", .description = "Use the popc (population count) instruction", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.soft_float)] = .{ + result[@intFromEnum(Feature.soft_float)] = .{ .llvm_name = "soft-float", .description = "Use software emulation for floating point", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.soft_mul_div)] = .{ + result[@intFromEnum(Feature.soft_mul_div)] = .{ .llvm_name = "soft-mul-div", .description = "Use software emulation for integer multiply and divide", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.v9)] = .{ + result[@intFromEnum(Feature.v9)] = .{ .llvm_name = "v9", .description = "Enable SPARC-V9 instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.vis)] = .{ + result[@intFromEnum(Feature.vis)] = .{ .llvm_name = "vis", .description = "Enable UltraSPARC Visual Instruction Set extensions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.vis2)] = .{ + result[@intFromEnum(Feature.vis2)] = .{ .llvm_name = "vis2", .description = "Enable Visual Instruction Set extensions II", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.vis3)] = .{ + result[@intFromEnum(Feature.vis3)] = .{ .llvm_name = "vis3", .description = "Enable Visual Instruction Set extensions III", .dependencies = featureSet(&[_]Feature{}), diff --git a/lib/std/target/spirv.zig b/lib/std/target/spirv.zig index b0f5a19461..9d79aff221 100644 --- a/lib/std/target/spirv.zig +++ b/lib/std/target/spirv.zig @@ -304,803 +304,803 @@ pub const all_features = blk: { const len = @typeInfo(Feature).Enum.fields.len; std.debug.assert(len <= CpuFeature.Set.needed_bit_count); var result: [len]CpuFeature = undefined; - result[@enumToInt(Feature.v1_1)] = .{ + result[@intFromEnum(Feature.v1_1)] = .{ .llvm_name = null, .description = "SPIR-V version 1.1", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.v1_2)] = .{ + result[@intFromEnum(Feature.v1_2)] = .{ .llvm_name = null, .description = "SPIR-V version 1.2", .dependencies = featureSet(&[_]Feature{ .v1_1, }), }; - result[@enumToInt(Feature.v1_3)] = .{ + result[@intFromEnum(Feature.v1_3)] = .{ .llvm_name = null, .description = "SPIR-V version 1.3", .dependencies = featureSet(&[_]Feature{ .v1_2, }), }; - result[@enumToInt(Feature.v1_4)] = .{ + result[@intFromEnum(Feature.v1_4)] = .{ .llvm_name = null, .description = "SPIR-V version 1.4", .dependencies = featureSet(&[_]Feature{ .v1_3, }), }; - result[@enumToInt(Feature.v1_5)] = .{ + result[@intFromEnum(Feature.v1_5)] = .{ .llvm_name = null, .description = "SPIR-V version 1.5", .dependencies = featureSet(&[_]Feature{ .v1_4, }), }; - result[@enumToInt(Feature.SPV_AMD_shader_fragment_mask)] = .{ + result[@intFromEnum(Feature.SPV_AMD_shader_fragment_mask)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_AMD_shader_fragment_mask", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_AMD_gpu_shader_int16)] = .{ + result[@intFromEnum(Feature.SPV_AMD_gpu_shader_int16)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_AMD_gpu_shader_int16", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_AMD_gpu_shader_half_float)] = .{ + result[@intFromEnum(Feature.SPV_AMD_gpu_shader_half_float)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_AMD_gpu_shader_half_float", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_AMD_texture_gather_bias_lod)] = .{ + result[@intFromEnum(Feature.SPV_AMD_texture_gather_bias_lod)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_AMD_texture_gather_bias_lod", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_AMD_shader_ballot)] = .{ + result[@intFromEnum(Feature.SPV_AMD_shader_ballot)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_AMD_shader_ballot", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_AMD_gcn_shader)] = .{ + result[@intFromEnum(Feature.SPV_AMD_gcn_shader)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_AMD_gcn_shader", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_AMD_shader_image_load_store_lod)] = .{ + result[@intFromEnum(Feature.SPV_AMD_shader_image_load_store_lod)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_AMD_shader_image_load_store_lod", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_AMD_shader_explicit_vertex_parameter)] = .{ + result[@intFromEnum(Feature.SPV_AMD_shader_explicit_vertex_parameter)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_AMD_shader_explicit_vertex_parameter", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_AMD_shader_trinary_minmax)] = .{ + result[@intFromEnum(Feature.SPV_AMD_shader_trinary_minmax)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_AMD_shader_trinary_minmax", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_AMD_gpu_shader_half_float_fetch)] = .{ + result[@intFromEnum(Feature.SPV_AMD_gpu_shader_half_float_fetch)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_AMD_gpu_shader_half_float_fetch", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_GOOGLE_hlsl_functionality1)] = .{ + result[@intFromEnum(Feature.SPV_GOOGLE_hlsl_functionality1)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_GOOGLE_hlsl_functionality1", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_GOOGLE_user_type)] = .{ + result[@intFromEnum(Feature.SPV_GOOGLE_user_type)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_GOOGLE_user_type", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_GOOGLE_decorate_string)] = .{ + result[@intFromEnum(Feature.SPV_GOOGLE_decorate_string)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_GOOGLE_decorate_string", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_EXT_demote_to_helper_invocation)] = .{ + result[@intFromEnum(Feature.SPV_EXT_demote_to_helper_invocation)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_EXT_demote_to_helper_invocation", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_EXT_descriptor_indexing)] = .{ + result[@intFromEnum(Feature.SPV_EXT_descriptor_indexing)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_EXT_descriptor_indexing", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_EXT_fragment_fully_covered)] = .{ + result[@intFromEnum(Feature.SPV_EXT_fragment_fully_covered)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_EXT_fragment_fully_covered", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_EXT_shader_stencil_export)] = .{ + result[@intFromEnum(Feature.SPV_EXT_shader_stencil_export)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_EXT_shader_stencil_export", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_EXT_physical_storage_buffer)] = .{ + result[@intFromEnum(Feature.SPV_EXT_physical_storage_buffer)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_EXT_physical_storage_buffer", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_EXT_shader_atomic_float_add)] = .{ + result[@intFromEnum(Feature.SPV_EXT_shader_atomic_float_add)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_EXT_shader_atomic_float_add", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_EXT_shader_atomic_float_min_max)] = .{ + result[@intFromEnum(Feature.SPV_EXT_shader_atomic_float_min_max)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_EXT_shader_atomic_float_min_max", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_EXT_shader_image_int64)] = .{ + result[@intFromEnum(Feature.SPV_EXT_shader_image_int64)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_EXT_shader_image_int64", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_EXT_fragment_shader_interlock)] = .{ + result[@intFromEnum(Feature.SPV_EXT_fragment_shader_interlock)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_EXT_fragment_shader_interlock", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_EXT_fragment_invocation_density)] = .{ + result[@intFromEnum(Feature.SPV_EXT_fragment_invocation_density)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_EXT_fragment_invocation_density", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_EXT_shader_viewport_index_layer)] = .{ + result[@intFromEnum(Feature.SPV_EXT_shader_viewport_index_layer)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_EXT_shader_viewport_index_layer", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_INTEL_loop_fuse)] = .{ + result[@intFromEnum(Feature.SPV_INTEL_loop_fuse)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_INTEL_loop_fuse", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_INTEL_fpga_dsp_control)] = .{ + result[@intFromEnum(Feature.SPV_INTEL_fpga_dsp_control)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_INTEL_fpga_dsp_control", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_INTEL_fpga_reg)] = .{ + result[@intFromEnum(Feature.SPV_INTEL_fpga_reg)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_INTEL_fpga_reg", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_INTEL_fpga_memory_accesses)] = .{ + result[@intFromEnum(Feature.SPV_INTEL_fpga_memory_accesses)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_INTEL_fpga_memory_accesses", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_INTEL_fpga_loop_controls)] = .{ + result[@intFromEnum(Feature.SPV_INTEL_fpga_loop_controls)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_INTEL_fpga_loop_controls", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_INTEL_io_pipes)] = .{ + result[@intFromEnum(Feature.SPV_INTEL_io_pipes)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_INTEL_io_pipes", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_INTEL_unstructured_loop_controls)] = .{ + result[@intFromEnum(Feature.SPV_INTEL_unstructured_loop_controls)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_INTEL_unstructured_loop_controls", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_INTEL_blocking_pipes)] = .{ + result[@intFromEnum(Feature.SPV_INTEL_blocking_pipes)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_INTEL_blocking_pipes", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_INTEL_device_side_avc_motion_estimation)] = .{ + result[@intFromEnum(Feature.SPV_INTEL_device_side_avc_motion_estimation)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_INTEL_device_side_avc_motion_estimation", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_INTEL_fpga_memory_attributes)] = .{ + result[@intFromEnum(Feature.SPV_INTEL_fpga_memory_attributes)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_INTEL_fpga_memory_attributes", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_INTEL_fp_fast_math_mode)] = .{ + result[@intFromEnum(Feature.SPV_INTEL_fp_fast_math_mode)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_INTEL_fp_fast_math_mode", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_INTEL_media_block_io)] = .{ + result[@intFromEnum(Feature.SPV_INTEL_media_block_io)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_INTEL_media_block_io", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_INTEL_shader_integer_functions2)] = .{ + result[@intFromEnum(Feature.SPV_INTEL_shader_integer_functions2)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_INTEL_shader_integer_functions2", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_INTEL_subgroups)] = .{ + result[@intFromEnum(Feature.SPV_INTEL_subgroups)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_INTEL_subgroups", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_INTEL_fpga_cluster_attributes)] = .{ + result[@intFromEnum(Feature.SPV_INTEL_fpga_cluster_attributes)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_INTEL_fpga_cluster_attributes", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_INTEL_kernel_attributes)] = .{ + result[@intFromEnum(Feature.SPV_INTEL_kernel_attributes)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_INTEL_kernel_attributes", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_INTEL_arbitrary_precision_integers)] = .{ + result[@intFromEnum(Feature.SPV_INTEL_arbitrary_precision_integers)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_INTEL_arbitrary_precision_integers", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_KHR_8bit_storage)] = .{ + result[@intFromEnum(Feature.SPV_KHR_8bit_storage)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_KHR_8bit_storage", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_KHR_shader_clock)] = .{ + result[@intFromEnum(Feature.SPV_KHR_shader_clock)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_KHR_shader_clock", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_KHR_device_group)] = .{ + result[@intFromEnum(Feature.SPV_KHR_device_group)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_KHR_device_group", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_KHR_16bit_storage)] = .{ + result[@intFromEnum(Feature.SPV_KHR_16bit_storage)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_KHR_16bit_storage", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_KHR_variable_pointers)] = .{ + result[@intFromEnum(Feature.SPV_KHR_variable_pointers)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_KHR_variable_pointers", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_KHR_no_integer_wrap_decoration)] = .{ + result[@intFromEnum(Feature.SPV_KHR_no_integer_wrap_decoration)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_KHR_no_integer_wrap_decoration", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_KHR_subgroup_vote)] = .{ + result[@intFromEnum(Feature.SPV_KHR_subgroup_vote)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_KHR_subgroup_vote", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_KHR_multiview)] = .{ + result[@intFromEnum(Feature.SPV_KHR_multiview)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_KHR_multiview", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_KHR_shader_ballot)] = .{ + result[@intFromEnum(Feature.SPV_KHR_shader_ballot)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_KHR_shader_ballot", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_KHR_vulkan_memory_model)] = .{ + result[@intFromEnum(Feature.SPV_KHR_vulkan_memory_model)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_KHR_vulkan_memory_model", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_KHR_physical_storage_buffer)] = .{ + result[@intFromEnum(Feature.SPV_KHR_physical_storage_buffer)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_KHR_physical_storage_buffer", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_KHR_workgroup_memory_explicit_layout)] = .{ + result[@intFromEnum(Feature.SPV_KHR_workgroup_memory_explicit_layout)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_KHR_workgroup_memory_explicit_layout", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_KHR_fragment_shading_rate)] = .{ + result[@intFromEnum(Feature.SPV_KHR_fragment_shading_rate)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_KHR_fragment_shading_rate", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_KHR_shader_atomic_counter_ops)] = .{ + result[@intFromEnum(Feature.SPV_KHR_shader_atomic_counter_ops)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_KHR_shader_atomic_counter_ops", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_KHR_shader_draw_parameters)] = .{ + result[@intFromEnum(Feature.SPV_KHR_shader_draw_parameters)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_KHR_shader_draw_parameters", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_KHR_storage_buffer_storage_class)] = .{ + result[@intFromEnum(Feature.SPV_KHR_storage_buffer_storage_class)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_KHR_storage_buffer_storage_class", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_KHR_linkonce_odr)] = .{ + result[@intFromEnum(Feature.SPV_KHR_linkonce_odr)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_KHR_linkonce_odr", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_KHR_terminate_invocation)] = .{ + result[@intFromEnum(Feature.SPV_KHR_terminate_invocation)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_KHR_terminate_invocation", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_KHR_non_semantic_info)] = .{ + result[@intFromEnum(Feature.SPV_KHR_non_semantic_info)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_KHR_non_semantic_info", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_KHR_post_depth_coverage)] = .{ + result[@intFromEnum(Feature.SPV_KHR_post_depth_coverage)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_KHR_post_depth_coverage", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_KHR_expect_assume)] = .{ + result[@intFromEnum(Feature.SPV_KHR_expect_assume)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_KHR_expect_assume", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_KHR_ray_tracing)] = .{ + result[@intFromEnum(Feature.SPV_KHR_ray_tracing)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_KHR_ray_tracing", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_KHR_ray_query)] = .{ + result[@intFromEnum(Feature.SPV_KHR_ray_query)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_KHR_ray_query", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_KHR_float_controls)] = .{ + result[@intFromEnum(Feature.SPV_KHR_float_controls)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_KHR_float_controls", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_NV_viewport_array2)] = .{ + result[@intFromEnum(Feature.SPV_NV_viewport_array2)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_NV_viewport_array2", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_NV_shader_subgroup_partitioned)] = .{ + result[@intFromEnum(Feature.SPV_NV_shader_subgroup_partitioned)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_NV_shader_subgroup_partitioned", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_NVX_multiview_per_view_attributes)] = .{ + result[@intFromEnum(Feature.SPV_NVX_multiview_per_view_attributes)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_NVX_multiview_per_view_attributes", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_NV_ray_tracing)] = .{ + result[@intFromEnum(Feature.SPV_NV_ray_tracing)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_NV_ray_tracing", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_NV_shader_image_footprint)] = .{ + result[@intFromEnum(Feature.SPV_NV_shader_image_footprint)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_NV_shader_image_footprint", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_NV_shading_rate)] = .{ + result[@intFromEnum(Feature.SPV_NV_shading_rate)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_NV_shading_rate", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_NV_stereo_view_rendering)] = .{ + result[@intFromEnum(Feature.SPV_NV_stereo_view_rendering)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_NV_stereo_view_rendering", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_NV_compute_shader_derivatives)] = .{ + result[@intFromEnum(Feature.SPV_NV_compute_shader_derivatives)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_NV_compute_shader_derivatives", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_NV_shader_sm_builtins)] = .{ + result[@intFromEnum(Feature.SPV_NV_shader_sm_builtins)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_NV_shader_sm_builtins", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_NV_mesh_shader)] = .{ + result[@intFromEnum(Feature.SPV_NV_mesh_shader)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_NV_mesh_shader", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_NV_geometry_shader_passthrough)] = .{ + result[@intFromEnum(Feature.SPV_NV_geometry_shader_passthrough)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_NV_geometry_shader_passthrough", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_NV_fragment_shader_barycentric)] = .{ + result[@intFromEnum(Feature.SPV_NV_fragment_shader_barycentric)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_NV_fragment_shader_barycentric", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_NV_cooperative_matrix)] = .{ + result[@intFromEnum(Feature.SPV_NV_cooperative_matrix)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_NV_cooperative_matrix", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SPV_NV_sample_mask_override_coverage)] = .{ + result[@intFromEnum(Feature.SPV_NV_sample_mask_override_coverage)] = .{ .llvm_name = null, .description = "SPIR-V extension SPV_NV_sample_mask_override_coverage", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.Matrix)] = .{ + result[@intFromEnum(Feature.Matrix)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability Matrix", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.Shader)] = .{ + result[@intFromEnum(Feature.Shader)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability Shader", .dependencies = featureSet(&[_]Feature{ .Matrix, }), }; - result[@enumToInt(Feature.Geometry)] = .{ + result[@intFromEnum(Feature.Geometry)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability Geometry", .dependencies = featureSet(&[_]Feature{ .Shader, }), }; - result[@enumToInt(Feature.Tessellation)] = .{ + result[@intFromEnum(Feature.Tessellation)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability Tessellation", .dependencies = featureSet(&[_]Feature{ .Shader, }), }; - result[@enumToInt(Feature.Addresses)] = .{ + result[@intFromEnum(Feature.Addresses)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability Addresses", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.Linkage)] = .{ + result[@intFromEnum(Feature.Linkage)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability Linkage", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.Kernel)] = .{ + result[@intFromEnum(Feature.Kernel)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability Kernel", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.Vector16)] = .{ + result[@intFromEnum(Feature.Vector16)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability Vector16", .dependencies = featureSet(&[_]Feature{ .Kernel, }), }; - result[@enumToInt(Feature.Float16Buffer)] = .{ + result[@intFromEnum(Feature.Float16Buffer)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability Float16Buffer", .dependencies = featureSet(&[_]Feature{ .Kernel, }), }; - result[@enumToInt(Feature.Float16)] = .{ + result[@intFromEnum(Feature.Float16)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability Float16", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.Float64)] = .{ + result[@intFromEnum(Feature.Float64)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability Float64", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.Int64)] = .{ + result[@intFromEnum(Feature.Int64)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability Int64", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.Int64Atomics)] = .{ + result[@intFromEnum(Feature.Int64Atomics)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability Int64Atomics", .dependencies = featureSet(&[_]Feature{ .Int64, }), }; - result[@enumToInt(Feature.ImageBasic)] = .{ + result[@intFromEnum(Feature.ImageBasic)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability ImageBasic", .dependencies = featureSet(&[_]Feature{ .Kernel, }), }; - result[@enumToInt(Feature.ImageReadWrite)] = .{ + result[@intFromEnum(Feature.ImageReadWrite)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability ImageReadWrite", .dependencies = featureSet(&[_]Feature{ .ImageBasic, }), }; - result[@enumToInt(Feature.ImageMipmap)] = .{ + result[@intFromEnum(Feature.ImageMipmap)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability ImageMipmap", .dependencies = featureSet(&[_]Feature{ .ImageBasic, }), }; - result[@enumToInt(Feature.Pipes)] = .{ + result[@intFromEnum(Feature.Pipes)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability Pipes", .dependencies = featureSet(&[_]Feature{ .Kernel, }), }; - result[@enumToInt(Feature.Groups)] = .{ + result[@intFromEnum(Feature.Groups)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability Groups", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.DeviceEnqueue)] = .{ + result[@intFromEnum(Feature.DeviceEnqueue)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability DeviceEnqueue", .dependencies = featureSet(&[_]Feature{ .Kernel, }), }; - result[@enumToInt(Feature.LiteralSampler)] = .{ + result[@intFromEnum(Feature.LiteralSampler)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability LiteralSampler", .dependencies = featureSet(&[_]Feature{ .Kernel, }), }; - result[@enumToInt(Feature.AtomicStorage)] = .{ + result[@intFromEnum(Feature.AtomicStorage)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability AtomicStorage", .dependencies = featureSet(&[_]Feature{ .Shader, }), }; - result[@enumToInt(Feature.Int16)] = .{ + result[@intFromEnum(Feature.Int16)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability Int16", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.TessellationPointSize)] = .{ + result[@intFromEnum(Feature.TessellationPointSize)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability TessellationPointSize", .dependencies = featureSet(&[_]Feature{ .Tessellation, }), }; - result[@enumToInt(Feature.GeometryPointSize)] = .{ + result[@intFromEnum(Feature.GeometryPointSize)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability GeometryPointSize", .dependencies = featureSet(&[_]Feature{ .Geometry, }), }; - result[@enumToInt(Feature.ImageGatherExtended)] = .{ + result[@intFromEnum(Feature.ImageGatherExtended)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability ImageGatherExtended", .dependencies = featureSet(&[_]Feature{ .Shader, }), }; - result[@enumToInt(Feature.StorageImageMultisample)] = .{ + result[@intFromEnum(Feature.StorageImageMultisample)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability StorageImageMultisample", .dependencies = featureSet(&[_]Feature{ .Shader, }), }; - result[@enumToInt(Feature.UniformBufferArrayDynamicIndexing)] = .{ + result[@intFromEnum(Feature.UniformBufferArrayDynamicIndexing)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability UniformBufferArrayDynamicIndexing", .dependencies = featureSet(&[_]Feature{ .Shader, }), }; - result[@enumToInt(Feature.SampledImageArrayDynamicIndexing)] = .{ + result[@intFromEnum(Feature.SampledImageArrayDynamicIndexing)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability SampledImageArrayDynamicIndexing", .dependencies = featureSet(&[_]Feature{ .Shader, }), }; - result[@enumToInt(Feature.StorageBufferArrayDynamicIndexing)] = .{ + result[@intFromEnum(Feature.StorageBufferArrayDynamicIndexing)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability StorageBufferArrayDynamicIndexing", .dependencies = featureSet(&[_]Feature{ .Shader, }), }; - result[@enumToInt(Feature.StorageImageArrayDynamicIndexing)] = .{ + result[@intFromEnum(Feature.StorageImageArrayDynamicIndexing)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability StorageImageArrayDynamicIndexing", .dependencies = featureSet(&[_]Feature{ .Shader, }), }; - result[@enumToInt(Feature.ClipDistance)] = .{ + result[@intFromEnum(Feature.ClipDistance)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability ClipDistance", .dependencies = featureSet(&[_]Feature{ .Shader, }), }; - result[@enumToInt(Feature.CullDistance)] = .{ + result[@intFromEnum(Feature.CullDistance)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability CullDistance", .dependencies = featureSet(&[_]Feature{ .Shader, }), }; - result[@enumToInt(Feature.ImageCubeArray)] = .{ + result[@intFromEnum(Feature.ImageCubeArray)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability ImageCubeArray", .dependencies = featureSet(&[_]Feature{ .SampledCubeArray, }), }; - result[@enumToInt(Feature.SampleRateShading)] = .{ + result[@intFromEnum(Feature.SampleRateShading)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability SampleRateShading", .dependencies = featureSet(&[_]Feature{ .Shader, }), }; - result[@enumToInt(Feature.ImageRect)] = .{ + result[@intFromEnum(Feature.ImageRect)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability ImageRect", .dependencies = featureSet(&[_]Feature{ .SampledRect, }), }; - result[@enumToInt(Feature.SampledRect)] = .{ + result[@intFromEnum(Feature.SampledRect)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability SampledRect", .dependencies = featureSet(&[_]Feature{ .Shader, }), }; - result[@enumToInt(Feature.GenericPointer)] = .{ + result[@intFromEnum(Feature.GenericPointer)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability GenericPointer", .dependencies = featureSet(&[_]Feature{ .Addresses, }), }; - result[@enumToInt(Feature.Int8)] = .{ + result[@intFromEnum(Feature.Int8)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability Int8", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.InputAttachment)] = .{ + result[@intFromEnum(Feature.InputAttachment)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability InputAttachment", .dependencies = featureSet(&[_]Feature{ .Shader, }), }; - result[@enumToInt(Feature.SparseResidency)] = .{ + result[@intFromEnum(Feature.SparseResidency)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability SparseResidency", .dependencies = featureSet(&[_]Feature{ .Shader, }), }; - result[@enumToInt(Feature.MinLod)] = .{ + result[@intFromEnum(Feature.MinLod)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability MinLod", .dependencies = featureSet(&[_]Feature{ .Shader, }), }; - result[@enumToInt(Feature.Sampled1D)] = .{ + result[@intFromEnum(Feature.Sampled1D)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability Sampled1D", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.Image1D)] = .{ + result[@intFromEnum(Feature.Image1D)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability Image1D", .dependencies = featureSet(&[_]Feature{ .Sampled1D, }), }; - result[@enumToInt(Feature.SampledCubeArray)] = .{ + result[@intFromEnum(Feature.SampledCubeArray)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability SampledCubeArray", .dependencies = featureSet(&[_]Feature{ .Shader, }), }; - result[@enumToInt(Feature.SampledBuffer)] = .{ + result[@intFromEnum(Feature.SampledBuffer)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability SampledBuffer", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.ImageBuffer)] = .{ + result[@intFromEnum(Feature.ImageBuffer)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability ImageBuffer", .dependencies = featureSet(&[_]Feature{ .SampledBuffer, }), }; - result[@enumToInt(Feature.ImageMSArray)] = .{ + result[@intFromEnum(Feature.ImageMSArray)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability ImageMSArray", .dependencies = featureSet(&[_]Feature{ .Shader, }), }; - result[@enumToInt(Feature.StorageImageExtendedFormats)] = .{ + result[@intFromEnum(Feature.StorageImageExtendedFormats)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability StorageImageExtendedFormats", .dependencies = featureSet(&[_]Feature{ .Shader, }), }; - result[@enumToInt(Feature.ImageQuery)] = .{ + result[@intFromEnum(Feature.ImageQuery)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability ImageQuery", .dependencies = featureSet(&[_]Feature{ .Shader, }), }; - result[@enumToInt(Feature.DerivativeControl)] = .{ + result[@intFromEnum(Feature.DerivativeControl)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability DerivativeControl", .dependencies = featureSet(&[_]Feature{ .Shader, }), }; - result[@enumToInt(Feature.InterpolationFunction)] = .{ + result[@intFromEnum(Feature.InterpolationFunction)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability InterpolationFunction", .dependencies = featureSet(&[_]Feature{ .Shader, }), }; - result[@enumToInt(Feature.TransformFeedback)] = .{ + result[@intFromEnum(Feature.TransformFeedback)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability TransformFeedback", .dependencies = featureSet(&[_]Feature{ .Shader, }), }; - result[@enumToInt(Feature.GeometryStreams)] = .{ + result[@intFromEnum(Feature.GeometryStreams)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability GeometryStreams", .dependencies = featureSet(&[_]Feature{ .Geometry, }), }; - result[@enumToInt(Feature.StorageImageReadWithoutFormat)] = .{ + result[@intFromEnum(Feature.StorageImageReadWithoutFormat)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability StorageImageReadWithoutFormat", .dependencies = featureSet(&[_]Feature{ .Shader, }), }; - result[@enumToInt(Feature.StorageImageWriteWithoutFormat)] = .{ + result[@intFromEnum(Feature.StorageImageWriteWithoutFormat)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability StorageImageWriteWithoutFormat", .dependencies = featureSet(&[_]Feature{ .Shader, }), }; - result[@enumToInt(Feature.MultiViewport)] = .{ + result[@intFromEnum(Feature.MultiViewport)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability MultiViewport", .dependencies = featureSet(&[_]Feature{ .Geometry, }), }; - result[@enumToInt(Feature.SubgroupDispatch)] = .{ + result[@intFromEnum(Feature.SubgroupDispatch)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability SubgroupDispatch", .dependencies = featureSet(&[_]Feature{ @@ -1108,7 +1108,7 @@ pub const all_features = blk: { .DeviceEnqueue, }), }; - result[@enumToInt(Feature.NamedBarrier)] = .{ + result[@intFromEnum(Feature.NamedBarrier)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability NamedBarrier", .dependencies = featureSet(&[_]Feature{ @@ -1116,7 +1116,7 @@ pub const all_features = blk: { .Kernel, }), }; - result[@enumToInt(Feature.PipeStorage)] = .{ + result[@intFromEnum(Feature.PipeStorage)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability PipeStorage", .dependencies = featureSet(&[_]Feature{ @@ -1124,14 +1124,14 @@ pub const all_features = blk: { .Pipes, }), }; - result[@enumToInt(Feature.GroupNonUniform)] = .{ + result[@intFromEnum(Feature.GroupNonUniform)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability GroupNonUniform", .dependencies = featureSet(&[_]Feature{ .v1_3, }), }; - result[@enumToInt(Feature.GroupNonUniformVote)] = .{ + result[@intFromEnum(Feature.GroupNonUniformVote)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability GroupNonUniformVote", .dependencies = featureSet(&[_]Feature{ @@ -1139,7 +1139,7 @@ pub const all_features = blk: { .GroupNonUniform, }), }; - result[@enumToInt(Feature.GroupNonUniformArithmetic)] = .{ + result[@intFromEnum(Feature.GroupNonUniformArithmetic)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability GroupNonUniformArithmetic", .dependencies = featureSet(&[_]Feature{ @@ -1147,7 +1147,7 @@ pub const all_features = blk: { .GroupNonUniform, }), }; - result[@enumToInt(Feature.GroupNonUniformBallot)] = .{ + result[@intFromEnum(Feature.GroupNonUniformBallot)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability GroupNonUniformBallot", .dependencies = featureSet(&[_]Feature{ @@ -1155,7 +1155,7 @@ pub const all_features = blk: { .GroupNonUniform, }), }; - result[@enumToInt(Feature.GroupNonUniformShuffle)] = .{ + result[@intFromEnum(Feature.GroupNonUniformShuffle)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability GroupNonUniformShuffle", .dependencies = featureSet(&[_]Feature{ @@ -1163,7 +1163,7 @@ pub const all_features = blk: { .GroupNonUniform, }), }; - result[@enumToInt(Feature.GroupNonUniformShuffleRelative)] = .{ + result[@intFromEnum(Feature.GroupNonUniformShuffleRelative)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability GroupNonUniformShuffleRelative", .dependencies = featureSet(&[_]Feature{ @@ -1171,7 +1171,7 @@ pub const all_features = blk: { .GroupNonUniform, }), }; - result[@enumToInt(Feature.GroupNonUniformClustered)] = .{ + result[@intFromEnum(Feature.GroupNonUniformClustered)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability GroupNonUniformClustered", .dependencies = featureSet(&[_]Feature{ @@ -1179,7 +1179,7 @@ pub const all_features = blk: { .GroupNonUniform, }), }; - result[@enumToInt(Feature.GroupNonUniformQuad)] = .{ + result[@intFromEnum(Feature.GroupNonUniformQuad)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability GroupNonUniformQuad", .dependencies = featureSet(&[_]Feature{ @@ -1187,33 +1187,33 @@ pub const all_features = blk: { .GroupNonUniform, }), }; - result[@enumToInt(Feature.ShaderLayer)] = .{ + result[@intFromEnum(Feature.ShaderLayer)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability ShaderLayer", .dependencies = featureSet(&[_]Feature{ .v1_5, }), }; - result[@enumToInt(Feature.ShaderViewportIndex)] = .{ + result[@intFromEnum(Feature.ShaderViewportIndex)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability ShaderViewportIndex", .dependencies = featureSet(&[_]Feature{ .v1_5, }), }; - result[@enumToInt(Feature.FragmentShadingRateKHR)] = .{ + result[@intFromEnum(Feature.FragmentShadingRateKHR)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability FragmentShadingRateKHR", .dependencies = featureSet(&[_]Feature{ .Shader, }), }; - result[@enumToInt(Feature.SubgroupBallotKHR)] = .{ + result[@intFromEnum(Feature.SubgroupBallotKHR)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability SubgroupBallotKHR", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.DrawParameters)] = .{ + result[@intFromEnum(Feature.DrawParameters)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability DrawParameters", .dependencies = featureSet(&[_]Feature{ @@ -1221,47 +1221,47 @@ pub const all_features = blk: { .Shader, }), }; - result[@enumToInt(Feature.WorkgroupMemoryExplicitLayoutKHR)] = .{ + result[@intFromEnum(Feature.WorkgroupMemoryExplicitLayoutKHR)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability WorkgroupMemoryExplicitLayoutKHR", .dependencies = featureSet(&[_]Feature{ .Shader, }), }; - result[@enumToInt(Feature.WorkgroupMemoryExplicitLayout8BitAccessKHR)] = .{ + result[@intFromEnum(Feature.WorkgroupMemoryExplicitLayout8BitAccessKHR)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability WorkgroupMemoryExplicitLayout8BitAccessKHR", .dependencies = featureSet(&[_]Feature{ .WorkgroupMemoryExplicitLayoutKHR, }), }; - result[@enumToInt(Feature.WorkgroupMemoryExplicitLayout16BitAccessKHR)] = .{ + result[@intFromEnum(Feature.WorkgroupMemoryExplicitLayout16BitAccessKHR)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability WorkgroupMemoryExplicitLayout16BitAccessKHR", .dependencies = featureSet(&[_]Feature{ .Shader, }), }; - result[@enumToInt(Feature.SubgroupVoteKHR)] = .{ + result[@intFromEnum(Feature.SubgroupVoteKHR)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability SubgroupVoteKHR", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.StorageBuffer16BitAccess)] = .{ + result[@intFromEnum(Feature.StorageBuffer16BitAccess)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability StorageBuffer16BitAccess", .dependencies = featureSet(&[_]Feature{ .v1_3, }), }; - result[@enumToInt(Feature.StorageUniformBufferBlock16)] = .{ + result[@intFromEnum(Feature.StorageUniformBufferBlock16)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability StorageUniformBufferBlock16", .dependencies = featureSet(&[_]Feature{ .v1_3, }), }; - result[@enumToInt(Feature.UniformAndStorageBuffer16BitAccess)] = .{ + result[@intFromEnum(Feature.UniformAndStorageBuffer16BitAccess)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability UniformAndStorageBuffer16BitAccess", .dependencies = featureSet(&[_]Feature{ @@ -1270,7 +1270,7 @@ pub const all_features = blk: { .StorageUniformBufferBlock16, }), }; - result[@enumToInt(Feature.StorageUniform16)] = .{ + result[@intFromEnum(Feature.StorageUniform16)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability StorageUniform16", .dependencies = featureSet(&[_]Feature{ @@ -1279,28 +1279,28 @@ pub const all_features = blk: { .StorageUniformBufferBlock16, }), }; - result[@enumToInt(Feature.StoragePushConstant16)] = .{ + result[@intFromEnum(Feature.StoragePushConstant16)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability StoragePushConstant16", .dependencies = featureSet(&[_]Feature{ .v1_3, }), }; - result[@enumToInt(Feature.StorageInputOutput16)] = .{ + result[@intFromEnum(Feature.StorageInputOutput16)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability StorageInputOutput16", .dependencies = featureSet(&[_]Feature{ .v1_3, }), }; - result[@enumToInt(Feature.DeviceGroup)] = .{ + result[@intFromEnum(Feature.DeviceGroup)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability DeviceGroup", .dependencies = featureSet(&[_]Feature{ .v1_3, }), }; - result[@enumToInt(Feature.MultiView)] = .{ + result[@intFromEnum(Feature.MultiView)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability MultiView", .dependencies = featureSet(&[_]Feature{ @@ -1308,7 +1308,7 @@ pub const all_features = blk: { .Shader, }), }; - result[@enumToInt(Feature.VariablePointersStorageBuffer)] = .{ + result[@intFromEnum(Feature.VariablePointersStorageBuffer)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability VariablePointersStorageBuffer", .dependencies = featureSet(&[_]Feature{ @@ -1316,7 +1316,7 @@ pub const all_features = blk: { .Shader, }), }; - result[@enumToInt(Feature.VariablePointers)] = .{ + result[@intFromEnum(Feature.VariablePointers)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability VariablePointers", .dependencies = featureSet(&[_]Feature{ @@ -1324,24 +1324,24 @@ pub const all_features = blk: { .VariablePointersStorageBuffer, }), }; - result[@enumToInt(Feature.AtomicStorageOps)] = .{ + result[@intFromEnum(Feature.AtomicStorageOps)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability AtomicStorageOps", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SampleMaskPostDepthCoverage)] = .{ + result[@intFromEnum(Feature.SampleMaskPostDepthCoverage)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability SampleMaskPostDepthCoverage", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.StorageBuffer8BitAccess)] = .{ + result[@intFromEnum(Feature.StorageBuffer8BitAccess)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability StorageBuffer8BitAccess", .dependencies = featureSet(&[_]Feature{ .v1_5, }), }; - result[@enumToInt(Feature.UniformAndStorageBuffer8BitAccess)] = .{ + result[@intFromEnum(Feature.UniformAndStorageBuffer8BitAccess)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability UniformAndStorageBuffer8BitAccess", .dependencies = featureSet(&[_]Feature{ @@ -1349,63 +1349,63 @@ pub const all_features = blk: { .StorageBuffer8BitAccess, }), }; - result[@enumToInt(Feature.StoragePushConstant8)] = .{ + result[@intFromEnum(Feature.StoragePushConstant8)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability StoragePushConstant8", .dependencies = featureSet(&[_]Feature{ .v1_5, }), }; - result[@enumToInt(Feature.DenormPreserve)] = .{ + result[@intFromEnum(Feature.DenormPreserve)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability DenormPreserve", .dependencies = featureSet(&[_]Feature{ .v1_4, }), }; - result[@enumToInt(Feature.DenormFlushToZero)] = .{ + result[@intFromEnum(Feature.DenormFlushToZero)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability DenormFlushToZero", .dependencies = featureSet(&[_]Feature{ .v1_4, }), }; - result[@enumToInt(Feature.SignedZeroInfNanPreserve)] = .{ + result[@intFromEnum(Feature.SignedZeroInfNanPreserve)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability SignedZeroInfNanPreserve", .dependencies = featureSet(&[_]Feature{ .v1_4, }), }; - result[@enumToInt(Feature.RoundingModeRTE)] = .{ + result[@intFromEnum(Feature.RoundingModeRTE)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability RoundingModeRTE", .dependencies = featureSet(&[_]Feature{ .v1_4, }), }; - result[@enumToInt(Feature.RoundingModeRTZ)] = .{ + result[@intFromEnum(Feature.RoundingModeRTZ)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability RoundingModeRTZ", .dependencies = featureSet(&[_]Feature{ .v1_4, }), }; - result[@enumToInt(Feature.RayQueryProvisionalKHR)] = .{ + result[@intFromEnum(Feature.RayQueryProvisionalKHR)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability RayQueryProvisionalKHR", .dependencies = featureSet(&[_]Feature{ .Shader, }), }; - result[@enumToInt(Feature.RayQueryKHR)] = .{ + result[@intFromEnum(Feature.RayQueryKHR)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability RayQueryKHR", .dependencies = featureSet(&[_]Feature{ .Shader, }), }; - result[@enumToInt(Feature.RayTraversalPrimitiveCullingKHR)] = .{ + result[@intFromEnum(Feature.RayTraversalPrimitiveCullingKHR)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability RayTraversalPrimitiveCullingKHR", .dependencies = featureSet(&[_]Feature{ @@ -1413,160 +1413,160 @@ pub const all_features = blk: { .RayTracingKHR, }), }; - result[@enumToInt(Feature.RayTracingKHR)] = .{ + result[@intFromEnum(Feature.RayTracingKHR)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability RayTracingKHR", .dependencies = featureSet(&[_]Feature{ .Shader, }), }; - result[@enumToInt(Feature.Float16ImageAMD)] = .{ + result[@intFromEnum(Feature.Float16ImageAMD)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability Float16ImageAMD", .dependencies = featureSet(&[_]Feature{ .Shader, }), }; - result[@enumToInt(Feature.ImageGatherBiasLodAMD)] = .{ + result[@intFromEnum(Feature.ImageGatherBiasLodAMD)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability ImageGatherBiasLodAMD", .dependencies = featureSet(&[_]Feature{ .Shader, }), }; - result[@enumToInt(Feature.FragmentMaskAMD)] = .{ + result[@intFromEnum(Feature.FragmentMaskAMD)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability FragmentMaskAMD", .dependencies = featureSet(&[_]Feature{ .Shader, }), }; - result[@enumToInt(Feature.StencilExportEXT)] = .{ + result[@intFromEnum(Feature.StencilExportEXT)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability StencilExportEXT", .dependencies = featureSet(&[_]Feature{ .Shader, }), }; - result[@enumToInt(Feature.ImageReadWriteLodAMD)] = .{ + result[@intFromEnum(Feature.ImageReadWriteLodAMD)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability ImageReadWriteLodAMD", .dependencies = featureSet(&[_]Feature{ .Shader, }), }; - result[@enumToInt(Feature.Int64ImageEXT)] = .{ + result[@intFromEnum(Feature.Int64ImageEXT)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability Int64ImageEXT", .dependencies = featureSet(&[_]Feature{ .Shader, }), }; - result[@enumToInt(Feature.ShaderClockKHR)] = .{ + result[@intFromEnum(Feature.ShaderClockKHR)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability ShaderClockKHR", .dependencies = featureSet(&[_]Feature{ .Shader, }), }; - result[@enumToInt(Feature.SampleMaskOverrideCoverageNV)] = .{ + result[@intFromEnum(Feature.SampleMaskOverrideCoverageNV)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability SampleMaskOverrideCoverageNV", .dependencies = featureSet(&[_]Feature{ .SampleRateShading, }), }; - result[@enumToInt(Feature.GeometryShaderPassthroughNV)] = .{ + result[@intFromEnum(Feature.GeometryShaderPassthroughNV)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability GeometryShaderPassthroughNV", .dependencies = featureSet(&[_]Feature{ .Geometry, }), }; - result[@enumToInt(Feature.ShaderViewportIndexLayerEXT)] = .{ + result[@intFromEnum(Feature.ShaderViewportIndexLayerEXT)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability ShaderViewportIndexLayerEXT", .dependencies = featureSet(&[_]Feature{ .MultiViewport, }), }; - result[@enumToInt(Feature.ShaderViewportIndexLayerNV)] = .{ + result[@intFromEnum(Feature.ShaderViewportIndexLayerNV)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability ShaderViewportIndexLayerNV", .dependencies = featureSet(&[_]Feature{ .MultiViewport, }), }; - result[@enumToInt(Feature.ShaderViewportMaskNV)] = .{ + result[@intFromEnum(Feature.ShaderViewportMaskNV)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability ShaderViewportMaskNV", .dependencies = featureSet(&[_]Feature{ .ShaderViewportIndexLayerNV, }), }; - result[@enumToInt(Feature.ShaderStereoViewNV)] = .{ + result[@intFromEnum(Feature.ShaderStereoViewNV)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability ShaderStereoViewNV", .dependencies = featureSet(&[_]Feature{ .ShaderViewportMaskNV, }), }; - result[@enumToInt(Feature.PerViewAttributesNV)] = .{ + result[@intFromEnum(Feature.PerViewAttributesNV)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability PerViewAttributesNV", .dependencies = featureSet(&[_]Feature{ .MultiView, }), }; - result[@enumToInt(Feature.FragmentFullyCoveredEXT)] = .{ + result[@intFromEnum(Feature.FragmentFullyCoveredEXT)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability FragmentFullyCoveredEXT", .dependencies = featureSet(&[_]Feature{ .Shader, }), }; - result[@enumToInt(Feature.MeshShadingNV)] = .{ + result[@intFromEnum(Feature.MeshShadingNV)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability MeshShadingNV", .dependencies = featureSet(&[_]Feature{ .Shader, }), }; - result[@enumToInt(Feature.ImageFootprintNV)] = .{ + result[@intFromEnum(Feature.ImageFootprintNV)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability ImageFootprintNV", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.FragmentBarycentricNV)] = .{ + result[@intFromEnum(Feature.FragmentBarycentricNV)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability FragmentBarycentricNV", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.ComputeDerivativeGroupQuadsNV)] = .{ + result[@intFromEnum(Feature.ComputeDerivativeGroupQuadsNV)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability ComputeDerivativeGroupQuadsNV", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.FragmentDensityEXT)] = .{ + result[@intFromEnum(Feature.FragmentDensityEXT)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability FragmentDensityEXT", .dependencies = featureSet(&[_]Feature{ .Shader, }), }; - result[@enumToInt(Feature.ShadingRateNV)] = .{ + result[@intFromEnum(Feature.ShadingRateNV)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability ShadingRateNV", .dependencies = featureSet(&[_]Feature{ .Shader, }), }; - result[@enumToInt(Feature.GroupNonUniformPartitionedNV)] = .{ + result[@intFromEnum(Feature.GroupNonUniformPartitionedNV)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability GroupNonUniformPartitionedNV", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.ShaderNonUniform)] = .{ + result[@intFromEnum(Feature.ShaderNonUniform)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability ShaderNonUniform", .dependencies = featureSet(&[_]Feature{ @@ -1574,7 +1574,7 @@ pub const all_features = blk: { .Shader, }), }; - result[@enumToInt(Feature.ShaderNonUniformEXT)] = .{ + result[@intFromEnum(Feature.ShaderNonUniformEXT)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability ShaderNonUniformEXT", .dependencies = featureSet(&[_]Feature{ @@ -1582,7 +1582,7 @@ pub const all_features = blk: { .Shader, }), }; - result[@enumToInt(Feature.RuntimeDescriptorArray)] = .{ + result[@intFromEnum(Feature.RuntimeDescriptorArray)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability RuntimeDescriptorArray", .dependencies = featureSet(&[_]Feature{ @@ -1590,7 +1590,7 @@ pub const all_features = blk: { .Shader, }), }; - result[@enumToInt(Feature.RuntimeDescriptorArrayEXT)] = .{ + result[@intFromEnum(Feature.RuntimeDescriptorArrayEXT)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability RuntimeDescriptorArrayEXT", .dependencies = featureSet(&[_]Feature{ @@ -1598,7 +1598,7 @@ pub const all_features = blk: { .Shader, }), }; - result[@enumToInt(Feature.InputAttachmentArrayDynamicIndexing)] = .{ + result[@intFromEnum(Feature.InputAttachmentArrayDynamicIndexing)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability InputAttachmentArrayDynamicIndexing", .dependencies = featureSet(&[_]Feature{ @@ -1606,7 +1606,7 @@ pub const all_features = blk: { .InputAttachment, }), }; - result[@enumToInt(Feature.InputAttachmentArrayDynamicIndexingEXT)] = .{ + result[@intFromEnum(Feature.InputAttachmentArrayDynamicIndexingEXT)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability InputAttachmentArrayDynamicIndexingEXT", .dependencies = featureSet(&[_]Feature{ @@ -1614,7 +1614,7 @@ pub const all_features = blk: { .InputAttachment, }), }; - result[@enumToInt(Feature.UniformTexelBufferArrayDynamicIndexing)] = .{ + result[@intFromEnum(Feature.UniformTexelBufferArrayDynamicIndexing)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability UniformTexelBufferArrayDynamicIndexing", .dependencies = featureSet(&[_]Feature{ @@ -1622,7 +1622,7 @@ pub const all_features = blk: { .SampledBuffer, }), }; - result[@enumToInt(Feature.UniformTexelBufferArrayDynamicIndexingEXT)] = .{ + result[@intFromEnum(Feature.UniformTexelBufferArrayDynamicIndexingEXT)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability UniformTexelBufferArrayDynamicIndexingEXT", .dependencies = featureSet(&[_]Feature{ @@ -1630,7 +1630,7 @@ pub const all_features = blk: { .SampledBuffer, }), }; - result[@enumToInt(Feature.StorageTexelBufferArrayDynamicIndexing)] = .{ + result[@intFromEnum(Feature.StorageTexelBufferArrayDynamicIndexing)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability StorageTexelBufferArrayDynamicIndexing", .dependencies = featureSet(&[_]Feature{ @@ -1638,7 +1638,7 @@ pub const all_features = blk: { .ImageBuffer, }), }; - result[@enumToInt(Feature.StorageTexelBufferArrayDynamicIndexingEXT)] = .{ + result[@intFromEnum(Feature.StorageTexelBufferArrayDynamicIndexingEXT)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability StorageTexelBufferArrayDynamicIndexingEXT", .dependencies = featureSet(&[_]Feature{ @@ -1646,7 +1646,7 @@ pub const all_features = blk: { .ImageBuffer, }), }; - result[@enumToInt(Feature.UniformBufferArrayNonUniformIndexing)] = .{ + result[@intFromEnum(Feature.UniformBufferArrayNonUniformIndexing)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability UniformBufferArrayNonUniformIndexing", .dependencies = featureSet(&[_]Feature{ @@ -1654,7 +1654,7 @@ pub const all_features = blk: { .ShaderNonUniform, }), }; - result[@enumToInt(Feature.UniformBufferArrayNonUniformIndexingEXT)] = .{ + result[@intFromEnum(Feature.UniformBufferArrayNonUniformIndexingEXT)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability UniformBufferArrayNonUniformIndexingEXT", .dependencies = featureSet(&[_]Feature{ @@ -1662,7 +1662,7 @@ pub const all_features = blk: { .ShaderNonUniform, }), }; - result[@enumToInt(Feature.SampledImageArrayNonUniformIndexing)] = .{ + result[@intFromEnum(Feature.SampledImageArrayNonUniformIndexing)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability SampledImageArrayNonUniformIndexing", .dependencies = featureSet(&[_]Feature{ @@ -1670,7 +1670,7 @@ pub const all_features = blk: { .ShaderNonUniform, }), }; - result[@enumToInt(Feature.SampledImageArrayNonUniformIndexingEXT)] = .{ + result[@intFromEnum(Feature.SampledImageArrayNonUniformIndexingEXT)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability SampledImageArrayNonUniformIndexingEXT", .dependencies = featureSet(&[_]Feature{ @@ -1678,7 +1678,7 @@ pub const all_features = blk: { .ShaderNonUniform, }), }; - result[@enumToInt(Feature.StorageBufferArrayNonUniformIndexing)] = .{ + result[@intFromEnum(Feature.StorageBufferArrayNonUniformIndexing)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability StorageBufferArrayNonUniformIndexing", .dependencies = featureSet(&[_]Feature{ @@ -1686,7 +1686,7 @@ pub const all_features = blk: { .ShaderNonUniform, }), }; - result[@enumToInt(Feature.StorageBufferArrayNonUniformIndexingEXT)] = .{ + result[@intFromEnum(Feature.StorageBufferArrayNonUniformIndexingEXT)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability StorageBufferArrayNonUniformIndexingEXT", .dependencies = featureSet(&[_]Feature{ @@ -1694,7 +1694,7 @@ pub const all_features = blk: { .ShaderNonUniform, }), }; - result[@enumToInt(Feature.StorageImageArrayNonUniformIndexing)] = .{ + result[@intFromEnum(Feature.StorageImageArrayNonUniformIndexing)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability StorageImageArrayNonUniformIndexing", .dependencies = featureSet(&[_]Feature{ @@ -1702,7 +1702,7 @@ pub const all_features = blk: { .ShaderNonUniform, }), }; - result[@enumToInt(Feature.StorageImageArrayNonUniformIndexingEXT)] = .{ + result[@intFromEnum(Feature.StorageImageArrayNonUniformIndexingEXT)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability StorageImageArrayNonUniformIndexingEXT", .dependencies = featureSet(&[_]Feature{ @@ -1710,7 +1710,7 @@ pub const all_features = blk: { .ShaderNonUniform, }), }; - result[@enumToInt(Feature.InputAttachmentArrayNonUniformIndexing)] = .{ + result[@intFromEnum(Feature.InputAttachmentArrayNonUniformIndexing)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability InputAttachmentArrayNonUniformIndexing", .dependencies = featureSet(&[_]Feature{ @@ -1719,7 +1719,7 @@ pub const all_features = blk: { .ShaderNonUniform, }), }; - result[@enumToInt(Feature.InputAttachmentArrayNonUniformIndexingEXT)] = .{ + result[@intFromEnum(Feature.InputAttachmentArrayNonUniformIndexingEXT)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability InputAttachmentArrayNonUniformIndexingEXT", .dependencies = featureSet(&[_]Feature{ @@ -1728,7 +1728,7 @@ pub const all_features = blk: { .ShaderNonUniform, }), }; - result[@enumToInt(Feature.UniformTexelBufferArrayNonUniformIndexing)] = .{ + result[@intFromEnum(Feature.UniformTexelBufferArrayNonUniformIndexing)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability UniformTexelBufferArrayNonUniformIndexing", .dependencies = featureSet(&[_]Feature{ @@ -1737,7 +1737,7 @@ pub const all_features = blk: { .ShaderNonUniform, }), }; - result[@enumToInt(Feature.UniformTexelBufferArrayNonUniformIndexingEXT)] = .{ + result[@intFromEnum(Feature.UniformTexelBufferArrayNonUniformIndexingEXT)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability UniformTexelBufferArrayNonUniformIndexingEXT", .dependencies = featureSet(&[_]Feature{ @@ -1746,7 +1746,7 @@ pub const all_features = blk: { .ShaderNonUniform, }), }; - result[@enumToInt(Feature.StorageTexelBufferArrayNonUniformIndexing)] = .{ + result[@intFromEnum(Feature.StorageTexelBufferArrayNonUniformIndexing)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability StorageTexelBufferArrayNonUniformIndexing", .dependencies = featureSet(&[_]Feature{ @@ -1755,7 +1755,7 @@ pub const all_features = blk: { .ShaderNonUniform, }), }; - result[@enumToInt(Feature.StorageTexelBufferArrayNonUniformIndexingEXT)] = .{ + result[@intFromEnum(Feature.StorageTexelBufferArrayNonUniformIndexingEXT)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability StorageTexelBufferArrayNonUniformIndexingEXT", .dependencies = featureSet(&[_]Feature{ @@ -1764,42 +1764,42 @@ pub const all_features = blk: { .ShaderNonUniform, }), }; - result[@enumToInt(Feature.RayTracingNV)] = .{ + result[@intFromEnum(Feature.RayTracingNV)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability RayTracingNV", .dependencies = featureSet(&[_]Feature{ .Shader, }), }; - result[@enumToInt(Feature.VulkanMemoryModel)] = .{ + result[@intFromEnum(Feature.VulkanMemoryModel)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability VulkanMemoryModel", .dependencies = featureSet(&[_]Feature{ .v1_5, }), }; - result[@enumToInt(Feature.VulkanMemoryModelKHR)] = .{ + result[@intFromEnum(Feature.VulkanMemoryModelKHR)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability VulkanMemoryModelKHR", .dependencies = featureSet(&[_]Feature{ .v1_5, }), }; - result[@enumToInt(Feature.VulkanMemoryModelDeviceScope)] = .{ + result[@intFromEnum(Feature.VulkanMemoryModelDeviceScope)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability VulkanMemoryModelDeviceScope", .dependencies = featureSet(&[_]Feature{ .v1_5, }), }; - result[@enumToInt(Feature.VulkanMemoryModelDeviceScopeKHR)] = .{ + result[@intFromEnum(Feature.VulkanMemoryModelDeviceScopeKHR)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability VulkanMemoryModelDeviceScopeKHR", .dependencies = featureSet(&[_]Feature{ .v1_5, }), }; - result[@enumToInt(Feature.PhysicalStorageBufferAddresses)] = .{ + result[@intFromEnum(Feature.PhysicalStorageBufferAddresses)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability PhysicalStorageBufferAddresses", .dependencies = featureSet(&[_]Feature{ @@ -1807,7 +1807,7 @@ pub const all_features = blk: { .Shader, }), }; - result[@enumToInt(Feature.PhysicalStorageBufferAddressesEXT)] = .{ + result[@intFromEnum(Feature.PhysicalStorageBufferAddressesEXT)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability PhysicalStorageBufferAddressesEXT", .dependencies = featureSet(&[_]Feature{ @@ -1815,261 +1815,261 @@ pub const all_features = blk: { .Shader, }), }; - result[@enumToInt(Feature.ComputeDerivativeGroupLinearNV)] = .{ + result[@intFromEnum(Feature.ComputeDerivativeGroupLinearNV)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability ComputeDerivativeGroupLinearNV", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.RayTracingProvisionalKHR)] = .{ + result[@intFromEnum(Feature.RayTracingProvisionalKHR)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability RayTracingProvisionalKHR", .dependencies = featureSet(&[_]Feature{ .Shader, }), }; - result[@enumToInt(Feature.CooperativeMatrixNV)] = .{ + result[@intFromEnum(Feature.CooperativeMatrixNV)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability CooperativeMatrixNV", .dependencies = featureSet(&[_]Feature{ .Shader, }), }; - result[@enumToInt(Feature.FragmentShaderSampleInterlockEXT)] = .{ + result[@intFromEnum(Feature.FragmentShaderSampleInterlockEXT)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability FragmentShaderSampleInterlockEXT", .dependencies = featureSet(&[_]Feature{ .Shader, }), }; - result[@enumToInt(Feature.FragmentShaderShadingRateInterlockEXT)] = .{ + result[@intFromEnum(Feature.FragmentShaderShadingRateInterlockEXT)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability FragmentShaderShadingRateInterlockEXT", .dependencies = featureSet(&[_]Feature{ .Shader, }), }; - result[@enumToInt(Feature.ShaderSMBuiltinsNV)] = .{ + result[@intFromEnum(Feature.ShaderSMBuiltinsNV)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability ShaderSMBuiltinsNV", .dependencies = featureSet(&[_]Feature{ .Shader, }), }; - result[@enumToInt(Feature.FragmentShaderPixelInterlockEXT)] = .{ + result[@intFromEnum(Feature.FragmentShaderPixelInterlockEXT)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability FragmentShaderPixelInterlockEXT", .dependencies = featureSet(&[_]Feature{ .Shader, }), }; - result[@enumToInt(Feature.DemoteToHelperInvocationEXT)] = .{ + result[@intFromEnum(Feature.DemoteToHelperInvocationEXT)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability DemoteToHelperInvocationEXT", .dependencies = featureSet(&[_]Feature{ .Shader, }), }; - result[@enumToInt(Feature.SubgroupShuffleINTEL)] = .{ + result[@intFromEnum(Feature.SubgroupShuffleINTEL)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability SubgroupShuffleINTEL", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SubgroupBufferBlockIOINTEL)] = .{ + result[@intFromEnum(Feature.SubgroupBufferBlockIOINTEL)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability SubgroupBufferBlockIOINTEL", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SubgroupImageBlockIOINTEL)] = .{ + result[@intFromEnum(Feature.SubgroupImageBlockIOINTEL)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability SubgroupImageBlockIOINTEL", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SubgroupImageMediaBlockIOINTEL)] = .{ + result[@intFromEnum(Feature.SubgroupImageMediaBlockIOINTEL)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability SubgroupImageMediaBlockIOINTEL", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.RoundToInfinityINTEL)] = .{ + result[@intFromEnum(Feature.RoundToInfinityINTEL)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability RoundToInfinityINTEL", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.FloatingPointModeINTEL)] = .{ + result[@intFromEnum(Feature.FloatingPointModeINTEL)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability FloatingPointModeINTEL", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.IntegerFunctions2INTEL)] = .{ + result[@intFromEnum(Feature.IntegerFunctions2INTEL)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability IntegerFunctions2INTEL", .dependencies = featureSet(&[_]Feature{ .Shader, }), }; - result[@enumToInt(Feature.FunctionPointersINTEL)] = .{ + result[@intFromEnum(Feature.FunctionPointersINTEL)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability FunctionPointersINTEL", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.IndirectReferencesINTEL)] = .{ + result[@intFromEnum(Feature.IndirectReferencesINTEL)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability IndirectReferencesINTEL", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.AsmINTEL)] = .{ + result[@intFromEnum(Feature.AsmINTEL)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability AsmINTEL", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.AtomicFloat32MinMaxEXT)] = .{ + result[@intFromEnum(Feature.AtomicFloat32MinMaxEXT)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability AtomicFloat32MinMaxEXT", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.AtomicFloat64MinMaxEXT)] = .{ + result[@intFromEnum(Feature.AtomicFloat64MinMaxEXT)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability AtomicFloat64MinMaxEXT", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.AtomicFloat16MinMaxEXT)] = .{ + result[@intFromEnum(Feature.AtomicFloat16MinMaxEXT)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability AtomicFloat16MinMaxEXT", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.VectorComputeINTEL)] = .{ + result[@intFromEnum(Feature.VectorComputeINTEL)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability VectorComputeINTEL", .dependencies = featureSet(&[_]Feature{ .VectorAnyINTEL, }), }; - result[@enumToInt(Feature.VectorAnyINTEL)] = .{ + result[@intFromEnum(Feature.VectorAnyINTEL)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability VectorAnyINTEL", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.ExpectAssumeKHR)] = .{ + result[@intFromEnum(Feature.ExpectAssumeKHR)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability ExpectAssumeKHR", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SubgroupAvcMotionEstimationINTEL)] = .{ + result[@intFromEnum(Feature.SubgroupAvcMotionEstimationINTEL)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability SubgroupAvcMotionEstimationINTEL", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SubgroupAvcMotionEstimationIntraINTEL)] = .{ + result[@intFromEnum(Feature.SubgroupAvcMotionEstimationIntraINTEL)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability SubgroupAvcMotionEstimationIntraINTEL", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.SubgroupAvcMotionEstimationChromaINTEL)] = .{ + result[@intFromEnum(Feature.SubgroupAvcMotionEstimationChromaINTEL)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability SubgroupAvcMotionEstimationChromaINTEL", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.VariableLengthArrayINTEL)] = .{ + result[@intFromEnum(Feature.VariableLengthArrayINTEL)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability VariableLengthArrayINTEL", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.FunctionFloatControlINTEL)] = .{ + result[@intFromEnum(Feature.FunctionFloatControlINTEL)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability FunctionFloatControlINTEL", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.FPGAMemoryAttributesINTEL)] = .{ + result[@intFromEnum(Feature.FPGAMemoryAttributesINTEL)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability FPGAMemoryAttributesINTEL", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.FPFastMathModeINTEL)] = .{ + result[@intFromEnum(Feature.FPFastMathModeINTEL)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability FPFastMathModeINTEL", .dependencies = featureSet(&[_]Feature{ .Kernel, }), }; - result[@enumToInt(Feature.ArbitraryPrecisionIntegersINTEL)] = .{ + result[@intFromEnum(Feature.ArbitraryPrecisionIntegersINTEL)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability ArbitraryPrecisionIntegersINTEL", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.UnstructuredLoopControlsINTEL)] = .{ + result[@intFromEnum(Feature.UnstructuredLoopControlsINTEL)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability UnstructuredLoopControlsINTEL", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.FPGALoopControlsINTEL)] = .{ + result[@intFromEnum(Feature.FPGALoopControlsINTEL)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability FPGALoopControlsINTEL", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.KernelAttributesINTEL)] = .{ + result[@intFromEnum(Feature.KernelAttributesINTEL)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability KernelAttributesINTEL", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.FPGAKernelAttributesINTEL)] = .{ + result[@intFromEnum(Feature.FPGAKernelAttributesINTEL)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability FPGAKernelAttributesINTEL", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.FPGAMemoryAccessesINTEL)] = .{ + result[@intFromEnum(Feature.FPGAMemoryAccessesINTEL)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability FPGAMemoryAccessesINTEL", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.FPGAClusterAttributesINTEL)] = .{ + result[@intFromEnum(Feature.FPGAClusterAttributesINTEL)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability FPGAClusterAttributesINTEL", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.LoopFuseINTEL)] = .{ + result[@intFromEnum(Feature.LoopFuseINTEL)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability LoopFuseINTEL", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.FPGABufferLocationINTEL)] = .{ + result[@intFromEnum(Feature.FPGABufferLocationINTEL)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability FPGABufferLocationINTEL", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.USMStorageClassesINTEL)] = .{ + result[@intFromEnum(Feature.USMStorageClassesINTEL)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability USMStorageClassesINTEL", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.IOPipesINTEL)] = .{ + result[@intFromEnum(Feature.IOPipesINTEL)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability IOPipesINTEL", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.BlockingPipesINTEL)] = .{ + result[@intFromEnum(Feature.BlockingPipesINTEL)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability BlockingPipesINTEL", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.FPGARegINTEL)] = .{ + result[@intFromEnum(Feature.FPGARegINTEL)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability FPGARegINTEL", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.AtomicFloat32AddEXT)] = .{ + result[@intFromEnum(Feature.AtomicFloat32AddEXT)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability AtomicFloat32AddEXT", .dependencies = featureSet(&[_]Feature{ .Shader, }), }; - result[@enumToInt(Feature.AtomicFloat64AddEXT)] = .{ + result[@intFromEnum(Feature.AtomicFloat64AddEXT)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability AtomicFloat64AddEXT", .dependencies = featureSet(&[_]Feature{ .Shader, }), }; - result[@enumToInt(Feature.LongConstantCompositeINTEL)] = .{ + result[@intFromEnum(Feature.LongConstantCompositeINTEL)] = .{ .llvm_name = null, .description = "Enable SPIR-V capability LongConstantCompositeINTEL", .dependencies = featureSet(&[_]Feature{}), diff --git a/lib/std/target/ve.zig b/lib/std/target/ve.zig index 224da897c8..09ee056ef9 100644 --- a/lib/std/target/ve.zig +++ b/lib/std/target/ve.zig @@ -17,7 +17,7 @@ pub const all_features = blk: { const len = @typeInfo(Feature).Enum.fields.len; std.debug.assert(len <= CpuFeature.Set.needed_bit_count); var result: [len]CpuFeature = undefined; - result[@enumToInt(Feature.vpu)] = .{ + result[@intFromEnum(Feature.vpu)] = .{ .llvm_name = "vpu", .description = "Enable the VPU", .dependencies = featureSet(&[_]Feature{}), diff --git a/lib/std/target/wasm.zig b/lib/std/target/wasm.zig index 7dd0bd4843..a06d37cf7d 100644 --- a/lib/std/target/wasm.zig +++ b/lib/std/target/wasm.zig @@ -28,62 +28,62 @@ pub const all_features = blk: { const len = @typeInfo(Feature).Enum.fields.len; std.debug.assert(len <= CpuFeature.Set.needed_bit_count); var result: [len]CpuFeature = undefined; - result[@enumToInt(Feature.atomics)] = .{ + result[@intFromEnum(Feature.atomics)] = .{ .llvm_name = "atomics", .description = "Enable Atomics", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.bulk_memory)] = .{ + result[@intFromEnum(Feature.bulk_memory)] = .{ .llvm_name = "bulk-memory", .description = "Enable bulk memory operations", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.exception_handling)] = .{ + result[@intFromEnum(Feature.exception_handling)] = .{ .llvm_name = "exception-handling", .description = "Enable Wasm exception handling", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.extended_const)] = .{ + result[@intFromEnum(Feature.extended_const)] = .{ .llvm_name = "extended-const", .description = "Enable extended const expressions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.multivalue)] = .{ + result[@intFromEnum(Feature.multivalue)] = .{ .llvm_name = "multivalue", .description = "Enable multivalue blocks, instructions, and functions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.mutable_globals)] = .{ + result[@intFromEnum(Feature.mutable_globals)] = .{ .llvm_name = "mutable-globals", .description = "Enable mutable globals", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.nontrapping_fptoint)] = .{ + result[@intFromEnum(Feature.nontrapping_fptoint)] = .{ .llvm_name = "nontrapping-fptoint", .description = "Enable non-trapping float-to-int conversion operators", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.reference_types)] = .{ + result[@intFromEnum(Feature.reference_types)] = .{ .llvm_name = "reference-types", .description = "Enable reference types", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.relaxed_simd)] = .{ + result[@intFromEnum(Feature.relaxed_simd)] = .{ .llvm_name = "relaxed-simd", .description = "Enable relaxed-simd instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.sign_ext)] = .{ + result[@intFromEnum(Feature.sign_ext)] = .{ .llvm_name = "sign-ext", .description = "Enable sign extension operators", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.simd128)] = .{ + result[@intFromEnum(Feature.simd128)] = .{ .llvm_name = "simd128", .description = "Enable 128-bit SIMD", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.tail_call)] = .{ + result[@intFromEnum(Feature.tail_call)] = .{ .llvm_name = "tail-call", .description = "Enable tail call instructions", .dependencies = featureSet(&[_]Feature{}), diff --git a/lib/std/target/x86.zig b/lib/std/target/x86.zig index bf3b8cb953..645d5f688d 100644 --- a/lib/std/target/x86.zig +++ b/lib/std/target/x86.zig @@ -178,135 +178,135 @@ pub const all_features = blk: { const len = @typeInfo(Feature).Enum.fields.len; std.debug.assert(len <= CpuFeature.Set.needed_bit_count); var result: [len]CpuFeature = undefined; - result[@enumToInt(Feature.@"16bit_mode")] = .{ + result[@intFromEnum(Feature.@"16bit_mode")] = .{ .llvm_name = "16bit-mode", .description = "16-bit mode (i8086)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.@"32bit_mode")] = .{ + result[@intFromEnum(Feature.@"32bit_mode")] = .{ .llvm_name = "32bit-mode", .description = "32-bit mode (80386)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.@"3dnow")] = .{ + result[@intFromEnum(Feature.@"3dnow")] = .{ .llvm_name = "3dnow", .description = "Enable 3DNow! instructions", .dependencies = featureSet(&[_]Feature{ .mmx, }), }; - result[@enumToInt(Feature.@"3dnowa")] = .{ + result[@intFromEnum(Feature.@"3dnowa")] = .{ .llvm_name = "3dnowa", .description = "Enable 3DNow! Athlon instructions", .dependencies = featureSet(&[_]Feature{ .@"3dnow", }), }; - result[@enumToInt(Feature.@"64bit")] = .{ + result[@intFromEnum(Feature.@"64bit")] = .{ .llvm_name = "64bit", .description = "Support 64-bit instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.adx)] = .{ + result[@intFromEnum(Feature.adx)] = .{ .llvm_name = "adx", .description = "Support ADX instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.aes)] = .{ + result[@intFromEnum(Feature.aes)] = .{ .llvm_name = "aes", .description = "Enable AES instructions", .dependencies = featureSet(&[_]Feature{ .sse2, }), }; - result[@enumToInt(Feature.allow_light_256_bit)] = .{ + result[@intFromEnum(Feature.allow_light_256_bit)] = .{ .llvm_name = "allow-light-256-bit", .description = "Enable generation of 256-bit load/stores even if we prefer 128-bit", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.amx_bf16)] = .{ + result[@intFromEnum(Feature.amx_bf16)] = .{ .llvm_name = "amx-bf16", .description = "Support AMX-BF16 instructions", .dependencies = featureSet(&[_]Feature{ .amx_tile, }), }; - result[@enumToInt(Feature.amx_fp16)] = .{ + result[@intFromEnum(Feature.amx_fp16)] = .{ .llvm_name = "amx-fp16", .description = "Support AMX amx-fp16 instructions", .dependencies = featureSet(&[_]Feature{ .amx_tile, }), }; - result[@enumToInt(Feature.amx_int8)] = .{ + result[@intFromEnum(Feature.amx_int8)] = .{ .llvm_name = "amx-int8", .description = "Support AMX-INT8 instructions", .dependencies = featureSet(&[_]Feature{ .amx_tile, }), }; - result[@enumToInt(Feature.amx_tile)] = .{ + result[@intFromEnum(Feature.amx_tile)] = .{ .llvm_name = "amx-tile", .description = "Support AMX-TILE instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.avx)] = .{ + result[@intFromEnum(Feature.avx)] = .{ .llvm_name = "avx", .description = "Enable AVX instructions", .dependencies = featureSet(&[_]Feature{ .sse4_2, }), }; - result[@enumToInt(Feature.avx2)] = .{ + result[@intFromEnum(Feature.avx2)] = .{ .llvm_name = "avx2", .description = "Enable AVX2 instructions", .dependencies = featureSet(&[_]Feature{ .avx, }), }; - result[@enumToInt(Feature.avx512bf16)] = .{ + result[@intFromEnum(Feature.avx512bf16)] = .{ .llvm_name = "avx512bf16", .description = "Support bfloat16 floating point", .dependencies = featureSet(&[_]Feature{ .avx512bw, }), }; - result[@enumToInt(Feature.avx512bitalg)] = .{ + result[@intFromEnum(Feature.avx512bitalg)] = .{ .llvm_name = "avx512bitalg", .description = "Enable AVX-512 Bit Algorithms", .dependencies = featureSet(&[_]Feature{ .avx512bw, }), }; - result[@enumToInt(Feature.avx512bw)] = .{ + result[@intFromEnum(Feature.avx512bw)] = .{ .llvm_name = "avx512bw", .description = "Enable AVX-512 Byte and Word Instructions", .dependencies = featureSet(&[_]Feature{ .avx512f, }), }; - result[@enumToInt(Feature.avx512cd)] = .{ + result[@intFromEnum(Feature.avx512cd)] = .{ .llvm_name = "avx512cd", .description = "Enable AVX-512 Conflict Detection Instructions", .dependencies = featureSet(&[_]Feature{ .avx512f, }), }; - result[@enumToInt(Feature.avx512dq)] = .{ + result[@intFromEnum(Feature.avx512dq)] = .{ .llvm_name = "avx512dq", .description = "Enable AVX-512 Doubleword and Quadword Instructions", .dependencies = featureSet(&[_]Feature{ .avx512f, }), }; - result[@enumToInt(Feature.avx512er)] = .{ + result[@intFromEnum(Feature.avx512er)] = .{ .llvm_name = "avx512er", .description = "Enable AVX-512 Exponential and Reciprocal Instructions", .dependencies = featureSet(&[_]Feature{ .avx512f, }), }; - result[@enumToInt(Feature.avx512f)] = .{ + result[@intFromEnum(Feature.avx512f)] = .{ .llvm_name = "avx512f", .description = "Enable AVX-512 instructions", .dependencies = featureSet(&[_]Feature{ @@ -315,7 +315,7 @@ pub const all_features = blk: { .fma, }), }; - result[@enumToInt(Feature.avx512fp16)] = .{ + result[@intFromEnum(Feature.avx512fp16)] = .{ .llvm_name = "avx512fp16", .description = "Support 16-bit floating point", .dependencies = featureSet(&[_]Feature{ @@ -324,287 +324,287 @@ pub const all_features = blk: { .avx512vl, }), }; - result[@enumToInt(Feature.avx512ifma)] = .{ + result[@intFromEnum(Feature.avx512ifma)] = .{ .llvm_name = "avx512ifma", .description = "Enable AVX-512 Integer Fused Multiply-Add", .dependencies = featureSet(&[_]Feature{ .avx512f, }), }; - result[@enumToInt(Feature.avx512pf)] = .{ + result[@intFromEnum(Feature.avx512pf)] = .{ .llvm_name = "avx512pf", .description = "Enable AVX-512 PreFetch Instructions", .dependencies = featureSet(&[_]Feature{ .avx512f, }), }; - result[@enumToInt(Feature.avx512vbmi)] = .{ + result[@intFromEnum(Feature.avx512vbmi)] = .{ .llvm_name = "avx512vbmi", .description = "Enable AVX-512 Vector Byte Manipulation Instructions", .dependencies = featureSet(&[_]Feature{ .avx512bw, }), }; - result[@enumToInt(Feature.avx512vbmi2)] = .{ + result[@intFromEnum(Feature.avx512vbmi2)] = .{ .llvm_name = "avx512vbmi2", .description = "Enable AVX-512 further Vector Byte Manipulation Instructions", .dependencies = featureSet(&[_]Feature{ .avx512bw, }), }; - result[@enumToInt(Feature.avx512vl)] = .{ + result[@intFromEnum(Feature.avx512vl)] = .{ .llvm_name = "avx512vl", .description = "Enable AVX-512 Vector Length eXtensions", .dependencies = featureSet(&[_]Feature{ .avx512f, }), }; - result[@enumToInt(Feature.avx512vnni)] = .{ + result[@intFromEnum(Feature.avx512vnni)] = .{ .llvm_name = "avx512vnni", .description = "Enable AVX-512 Vector Neural Network Instructions", .dependencies = featureSet(&[_]Feature{ .avx512f, }), }; - result[@enumToInt(Feature.avx512vp2intersect)] = .{ + result[@intFromEnum(Feature.avx512vp2intersect)] = .{ .llvm_name = "avx512vp2intersect", .description = "Enable AVX-512 vp2intersect", .dependencies = featureSet(&[_]Feature{ .avx512f, }), }; - result[@enumToInt(Feature.avx512vpopcntdq)] = .{ + result[@intFromEnum(Feature.avx512vpopcntdq)] = .{ .llvm_name = "avx512vpopcntdq", .description = "Enable AVX-512 Population Count Instructions", .dependencies = featureSet(&[_]Feature{ .avx512f, }), }; - result[@enumToInt(Feature.avxifma)] = .{ + result[@intFromEnum(Feature.avxifma)] = .{ .llvm_name = "avxifma", .description = "Enable AVX-IFMA", .dependencies = featureSet(&[_]Feature{ .avx2, }), }; - result[@enumToInt(Feature.avxneconvert)] = .{ + result[@intFromEnum(Feature.avxneconvert)] = .{ .llvm_name = "avxneconvert", .description = "Support AVX-NE-CONVERT instructions", .dependencies = featureSet(&[_]Feature{ .avx2, }), }; - result[@enumToInt(Feature.avxvnni)] = .{ + result[@intFromEnum(Feature.avxvnni)] = .{ .llvm_name = "avxvnni", .description = "Support AVX_VNNI encoding", .dependencies = featureSet(&[_]Feature{ .avx2, }), }; - result[@enumToInt(Feature.avxvnniint8)] = .{ + result[@intFromEnum(Feature.avxvnniint8)] = .{ .llvm_name = "avxvnniint8", .description = "Enable AVX-VNNI-INT8", .dependencies = featureSet(&[_]Feature{ .avx2, }), }; - result[@enumToInt(Feature.bmi)] = .{ + result[@intFromEnum(Feature.bmi)] = .{ .llvm_name = "bmi", .description = "Support BMI instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.bmi2)] = .{ + result[@intFromEnum(Feature.bmi2)] = .{ .llvm_name = "bmi2", .description = "Support BMI2 instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.branchfusion)] = .{ + result[@intFromEnum(Feature.branchfusion)] = .{ .llvm_name = "branchfusion", .description = "CMP/TEST can be fused with conditional branches", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.cldemote)] = .{ + result[@intFromEnum(Feature.cldemote)] = .{ .llvm_name = "cldemote", .description = "Enable Cache Line Demote", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.clflushopt)] = .{ + result[@intFromEnum(Feature.clflushopt)] = .{ .llvm_name = "clflushopt", .description = "Flush A Cache Line Optimized", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.clwb)] = .{ + result[@intFromEnum(Feature.clwb)] = .{ .llvm_name = "clwb", .description = "Cache Line Write Back", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.clzero)] = .{ + result[@intFromEnum(Feature.clzero)] = .{ .llvm_name = "clzero", .description = "Enable Cache Line Zero", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.cmov)] = .{ + result[@intFromEnum(Feature.cmov)] = .{ .llvm_name = "cmov", .description = "Enable conditional move instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.cmpccxadd)] = .{ + result[@intFromEnum(Feature.cmpccxadd)] = .{ .llvm_name = "cmpccxadd", .description = "Support CMPCCXADD instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.crc32)] = .{ + result[@intFromEnum(Feature.crc32)] = .{ .llvm_name = "crc32", .description = "Enable SSE 4.2 CRC32 instruction (used when SSE4.2 is supported but function is GPR only)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.cx16)] = .{ + result[@intFromEnum(Feature.cx16)] = .{ .llvm_name = "cx16", .description = "64-bit with cmpxchg16b (this is true for most x86-64 chips, but not the first AMD chips)", .dependencies = featureSet(&[_]Feature{ .cx8, }), }; - result[@enumToInt(Feature.cx8)] = .{ + result[@intFromEnum(Feature.cx8)] = .{ .llvm_name = "cx8", .description = "Support CMPXCHG8B instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.enqcmd)] = .{ + result[@intFromEnum(Feature.enqcmd)] = .{ .llvm_name = "enqcmd", .description = "Has ENQCMD instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.ermsb)] = .{ + result[@intFromEnum(Feature.ermsb)] = .{ .llvm_name = "ermsb", .description = "REP MOVS/STOS are fast", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.f16c)] = .{ + result[@intFromEnum(Feature.f16c)] = .{ .llvm_name = "f16c", .description = "Support 16-bit floating point conversion instructions", .dependencies = featureSet(&[_]Feature{ .avx, }), }; - result[@enumToInt(Feature.false_deps_getmant)] = .{ + result[@intFromEnum(Feature.false_deps_getmant)] = .{ .llvm_name = "false-deps-getmant", .description = "VGETMANTSS/SD/SH and VGETMANDPS/PD(memory version) has a false dependency on dest register", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.false_deps_lzcnt_tzcnt)] = .{ + result[@intFromEnum(Feature.false_deps_lzcnt_tzcnt)] = .{ .llvm_name = "false-deps-lzcnt-tzcnt", .description = "LZCNT/TZCNT have a false dependency on dest register", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.false_deps_mulc)] = .{ + result[@intFromEnum(Feature.false_deps_mulc)] = .{ .llvm_name = "false-deps-mulc", .description = "VF[C]MULCPH/SH has a false dependency on dest register", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.false_deps_mullq)] = .{ + result[@intFromEnum(Feature.false_deps_mullq)] = .{ .llvm_name = "false-deps-mullq", .description = "VPMULLQ has a false dependency on dest register", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.false_deps_perm)] = .{ + result[@intFromEnum(Feature.false_deps_perm)] = .{ .llvm_name = "false-deps-perm", .description = "VPERMD/Q/PS/PD has a false dependency on dest register", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.false_deps_popcnt)] = .{ + result[@intFromEnum(Feature.false_deps_popcnt)] = .{ .llvm_name = "false-deps-popcnt", .description = "POPCNT has a false dependency on dest register", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.false_deps_range)] = .{ + result[@intFromEnum(Feature.false_deps_range)] = .{ .llvm_name = "false-deps-range", .description = "VRANGEPD/PS/SD/SS has a false dependency on dest register", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.fast_11bytenop)] = .{ + result[@intFromEnum(Feature.fast_11bytenop)] = .{ .llvm_name = "fast-11bytenop", .description = "Target can quickly decode up to 11 byte NOPs", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.fast_15bytenop)] = .{ + result[@intFromEnum(Feature.fast_15bytenop)] = .{ .llvm_name = "fast-15bytenop", .description = "Target can quickly decode up to 15 byte NOPs", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.fast_7bytenop)] = .{ + result[@intFromEnum(Feature.fast_7bytenop)] = .{ .llvm_name = "fast-7bytenop", .description = "Target can quickly decode up to 7 byte NOPs", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.fast_bextr)] = .{ + result[@intFromEnum(Feature.fast_bextr)] = .{ .llvm_name = "fast-bextr", .description = "Indicates that the BEXTR instruction is implemented as a single uop with good throughput", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.fast_gather)] = .{ + result[@intFromEnum(Feature.fast_gather)] = .{ .llvm_name = "fast-gather", .description = "Indicates if gather is reasonably fast (this is true for Skylake client and all AVX-512 CPUs)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.fast_hops)] = .{ + result[@intFromEnum(Feature.fast_hops)] = .{ .llvm_name = "fast-hops", .description = "Prefer horizontal vector math instructions (haddp, phsub, etc.) over normal vector instructions with shuffles", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.fast_lzcnt)] = .{ + result[@intFromEnum(Feature.fast_lzcnt)] = .{ .llvm_name = "fast-lzcnt", .description = "LZCNT instructions are as fast as most simple integer ops", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.fast_movbe)] = .{ + result[@intFromEnum(Feature.fast_movbe)] = .{ .llvm_name = "fast-movbe", .description = "Prefer a movbe over a single-use load + bswap / single-use bswap + store", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.fast_scalar_fsqrt)] = .{ + result[@intFromEnum(Feature.fast_scalar_fsqrt)] = .{ .llvm_name = "fast-scalar-fsqrt", .description = "Scalar SQRT is fast (disable Newton-Raphson)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.fast_scalar_shift_masks)] = .{ + result[@intFromEnum(Feature.fast_scalar_shift_masks)] = .{ .llvm_name = "fast-scalar-shift-masks", .description = "Prefer a left/right scalar logical shift pair over a shift+and pair", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.fast_shld_rotate)] = .{ + result[@intFromEnum(Feature.fast_shld_rotate)] = .{ .llvm_name = "fast-shld-rotate", .description = "SHLD can be used as a faster rotate", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.fast_variable_crosslane_shuffle)] = .{ + result[@intFromEnum(Feature.fast_variable_crosslane_shuffle)] = .{ .llvm_name = "fast-variable-crosslane-shuffle", .description = "Cross-lane shuffles with variable masks are fast", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.fast_variable_perlane_shuffle)] = .{ + result[@intFromEnum(Feature.fast_variable_perlane_shuffle)] = .{ .llvm_name = "fast-variable-perlane-shuffle", .description = "Per-lane shuffles with variable masks are fast", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.fast_vector_fsqrt)] = .{ + result[@intFromEnum(Feature.fast_vector_fsqrt)] = .{ .llvm_name = "fast-vector-fsqrt", .description = "Vector SQRT is fast (disable Newton-Raphson)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.fast_vector_shift_masks)] = .{ + result[@intFromEnum(Feature.fast_vector_shift_masks)] = .{ .llvm_name = "fast-vector-shift-masks", .description = "Prefer a left/right vector logical shift pair over a shift+and pair", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.fma)] = .{ + result[@intFromEnum(Feature.fma)] = .{ .llvm_name = "fma", .description = "Enable three-operand fused multiply-add", .dependencies = featureSet(&[_]Feature{ .avx, }), }; - result[@enumToInt(Feature.fma4)] = .{ + result[@intFromEnum(Feature.fma4)] = .{ .llvm_name = "fma4", .description = "Enable four-operand fused multiply-add", .dependencies = featureSet(&[_]Feature{ @@ -612,218 +612,218 @@ pub const all_features = blk: { .sse4a, }), }; - result[@enumToInt(Feature.fsgsbase)] = .{ + result[@intFromEnum(Feature.fsgsbase)] = .{ .llvm_name = "fsgsbase", .description = "Support FS/GS Base instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.fsrm)] = .{ + result[@intFromEnum(Feature.fsrm)] = .{ .llvm_name = "fsrm", .description = "REP MOVSB of short lengths is faster", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.fxsr)] = .{ + result[@intFromEnum(Feature.fxsr)] = .{ .llvm_name = "fxsr", .description = "Support fxsave/fxrestore instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.gfni)] = .{ + result[@intFromEnum(Feature.gfni)] = .{ .llvm_name = "gfni", .description = "Enable Galois Field Arithmetic Instructions", .dependencies = featureSet(&[_]Feature{ .sse2, }), }; - result[@enumToInt(Feature.harden_sls_ijmp)] = .{ + result[@intFromEnum(Feature.harden_sls_ijmp)] = .{ .llvm_name = "harden-sls-ijmp", .description = "Harden against straight line speculation across indirect JMP instructions.", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.harden_sls_ret)] = .{ + result[@intFromEnum(Feature.harden_sls_ret)] = .{ .llvm_name = "harden-sls-ret", .description = "Harden against straight line speculation across RET instructions.", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.hreset)] = .{ + result[@intFromEnum(Feature.hreset)] = .{ .llvm_name = "hreset", .description = "Has hreset instruction", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.idivl_to_divb)] = .{ + result[@intFromEnum(Feature.idivl_to_divb)] = .{ .llvm_name = "idivl-to-divb", .description = "Use 8-bit divide for positive values less than 256", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.idivq_to_divl)] = .{ + result[@intFromEnum(Feature.idivq_to_divl)] = .{ .llvm_name = "idivq-to-divl", .description = "Use 32-bit divide for positive values less than 2^32", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.invpcid)] = .{ + result[@intFromEnum(Feature.invpcid)] = .{ .llvm_name = "invpcid", .description = "Invalidate Process-Context Identifier", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.kl)] = .{ + result[@intFromEnum(Feature.kl)] = .{ .llvm_name = "kl", .description = "Support Key Locker kl Instructions", .dependencies = featureSet(&[_]Feature{ .sse2, }), }; - result[@enumToInt(Feature.lea_sp)] = .{ + result[@intFromEnum(Feature.lea_sp)] = .{ .llvm_name = "lea-sp", .description = "Use LEA for adjusting the stack pointer (this is an optimization for Intel Atom processors)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.lea_uses_ag)] = .{ + result[@intFromEnum(Feature.lea_uses_ag)] = .{ .llvm_name = "lea-uses-ag", .description = "LEA instruction needs inputs at AG stage", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.lvi_cfi)] = .{ + result[@intFromEnum(Feature.lvi_cfi)] = .{ .llvm_name = "lvi-cfi", .description = "Prevent indirect calls/branches from using a memory operand, and precede all indirect calls/branches from a register with an LFENCE instruction to serialize control flow. Also decompose RET instructions into a POP+LFENCE+JMP sequence.", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.lvi_load_hardening)] = .{ + result[@intFromEnum(Feature.lvi_load_hardening)] = .{ .llvm_name = "lvi-load-hardening", .description = "Insert LFENCE instructions to prevent data speculatively injected into loads from being used maliciously.", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.lwp)] = .{ + result[@intFromEnum(Feature.lwp)] = .{ .llvm_name = "lwp", .description = "Enable LWP instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.lzcnt)] = .{ + result[@intFromEnum(Feature.lzcnt)] = .{ .llvm_name = "lzcnt", .description = "Support LZCNT instruction", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.macrofusion)] = .{ + result[@intFromEnum(Feature.macrofusion)] = .{ .llvm_name = "macrofusion", .description = "Various instructions can be fused with conditional branches", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.mmx)] = .{ + result[@intFromEnum(Feature.mmx)] = .{ .llvm_name = "mmx", .description = "Enable MMX instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.movbe)] = .{ + result[@intFromEnum(Feature.movbe)] = .{ .llvm_name = "movbe", .description = "Support MOVBE instruction", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.movdir64b)] = .{ + result[@intFromEnum(Feature.movdir64b)] = .{ .llvm_name = "movdir64b", .description = "Support movdir64b instruction (direct store 64 bytes)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.movdiri)] = .{ + result[@intFromEnum(Feature.movdiri)] = .{ .llvm_name = "movdiri", .description = "Support movdiri instruction (direct store integer)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.mwaitx)] = .{ + result[@intFromEnum(Feature.mwaitx)] = .{ .llvm_name = "mwaitx", .description = "Enable MONITORX/MWAITX timer functionality", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.nopl)] = .{ + result[@intFromEnum(Feature.nopl)] = .{ .llvm_name = "nopl", .description = "Enable NOPL instruction (generally pentium pro+)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.pad_short_functions)] = .{ + result[@intFromEnum(Feature.pad_short_functions)] = .{ .llvm_name = "pad-short-functions", .description = "Pad short functions (to prevent a stall when returning too early)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.pclmul)] = .{ + result[@intFromEnum(Feature.pclmul)] = .{ .llvm_name = "pclmul", .description = "Enable packed carry-less multiplication instructions", .dependencies = featureSet(&[_]Feature{ .sse2, }), }; - result[@enumToInt(Feature.pconfig)] = .{ + result[@intFromEnum(Feature.pconfig)] = .{ .llvm_name = "pconfig", .description = "platform configuration instruction", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.pku)] = .{ + result[@intFromEnum(Feature.pku)] = .{ .llvm_name = "pku", .description = "Enable protection keys", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.popcnt)] = .{ + result[@intFromEnum(Feature.popcnt)] = .{ .llvm_name = "popcnt", .description = "Support POPCNT instruction", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.prefer_128_bit)] = .{ + result[@intFromEnum(Feature.prefer_128_bit)] = .{ .llvm_name = "prefer-128-bit", .description = "Prefer 128-bit AVX instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.prefer_256_bit)] = .{ + result[@intFromEnum(Feature.prefer_256_bit)] = .{ .llvm_name = "prefer-256-bit", .description = "Prefer 256-bit AVX instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.prefer_mask_registers)] = .{ + result[@intFromEnum(Feature.prefer_mask_registers)] = .{ .llvm_name = "prefer-mask-registers", .description = "Prefer AVX512 mask registers over PTEST/MOVMSK", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.prefetchi)] = .{ + result[@intFromEnum(Feature.prefetchi)] = .{ .llvm_name = "prefetchi", .description = "Prefetch instruction with T0 or T1 Hint", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.prefetchwt1)] = .{ + result[@intFromEnum(Feature.prefetchwt1)] = .{ .llvm_name = "prefetchwt1", .description = "Prefetch with Intent to Write and T1 Hint", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.prfchw)] = .{ + result[@intFromEnum(Feature.prfchw)] = .{ .llvm_name = "prfchw", .description = "Support PRFCHW instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.ptwrite)] = .{ + result[@intFromEnum(Feature.ptwrite)] = .{ .llvm_name = "ptwrite", .description = "Support ptwrite instruction", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.raoint)] = .{ + result[@intFromEnum(Feature.raoint)] = .{ .llvm_name = "raoint", .description = "Support RAO-INT instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.rdpid)] = .{ + result[@intFromEnum(Feature.rdpid)] = .{ .llvm_name = "rdpid", .description = "Support RDPID instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.rdpru)] = .{ + result[@intFromEnum(Feature.rdpru)] = .{ .llvm_name = "rdpru", .description = "Support RDPRU instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.rdrnd)] = .{ + result[@intFromEnum(Feature.rdrnd)] = .{ .llvm_name = "rdrnd", .description = "Support RDRAND instruction", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.rdseed)] = .{ + result[@intFromEnum(Feature.rdseed)] = .{ .llvm_name = "rdseed", .description = "Support RDSEED instruction", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.retpoline)] = .{ + result[@intFromEnum(Feature.retpoline)] = .{ .llvm_name = "retpoline", .description = "Remove speculation of indirect branches from the generated code, either by avoiding them entirely or lowering them with a speculation blocking construct", .dependencies = featureSet(&[_]Feature{ @@ -831,200 +831,200 @@ pub const all_features = blk: { .retpoline_indirect_calls, }), }; - result[@enumToInt(Feature.retpoline_external_thunk)] = .{ + result[@intFromEnum(Feature.retpoline_external_thunk)] = .{ .llvm_name = "retpoline-external-thunk", .description = "When lowering an indirect call or branch using a `retpoline`, rely on the specified user provided thunk rather than emitting one ourselves. Only has effect when combined with some other retpoline feature", .dependencies = featureSet(&[_]Feature{ .retpoline_indirect_calls, }), }; - result[@enumToInt(Feature.retpoline_indirect_branches)] = .{ + result[@intFromEnum(Feature.retpoline_indirect_branches)] = .{ .llvm_name = "retpoline-indirect-branches", .description = "Remove speculation of indirect branches from the generated code", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.retpoline_indirect_calls)] = .{ + result[@intFromEnum(Feature.retpoline_indirect_calls)] = .{ .llvm_name = "retpoline-indirect-calls", .description = "Remove speculation of indirect calls from the generated code", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.rtm)] = .{ + result[@intFromEnum(Feature.rtm)] = .{ .llvm_name = "rtm", .description = "Support RTM instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.sahf)] = .{ + result[@intFromEnum(Feature.sahf)] = .{ .llvm_name = "sahf", .description = "Support LAHF and SAHF instructions in 64-bit mode", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.sbb_dep_breaking)] = .{ + result[@intFromEnum(Feature.sbb_dep_breaking)] = .{ .llvm_name = "sbb-dep-breaking", .description = "SBB with same register has no source dependency", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.serialize)] = .{ + result[@intFromEnum(Feature.serialize)] = .{ .llvm_name = "serialize", .description = "Has serialize instruction", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.seses)] = .{ + result[@intFromEnum(Feature.seses)] = .{ .llvm_name = "seses", .description = "Prevent speculative execution side channel timing attacks by inserting a speculation barrier before memory reads, memory writes, and conditional branches. Implies LVI Control Flow integrity.", .dependencies = featureSet(&[_]Feature{ .lvi_cfi, }), }; - result[@enumToInt(Feature.sgx)] = .{ + result[@intFromEnum(Feature.sgx)] = .{ .llvm_name = "sgx", .description = "Enable Software Guard Extensions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.sha)] = .{ + result[@intFromEnum(Feature.sha)] = .{ .llvm_name = "sha", .description = "Enable SHA instructions", .dependencies = featureSet(&[_]Feature{ .sse2, }), }; - result[@enumToInt(Feature.shstk)] = .{ + result[@intFromEnum(Feature.shstk)] = .{ .llvm_name = "shstk", .description = "Support CET Shadow-Stack instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.slow_3ops_lea)] = .{ + result[@intFromEnum(Feature.slow_3ops_lea)] = .{ .llvm_name = "slow-3ops-lea", .description = "LEA instruction with 3 ops or certain registers is slow", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.slow_incdec)] = .{ + result[@intFromEnum(Feature.slow_incdec)] = .{ .llvm_name = "slow-incdec", .description = "INC and DEC instructions are slower than ADD and SUB", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.slow_lea)] = .{ + result[@intFromEnum(Feature.slow_lea)] = .{ .llvm_name = "slow-lea", .description = "LEA instruction with certain arguments is slow", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.slow_pmaddwd)] = .{ + result[@intFromEnum(Feature.slow_pmaddwd)] = .{ .llvm_name = "slow-pmaddwd", .description = "PMADDWD is slower than PMULLD", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.slow_pmulld)] = .{ + result[@intFromEnum(Feature.slow_pmulld)] = .{ .llvm_name = "slow-pmulld", .description = "PMULLD instruction is slow (compared to PMULLW/PMULHW and PMULUDQ)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.slow_shld)] = .{ + result[@intFromEnum(Feature.slow_shld)] = .{ .llvm_name = "slow-shld", .description = "SHLD instruction is slow", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.slow_two_mem_ops)] = .{ + result[@intFromEnum(Feature.slow_two_mem_ops)] = .{ .llvm_name = "slow-two-mem-ops", .description = "Two memory operand instructions are slow", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.slow_unaligned_mem_16)] = .{ + result[@intFromEnum(Feature.slow_unaligned_mem_16)] = .{ .llvm_name = "slow-unaligned-mem-16", .description = "Slow unaligned 16-byte memory access", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.slow_unaligned_mem_32)] = .{ + result[@intFromEnum(Feature.slow_unaligned_mem_32)] = .{ .llvm_name = "slow-unaligned-mem-32", .description = "Slow unaligned 32-byte memory access", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.soft_float)] = .{ + result[@intFromEnum(Feature.soft_float)] = .{ .llvm_name = "soft-float", .description = "Use software floating point features", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.sse)] = .{ + result[@intFromEnum(Feature.sse)] = .{ .llvm_name = "sse", .description = "Enable SSE instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.sse2)] = .{ + result[@intFromEnum(Feature.sse2)] = .{ .llvm_name = "sse2", .description = "Enable SSE2 instructions", .dependencies = featureSet(&[_]Feature{ .sse, }), }; - result[@enumToInt(Feature.sse3)] = .{ + result[@intFromEnum(Feature.sse3)] = .{ .llvm_name = "sse3", .description = "Enable SSE3 instructions", .dependencies = featureSet(&[_]Feature{ .sse2, }), }; - result[@enumToInt(Feature.sse4_1)] = .{ + result[@intFromEnum(Feature.sse4_1)] = .{ .llvm_name = "sse4.1", .description = "Enable SSE 4.1 instructions", .dependencies = featureSet(&[_]Feature{ .ssse3, }), }; - result[@enumToInt(Feature.sse4_2)] = .{ + result[@intFromEnum(Feature.sse4_2)] = .{ .llvm_name = "sse4.2", .description = "Enable SSE 4.2 instructions", .dependencies = featureSet(&[_]Feature{ .sse4_1, }), }; - result[@enumToInt(Feature.sse4a)] = .{ + result[@intFromEnum(Feature.sse4a)] = .{ .llvm_name = "sse4a", .description = "Support SSE 4a instructions", .dependencies = featureSet(&[_]Feature{ .sse3, }), }; - result[@enumToInt(Feature.sse_unaligned_mem)] = .{ + result[@intFromEnum(Feature.sse_unaligned_mem)] = .{ .llvm_name = "sse-unaligned-mem", .description = "Allow unaligned memory operands with SSE instructions (this may require setting a configuration bit in the processor)", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.ssse3)] = .{ + result[@intFromEnum(Feature.ssse3)] = .{ .llvm_name = "ssse3", .description = "Enable SSSE3 instructions", .dependencies = featureSet(&[_]Feature{ .sse3, }), }; - result[@enumToInt(Feature.tagged_globals)] = .{ + result[@intFromEnum(Feature.tagged_globals)] = .{ .llvm_name = "tagged-globals", .description = "Use an instruction sequence for taking the address of a global that allows a memory tag in the upper address bits.", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.tbm)] = .{ + result[@intFromEnum(Feature.tbm)] = .{ .llvm_name = "tbm", .description = "Enable TBM instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.tsxldtrk)] = .{ + result[@intFromEnum(Feature.tsxldtrk)] = .{ .llvm_name = "tsxldtrk", .description = "Support TSXLDTRK instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.uintr)] = .{ + result[@intFromEnum(Feature.uintr)] = .{ .llvm_name = "uintr", .description = "Has UINTR Instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.use_glm_div_sqrt_costs)] = .{ + result[@intFromEnum(Feature.use_glm_div_sqrt_costs)] = .{ .llvm_name = "use-glm-div-sqrt-costs", .description = "Use Goldmont specific floating point div/sqrt costs", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.use_slm_arith_costs)] = .{ + result[@intFromEnum(Feature.use_slm_arith_costs)] = .{ .llvm_name = "use-slm-arith-costs", .description = "Use Silvermont specific arithmetic costs", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.vaes)] = .{ + result[@intFromEnum(Feature.vaes)] = .{ .llvm_name = "vaes", .description = "Promote selected AES instructions to AVX512/AVX registers", .dependencies = featureSet(&[_]Feature{ @@ -1032,7 +1032,7 @@ pub const all_features = blk: { .avx, }), }; - result[@enumToInt(Feature.vpclmulqdq)] = .{ + result[@intFromEnum(Feature.vpclmulqdq)] = .{ .llvm_name = "vpclmulqdq", .description = "Enable vpclmulqdq instructions", .dependencies = featureSet(&[_]Feature{ @@ -1040,60 +1040,60 @@ pub const all_features = blk: { .pclmul, }), }; - result[@enumToInt(Feature.vzeroupper)] = .{ + result[@intFromEnum(Feature.vzeroupper)] = .{ .llvm_name = "vzeroupper", .description = "Should insert vzeroupper instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.waitpkg)] = .{ + result[@intFromEnum(Feature.waitpkg)] = .{ .llvm_name = "waitpkg", .description = "Wait and pause enhancements", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.wbnoinvd)] = .{ + result[@intFromEnum(Feature.wbnoinvd)] = .{ .llvm_name = "wbnoinvd", .description = "Write Back No Invalidate", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.widekl)] = .{ + result[@intFromEnum(Feature.widekl)] = .{ .llvm_name = "widekl", .description = "Support Key Locker wide Instructions", .dependencies = featureSet(&[_]Feature{ .kl, }), }; - result[@enumToInt(Feature.x87)] = .{ + result[@intFromEnum(Feature.x87)] = .{ .llvm_name = "x87", .description = "Enable X87 float instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.xop)] = .{ + result[@intFromEnum(Feature.xop)] = .{ .llvm_name = "xop", .description = "Enable XOP instructions", .dependencies = featureSet(&[_]Feature{ .fma4, }), }; - result[@enumToInt(Feature.xsave)] = .{ + result[@intFromEnum(Feature.xsave)] = .{ .llvm_name = "xsave", .description = "Support xsave instructions", .dependencies = featureSet(&[_]Feature{}), }; - result[@enumToInt(Feature.xsavec)] = .{ + result[@intFromEnum(Feature.xsavec)] = .{ .llvm_name = "xsavec", .description = "Support xsavec instructions", .dependencies = featureSet(&[_]Feature{ .xsave, }), }; - result[@enumToInt(Feature.xsaveopt)] = .{ + result[@intFromEnum(Feature.xsaveopt)] = .{ .llvm_name = "xsaveopt", .description = "Support xsaveopt instructions", .dependencies = featureSet(&[_]Feature{ .xsave, }), }; - result[@enumToInt(Feature.xsaves)] = .{ + result[@intFromEnum(Feature.xsaves)] = .{ .llvm_name = "xsaves", .description = "Support xsaves instructions", .dependencies = featureSet(&[_]Feature{ diff --git a/lib/std/target/xtensa.zig b/lib/std/target/xtensa.zig index 5979abcaf1..22851c4554 100644 --- a/lib/std/target/xtensa.zig +++ b/lib/std/target/xtensa.zig @@ -17,7 +17,7 @@ pub const all_features = blk: { const len = @typeInfo(Feature).Enum.fields.len; std.debug.assert(len <= CpuFeature.Set.needed_bit_count); var result: [len]CpuFeature = undefined; - result[@enumToInt(Feature.density)] = .{ + result[@intFromEnum(Feature.density)] = .{ .llvm_name = "density", .description = "Enable Density instructions", .dependencies = featureSet(&[_]Feature{}), diff --git a/lib/std/time/epoch.zig b/lib/std/time/epoch.zig index 0a9c18656f..279acc4298 100644 --- a/lib/std/time/epoch.zig +++ b/lib/std/time/epoch.zig @@ -83,7 +83,7 @@ pub const Month = enum(u4) { /// return the numeric calendar value for the given month /// i.e. jan=1, feb=2, etc pub fn numeric(self: Month) u4 { - return @enumToInt(self); + return @intFromEnum(self); } }; @@ -122,7 +122,7 @@ pub const YearAndDay = struct { if (days_left < days_in_month) break; days_left -= days_in_month; - month = @intToEnum(Month, @enumToInt(month) + 1); + month = @enumFromInt(Month, @intFromEnum(month) + 1); } return .{ .month = month, .day_index = @intCast(u5, days_left) }; } diff --git a/lib/std/treap.zig b/lib/std/treap.zig index a74256356c..eabcfd0518 100644 --- a/lib/std/treap.zig +++ b/lib/std/treap.zig @@ -159,7 +159,7 @@ pub fn Treap(comptime Key: type, comptime compareFn: anytype) type { if (order == .eq) break; parent_ref.* = current; - node = current.children[@boolToInt(order == .gt)]; + node = current.children[@intFromBool(order == .gt)]; } return node; @@ -168,12 +168,12 @@ pub fn Treap(comptime Key: type, comptime compareFn: anytype) type { fn insert(self: *Self, key: Key, parent: ?*Node, node: *Node) void { // generate a random priority & prepare the node to be inserted into the tree node.key = key; - node.priority = self.prng.random(@ptrToInt(node)); + node.priority = self.prng.random(@intFromPtr(node)); node.parent = parent; node.children = [_]?*Node{ null, null }; // point the parent at the new node - const link = if (parent) |p| &p.children[@boolToInt(compare(key, p.key) == .gt)] else &self.root; + const link = if (parent) |p| &p.children[@intFromBool(compare(key, p.key) == .gt)] else &self.root; assert(link.* == null); link.* = node; @@ -182,7 +182,7 @@ pub fn Treap(comptime Key: type, comptime compareFn: anytype) type { if (p.priority <= node.priority) break; const is_right = p.children[1] == node; - assert(p.children[@boolToInt(is_right)] == node); + assert(p.children[@intFromBool(is_right)] == node); const rotate_right = !is_right; self.rotate(p, rotate_right); @@ -197,7 +197,7 @@ pub fn Treap(comptime Key: type, comptime compareFn: anytype) type { new.children = old.children; // point the parent at the new node - const link = if (old.parent) |p| &p.children[@boolToInt(p.children[1] == old)] else &self.root; + const link = if (old.parent) |p| &p.children[@intFromBool(p.children[1] == old)] else &self.root; assert(link.* == old); link.* = new; @@ -220,7 +220,7 @@ pub fn Treap(comptime Key: type, comptime compareFn: anytype) type { } // node is a now a leaf; remove by nulling out the parent's reference to it. - const link = if (node.parent) |p| &p.children[@boolToInt(p.children[1] == node)] else &self.root; + const link = if (node.parent) |p| &p.children[@intFromBool(p.children[1] == node)] else &self.root; assert(link.* == node); link.* = null; @@ -240,12 +240,12 @@ pub fn Treap(comptime Key: type, comptime compareFn: anytype) type { // parent -> (node (target YY adjacent) XX) // parent -> (target YY (node adjacent XX)) const parent = node.parent; - const target = node.children[@boolToInt(!right)] orelse unreachable; - const adjacent = target.children[@boolToInt(right)]; + const target = node.children[@intFromBool(!right)] orelse unreachable; + const adjacent = target.children[@intFromBool(right)]; // rotate the children - target.children[@boolToInt(right)] = node; - node.children[@boolToInt(!right)] = adjacent; + target.children[@intFromBool(right)] = node; + node.children[@intFromBool(!right)] = adjacent; // rotate the parents node.parent = target; @@ -253,7 +253,7 @@ pub fn Treap(comptime Key: type, comptime compareFn: anytype) type { if (adjacent) |adj| adj.parent = node; // fix the parent link - const link = if (parent) |p| &p.children[@boolToInt(p.children[1] == node)] else &self.root; + const link = if (parent) |p| &p.children[@intFromBool(p.children[1] == node)] else &self.root; assert(link.* == node); link.* = target; } diff --git a/lib/std/unicode/throughput_test.zig b/lib/std/unicode/throughput_test.zig index 66014ad48d..b828b4e43f 100644 --- a/lib/std/unicode/throughput_test.zig +++ b/lib/std/unicode/throughput_test.zig @@ -32,8 +32,8 @@ fn benchmarkCodepointCount(buf: []const u8) !ResultCount { } const end = timer.read(); - const elapsed_s = @intToFloat(f64, end - start) / time.ns_per_s; - const throughput = @floatToInt(u64, @intToFloat(f64, bytes) / elapsed_s); + const elapsed_s = @floatFromInt(f64, end - start) / time.ns_per_s; + const throughput = @intFromFloat(u64, @floatFromInt(f64, bytes) / elapsed_s); return ResultCount{ .count = r, .throughput = throughput }; } diff --git a/lib/std/valgrind.zig b/lib/std/valgrind.zig index 099aaf7360..ae4fde0da1 100644 --- a/lib/std/valgrind.zig +++ b/lib/std/valgrind.zig @@ -94,7 +94,7 @@ pub fn IsTool(base: [2]u8, code: usize) bool { } fn doClientRequestExpr(default: usize, request: ClientRequest, a1: usize, a2: usize, a3: usize, a4: usize, a5: usize) usize { - return doClientRequest(default, @intCast(usize, @enumToInt(request)), a1, a2, a3, a4, a5); + return doClientRequest(default, @intCast(usize, @intFromEnum(request)), a1, a2, a3, a4, a5); } fn doClientRequestStmt(request: ClientRequest, a1: usize, a2: usize, a3: usize, a4: usize, a5: usize) void { @@ -117,7 +117,7 @@ test "works whether running on valgrind or not" { /// a JITter or some such, since it provides a way to make sure valgrind will /// retranslate the invalidated area. Returns no value. pub fn discardTranslations(qzz: []const u8) void { - doClientRequestStmt(.DiscardTranslations, @ptrToInt(qzz.ptr), qzz.len, 0, 0, 0); + doClientRequestStmt(.DiscardTranslations, @intFromPtr(qzz.ptr), qzz.len, 0, 0, 0); } pub fn innerThreads(qzz: [*]u8) void { @@ -125,19 +125,19 @@ pub fn innerThreads(qzz: [*]u8) void { } pub fn nonSIMDCall0(func: fn (usize) usize) usize { - return doClientRequestExpr(0, .ClientCall0, @ptrToInt(func), 0, 0, 0, 0); + return doClientRequestExpr(0, .ClientCall0, @intFromPtr(func), 0, 0, 0, 0); } pub fn nonSIMDCall1(func: fn (usize, usize) usize, a1: usize) usize { - return doClientRequestExpr(0, .ClientCall1, @ptrToInt(func), a1, 0, 0, 0); + return doClientRequestExpr(0, .ClientCall1, @intFromPtr(func), a1, 0, 0, 0); } pub fn nonSIMDCall2(func: fn (usize, usize, usize) usize, a1: usize, a2: usize) usize { - return doClientRequestExpr(0, .ClientCall2, @ptrToInt(func), a1, a2, 0, 0); + return doClientRequestExpr(0, .ClientCall2, @intFromPtr(func), a1, a2, 0, 0); } pub fn nonSIMDCall3(func: fn (usize, usize, usize, usize) usize, a1: usize, a2: usize, a3: usize) usize { - return doClientRequestExpr(0, .ClientCall3, @ptrToInt(func), a1, a2, a3, 0); + return doClientRequestExpr(0, .ClientCall3, @intFromPtr(func), a1, a2, a3, 0); } /// Counts the number of errors that have been recorded by a tool. Nb: @@ -149,15 +149,15 @@ pub fn countErrors() usize { } pub fn mallocLikeBlock(mem: []u8, rzB: usize, is_zeroed: bool) void { - doClientRequestStmt(.MalloclikeBlock, @ptrToInt(mem.ptr), mem.len, rzB, @boolToInt(is_zeroed), 0); + doClientRequestStmt(.MalloclikeBlock, @intFromPtr(mem.ptr), mem.len, rzB, @intFromBool(is_zeroed), 0); } pub fn resizeInPlaceBlock(oldmem: []u8, newsize: usize, rzB: usize) void { - doClientRequestStmt(.ResizeinplaceBlock, @ptrToInt(oldmem.ptr), oldmem.len, newsize, rzB, 0); + doClientRequestStmt(.ResizeinplaceBlock, @intFromPtr(oldmem.ptr), oldmem.len, newsize, rzB, 0); } pub fn freeLikeBlock(addr: [*]u8, rzB: usize) void { - doClientRequestStmt(.FreelikeBlock, @ptrToInt(addr), rzB, 0, 0, 0); + doClientRequestStmt(.FreelikeBlock, @intFromPtr(addr), rzB, 0, 0, 0); } /// Create a memory pool. @@ -166,7 +166,7 @@ pub const MempoolFlags = struct { pub const MetaPool = 2; }; pub fn createMempool(pool: [*]u8, rzB: usize, is_zeroed: bool, flags: usize) void { - doClientRequestStmt(.CreateMempool, @ptrToInt(pool), rzB, @boolToInt(is_zeroed), flags, 0); + doClientRequestStmt(.CreateMempool, @intFromPtr(pool), rzB, @intFromBool(is_zeroed), flags, 0); } /// Destroy a memory pool. @@ -176,39 +176,39 @@ pub fn destroyMempool(pool: [*]u8) void { /// Associate a piece of memory with a memory pool. pub fn mempoolAlloc(pool: [*]u8, mem: []u8) void { - doClientRequestStmt(.MempoolAlloc, @ptrToInt(pool), @ptrToInt(mem.ptr), mem.len, 0, 0); + doClientRequestStmt(.MempoolAlloc, @intFromPtr(pool), @intFromPtr(mem.ptr), mem.len, 0, 0); } /// Disassociate a piece of memory from a memory pool. pub fn mempoolFree(pool: [*]u8, addr: [*]u8) void { - doClientRequestStmt(.MempoolFree, @ptrToInt(pool), @ptrToInt(addr), 0, 0, 0); + doClientRequestStmt(.MempoolFree, @intFromPtr(pool), @intFromPtr(addr), 0, 0, 0); } /// Disassociate any pieces outside a particular range. pub fn mempoolTrim(pool: [*]u8, mem: []u8) void { - doClientRequestStmt(.MempoolTrim, @ptrToInt(pool), @ptrToInt(mem.ptr), mem.len, 0, 0); + doClientRequestStmt(.MempoolTrim, @intFromPtr(pool), @intFromPtr(mem.ptr), mem.len, 0, 0); } /// Resize and/or move a piece associated with a memory pool. pub fn moveMempool(poolA: [*]u8, poolB: [*]u8) void { - doClientRequestStmt(.MoveMempool, @ptrToInt(poolA), @ptrToInt(poolB), 0, 0, 0); + doClientRequestStmt(.MoveMempool, @intFromPtr(poolA), @intFromPtr(poolB), 0, 0, 0); } /// Resize and/or move a piece associated with a memory pool. pub fn mempoolChange(pool: [*]u8, addrA: [*]u8, mem: []u8) void { - doClientRequestStmt(.MempoolChange, @ptrToInt(pool), @ptrToInt(addrA), @ptrToInt(mem.ptr), mem.len, 0); + doClientRequestStmt(.MempoolChange, @intFromPtr(pool), @intFromPtr(addrA), @intFromPtr(mem.ptr), mem.len, 0); } /// Return if a mempool exists. pub fn mempoolExists(pool: [*]u8) bool { - return doClientRequestExpr(0, .MempoolExists, @ptrToInt(pool), 0, 0, 0, 0) != 0; + return doClientRequestExpr(0, .MempoolExists, @intFromPtr(pool), 0, 0, 0, 0) != 0; } /// Mark a piece of memory as being a stack. Returns a stack id. /// start is the lowest addressable stack byte, end is the highest /// addressable stack byte. pub fn stackRegister(stack: []u8) usize { - return doClientRequestExpr(0, .StackRegister, @ptrToInt(stack.ptr), @ptrToInt(stack.ptr) + stack.len, 0, 0, 0); + return doClientRequestExpr(0, .StackRegister, @intFromPtr(stack.ptr), @intFromPtr(stack.ptr) + stack.len, 0, 0, 0); } /// Unmark the piece of memory associated with a stack id as being a stack. @@ -220,7 +220,7 @@ pub fn stackDeregister(id: usize) void { /// start is the new lowest addressable stack byte, end is the new highest /// addressable stack byte. pub fn stackChange(id: usize, newstack: []u8) void { - doClientRequestStmt(.StackChange, id, @ptrToInt(newstack.ptr), @ptrToInt(newstack.ptr) + newstack.len, 0, 0); + doClientRequestStmt(.StackChange, id, @intFromPtr(newstack.ptr), @intFromPtr(newstack.ptr) + newstack.len, 0, 0); } // Load PDB debug info for Wine PE image_map. @@ -235,7 +235,7 @@ pub fn stackChange(id: usize, newstack: []u8) void { /// result will be dumped in there and is guaranteed to be zero /// terminated. If no info is found, the first byte is set to zero. pub fn mapIpToSrcloc(addr: *const u8, buf64: [64]u8) usize { - return doClientRequestExpr(0, .MapIpToSrcloc, @ptrToInt(addr), @ptrToInt(&buf64[0]), 0, 0, 0); + return doClientRequestExpr(0, .MapIpToSrcloc, @intFromPtr(addr), @intFromPtr(&buf64[0]), 0, 0, 0); } /// Disable error reporting for this thread. Behaves in a stack like @@ -261,7 +261,7 @@ pub fn enableErrorReporting() void { /// If no connection is opened, output will go to the log output. /// Returns 1 if command not recognised, 0 otherwise. pub fn monitorCommand(command: [*]u8) bool { - return doClientRequestExpr(0, .GdbMonitorCommand, @ptrToInt(command.ptr), 0, 0, 0, 0) != 0; + return doClientRequestExpr(0, .GdbMonitorCommand, @intFromPtr(command.ptr), 0, 0, 0, 0) != 0; } pub const memcheck = @import("valgrind/memcheck.zig"); diff --git a/lib/std/valgrind/callgrind.zig b/lib/std/valgrind/callgrind.zig index fd6967bb96..f3d8c7ae3c 100644 --- a/lib/std/valgrind/callgrind.zig +++ b/lib/std/valgrind/callgrind.zig @@ -11,7 +11,7 @@ pub const CallgrindClientRequest = enum(usize) { }; fn doCallgrindClientRequestExpr(default: usize, request: CallgrindClientRequest, a1: usize, a2: usize, a3: usize, a4: usize, a5: usize) usize { - return valgrind.doClientRequest(default, @intCast(usize, @enumToInt(request)), a1, a2, a3, a4, a5); + return valgrind.doClientRequest(default, @intCast(usize, @intFromEnum(request)), a1, a2, a3, a4, a5); } fn doCallgrindClientRequestStmt(request: CallgrindClientRequest, a1: usize, a2: usize, a3: usize, a4: usize, a5: usize) void { @@ -28,7 +28,7 @@ pub fn dumpStats() void { /// the dump. This string is written as a description field into the /// profile data dump. pub fn dumpStatsAt(pos_str: [*]u8) void { - doCallgrindClientRequestStmt(.DumpStatsAt, @ptrToInt(pos_str), 0, 0, 0, 0); + doCallgrindClientRequestStmt(.DumpStatsAt, @intFromPtr(pos_str), 0, 0, 0, 0); } /// Zero cost centers diff --git a/lib/std/valgrind/memcheck.zig b/lib/std/valgrind/memcheck.zig index 25081510cd..dd6c79cd90 100644 --- a/lib/std/valgrind/memcheck.zig +++ b/lib/std/valgrind/memcheck.zig @@ -21,7 +21,7 @@ pub const MemCheckClientRequest = enum(usize) { }; fn doMemCheckClientRequestExpr(default: usize, request: MemCheckClientRequest, a1: usize, a2: usize, a3: usize, a4: usize, a5: usize) usize { - return valgrind.doClientRequest(default, @intCast(usize, @enumToInt(request)), a1, a2, a3, a4, a5); + return valgrind.doClientRequest(default, @intCast(usize, @intFromEnum(request)), a1, a2, a3, a4, a5); } fn doMemCheckClientRequestStmt(request: MemCheckClientRequest, a1: usize, a2: usize, a3: usize, a4: usize, a5: usize) void { @@ -32,7 +32,7 @@ fn doMemCheckClientRequestStmt(request: MemCheckClientRequest, a1: usize, a2: us /// This returns -1 when run on Valgrind and 0 otherwise. pub fn makeMemNoAccess(qzz: []u8) i1 { return @intCast(i1, doMemCheckClientRequestExpr(0, // default return - .MakeMemNoAccess, @ptrToInt(qzz.ptr), qzz.len, 0, 0, 0)); + .MakeMemNoAccess, @intFromPtr(qzz.ptr), qzz.len, 0, 0, 0)); } /// Similarly, mark memory at qzz.ptr as addressable but undefined @@ -40,7 +40,7 @@ pub fn makeMemNoAccess(qzz: []u8) i1 { /// This returns -1 when run on Valgrind and 0 otherwise. pub fn makeMemUndefined(qzz: []u8) i1 { return @intCast(i1, doMemCheckClientRequestExpr(0, // default return - .MakeMemUndefined, @ptrToInt(qzz.ptr), qzz.len, 0, 0, 0)); + .MakeMemUndefined, @intFromPtr(qzz.ptr), qzz.len, 0, 0, 0)); } /// Similarly, mark memory at qzz.ptr as addressable and defined @@ -48,7 +48,7 @@ pub fn makeMemUndefined(qzz: []u8) i1 { pub fn makeMemDefined(qzz: []u8) i1 { // This returns -1 when run on Valgrind and 0 otherwise. return @intCast(i1, doMemCheckClientRequestExpr(0, // default return - .MakeMemDefined, @ptrToInt(qzz.ptr), qzz.len, 0, 0, 0)); + .MakeMemDefined, @intFromPtr(qzz.ptr), qzz.len, 0, 0, 0)); } /// Similar to makeMemDefined except that addressability is @@ -57,7 +57,7 @@ pub fn makeMemDefined(qzz: []u8) i1 { /// This returns -1 when run on Valgrind and 0 otherwise. pub fn makeMemDefinedIfAddressable(qzz: []u8) i1 { return @intCast(i1, doMemCheckClientRequestExpr(0, // default return - .MakeMemDefinedIfAddressable, @ptrToInt(qzz.ptr), qzz.len, 0, 0, 0)); + .MakeMemDefinedIfAddressable, @intFromPtr(qzz.ptr), qzz.len, 0, 0, 0)); } /// Create a block-description handle. The description is an ascii @@ -66,7 +66,7 @@ pub fn makeMemDefinedIfAddressable(qzz: []u8) i1 { /// properties of the memory range. pub fn createBlock(qzz: []u8, desc: [*]u8) usize { return doMemCheckClientRequestExpr(0, // default return - .CreateBlock, @ptrToInt(qzz.ptr), qzz.len, @ptrToInt(desc), 0, 0); + .CreateBlock, @intFromPtr(qzz.ptr), qzz.len, @intFromPtr(desc), 0, 0); } /// Discard a block-description-handle. Returns 1 for an @@ -81,7 +81,7 @@ pub fn discard(blkindex: usize) bool { /// error message and returns the address of the first offending byte. /// Otherwise it returns zero. pub fn checkMemIsAddressable(qzz: []u8) usize { - return doMemCheckClientRequestExpr(0, .CheckMemIsAddressable, @ptrToInt(qzz.ptr), qzz.len, 0, 0, 0); + return doMemCheckClientRequestExpr(0, .CheckMemIsAddressable, @intFromPtr(qzz.ptr), qzz.len, 0, 0, 0); } /// Check that memory at qzz.ptr is addressable and defined for @@ -89,7 +89,7 @@ pub fn checkMemIsAddressable(qzz: []u8) usize { /// established, Valgrind prints an error message and returns the /// address of the first offending byte. Otherwise it returns zero. pub fn checkMemIsDefined(qzz: []u8) usize { - return doMemCheckClientRequestExpr(0, .CheckMemIsDefined, @ptrToInt(qzz.ptr), qzz.len, 0, 0, 0); + return doMemCheckClientRequestExpr(0, .CheckMemIsDefined, @intFromPtr(qzz.ptr), qzz.len, 0, 0, 0); } /// Do a full memory leak check (like --leak-check=full) mid-execution. @@ -134,10 +134,10 @@ pub fn countLeaks() CountResult { }; doMemCheckClientRequestStmt( .CountLeaks, - @ptrToInt(&res.leaked), - @ptrToInt(&res.dubious), - @ptrToInt(&res.reachable), - @ptrToInt(&res.suppressed), + @intFromPtr(&res.leaked), + @intFromPtr(&res.dubious), + @intFromPtr(&res.reachable), + @intFromPtr(&res.suppressed), 0, ); return res; @@ -164,10 +164,10 @@ pub fn countLeakBlocks() CountResult { }; doMemCheckClientRequestStmt( .CountLeakBlocks, - @ptrToInt(&res.leaked), - @ptrToInt(&res.dubious), - @ptrToInt(&res.reachable), - @ptrToInt(&res.suppressed), + @intFromPtr(&res.leaked), + @intFromPtr(&res.dubious), + @intFromPtr(&res.reachable), + @intFromPtr(&res.suppressed), 0, ); return res; @@ -195,7 +195,7 @@ test "countLeakBlocks" { /// impossible to segfault your system by using this call. pub fn getVbits(zza: []u8, zzvbits: []u8) u2 { std.debug.assert(zzvbits.len >= zza.len / 8); - return @intCast(u2, doMemCheckClientRequestExpr(0, .GetVbits, @ptrToInt(zza.ptr), @ptrToInt(zzvbits), zza.len, 0, 0)); + return @intCast(u2, doMemCheckClientRequestExpr(0, .GetVbits, @intFromPtr(zza.ptr), @intFromPtr(zzvbits), zza.len, 0, 0)); } /// Set the validity data for addresses zza, copying it @@ -208,17 +208,17 @@ pub fn getVbits(zza: []u8, zzvbits: []u8) u2 { /// impossible to segfault your system by using this call. pub fn setVbits(zzvbits: []u8, zza: []u8) u2 { std.debug.assert(zzvbits.len >= zza.len / 8); - return @intCast(u2, doMemCheckClientRequestExpr(0, .SetVbits, @ptrToInt(zza.ptr), @ptrToInt(zzvbits), zza.len, 0, 0)); + return @intCast(u2, doMemCheckClientRequestExpr(0, .SetVbits, @intFromPtr(zza.ptr), @intFromPtr(zzvbits), zza.len, 0, 0)); } /// Disable and re-enable reporting of addressing errors in the /// specified address range. pub fn disableAddrErrorReportingInRange(qzz: []u8) usize { return doMemCheckClientRequestExpr(0, // default return - .DisableAddrErrorReportingInRange, @ptrToInt(qzz.ptr), qzz.len, 0, 0, 0); + .DisableAddrErrorReportingInRange, @intFromPtr(qzz.ptr), qzz.len, 0, 0, 0); } pub fn enableAddrErrorReportingInRange(qzz: []u8) usize { return doMemCheckClientRequestExpr(0, // default return - .EnableAddrErrorReportingInRange, @ptrToInt(qzz.ptr), qzz.len, 0, 0, 0); + .EnableAddrErrorReportingInRange, @intFromPtr(qzz.ptr), qzz.len, 0, 0, 0); } diff --git a/lib/std/wasm.zig b/lib/std/wasm.zig index d54e998b67..b02f72ed4c 100644 --- a/lib/std/wasm.zig +++ b/lib/std/wasm.zig @@ -198,7 +198,7 @@ pub const Opcode = enum(u8) { /// Returns the integer value of an `Opcode`. Used by the Zig compiler /// to write instructions to the wasm binary file pub fn opcode(op: Opcode) u8 { - return @enumToInt(op); + return @intFromEnum(op); } test "Wasm - opcodes" { @@ -244,7 +244,7 @@ pub const MiscOpcode = enum(u32) { /// Returns the integer value of an `MiscOpcode`. Used by the Zig compiler /// to write instructions to the wasm binary file pub fn miscOpcode(op: MiscOpcode) u32 { - return @enumToInt(op); + return @intFromEnum(op); } /// Simd opcodes that require a prefix `0xFD`. @@ -515,7 +515,7 @@ pub const SimdOpcode = enum(u32) { /// Returns the integer value of an `SimdOpcode`. Used by the Zig compiler /// to write instructions to the wasm binary file pub fn simdOpcode(op: SimdOpcode) u32 { - return @enumToInt(op); + return @intFromEnum(op); } /// Simd opcodes that require a prefix `0xFE`. @@ -595,7 +595,7 @@ pub const AtomicsOpcode = enum(u32) { /// Returns the integer value of an `AtomicsOpcode`. Used by the Zig compiler /// to write instructions to the wasm binary file pub fn atomicsOpcode(op: AtomicsOpcode) u32 { - return @enumToInt(op); + return @intFromEnum(op); } /// Enum representing all Wasm value types as per spec: @@ -610,7 +610,7 @@ pub const Valtype = enum(u8) { /// Returns the integer value of a `Valtype` pub fn valtype(value: Valtype) u8 { - return @enumToInt(value); + return @intFromEnum(value); } /// Reference types, where the funcref references to a function regardless of its type @@ -622,7 +622,7 @@ pub const RefType = enum(u8) { /// Returns the integer value of a `Reftype` pub fn reftype(value: RefType) u8 { - return @enumToInt(value); + return @intFromEnum(value); } test "Wasm - valtypes" { @@ -649,11 +649,11 @@ pub const Limits = struct { }; pub fn hasFlag(limits: Limits, flag: Flags) bool { - return limits.flags & @enumToInt(flag) != 0; + return limits.flags & @intFromEnum(flag) != 0; } pub fn setFlag(limits: *Limits, flag: Flags) void { - limits.flags |= @enumToInt(flag); + limits.flags |= @intFromEnum(flag); } }; @@ -790,7 +790,7 @@ pub const Section = enum(u8) { /// Returns the integer value of a given `Section` pub fn section(val: Section) u8 { - return @enumToInt(val); + return @intFromEnum(val); } /// The kind of the type when importing or exporting to/from the host environment @@ -804,7 +804,7 @@ pub const ExternalKind = enum(u8) { /// Returns the integer value of a given `ExternalKind` pub fn externalKind(val: ExternalKind) u8 { - return @enumToInt(val); + return @intFromEnum(val); } /// Defines the enum values for each subsection id for the "Names" custom section diff --git a/lib/std/zig/Ast.zig b/lib/std/zig/Ast.zig index 7bc78c17da..86e4e48820 100644 --- a/lib/std/zig/Ast.zig +++ b/lib/std/zig/Ast.zig @@ -208,22 +208,22 @@ pub fn renderError(tree: Ast, parse_error: Error, stream: anytype) !void { }, .expected_block => { return stream.print("expected block, found '{s}'", .{ - token_tags[parse_error.token + @boolToInt(parse_error.token_is_prev)].symbol(), + token_tags[parse_error.token + @intFromBool(parse_error.token_is_prev)].symbol(), }); }, .expected_block_or_assignment => { return stream.print("expected block or assignment, found '{s}'", .{ - token_tags[parse_error.token + @boolToInt(parse_error.token_is_prev)].symbol(), + token_tags[parse_error.token + @intFromBool(parse_error.token_is_prev)].symbol(), }); }, .expected_block_or_expr => { return stream.print("expected block or expression, found '{s}'", .{ - token_tags[parse_error.token + @boolToInt(parse_error.token_is_prev)].symbol(), + token_tags[parse_error.token + @intFromBool(parse_error.token_is_prev)].symbol(), }); }, .expected_block_or_field => { return stream.print("expected block or field, found '{s}'", .{ - token_tags[parse_error.token + @boolToInt(parse_error.token_is_prev)].symbol(), + token_tags[parse_error.token + @intFromBool(parse_error.token_is_prev)].symbol(), }); }, .expected_container_members => { @@ -233,42 +233,42 @@ pub fn renderError(tree: Ast, parse_error: Error, stream: anytype) !void { }, .expected_expr => { return stream.print("expected expression, found '{s}'", .{ - token_tags[parse_error.token + @boolToInt(parse_error.token_is_prev)].symbol(), + token_tags[parse_error.token + @intFromBool(parse_error.token_is_prev)].symbol(), }); }, .expected_expr_or_assignment => { return stream.print("expected expression or assignment, found '{s}'", .{ - token_tags[parse_error.token + @boolToInt(parse_error.token_is_prev)].symbol(), + token_tags[parse_error.token + @intFromBool(parse_error.token_is_prev)].symbol(), }); }, .expected_fn => { return stream.print("expected function, found '{s}'", .{ - token_tags[parse_error.token + @boolToInt(parse_error.token_is_prev)].symbol(), + token_tags[parse_error.token + @intFromBool(parse_error.token_is_prev)].symbol(), }); }, .expected_inlinable => { return stream.print("expected 'while' or 'for', found '{s}'", .{ - token_tags[parse_error.token + @boolToInt(parse_error.token_is_prev)].symbol(), + token_tags[parse_error.token + @intFromBool(parse_error.token_is_prev)].symbol(), }); }, .expected_labelable => { return stream.print("expected 'while', 'for', 'inline', or '{{', found '{s}'", .{ - token_tags[parse_error.token + @boolToInt(parse_error.token_is_prev)].symbol(), + token_tags[parse_error.token + @intFromBool(parse_error.token_is_prev)].symbol(), }); }, .expected_param_list => { return stream.print("expected parameter list, found '{s}'", .{ - token_tags[parse_error.token + @boolToInt(parse_error.token_is_prev)].symbol(), + token_tags[parse_error.token + @intFromBool(parse_error.token_is_prev)].symbol(), }); }, .expected_prefix_expr => { return stream.print("expected prefix expression, found '{s}'", .{ - token_tags[parse_error.token + @boolToInt(parse_error.token_is_prev)].symbol(), + token_tags[parse_error.token + @intFromBool(parse_error.token_is_prev)].symbol(), }); }, .expected_primary_type_expr => { return stream.print("expected primary type expression, found '{s}'", .{ - token_tags[parse_error.token + @boolToInt(parse_error.token_is_prev)].symbol(), + token_tags[parse_error.token + @intFromBool(parse_error.token_is_prev)].symbol(), }); }, .expected_pub_item => { @@ -276,7 +276,7 @@ pub fn renderError(tree: Ast, parse_error: Error, stream: anytype) !void { }, .expected_return_type => { return stream.print("expected return type expression, found '{s}'", .{ - token_tags[parse_error.token + @boolToInt(parse_error.token_is_prev)].symbol(), + token_tags[parse_error.token + @intFromBool(parse_error.token_is_prev)].symbol(), }); }, .expected_semi_or_else => { @@ -292,32 +292,32 @@ pub fn renderError(tree: Ast, parse_error: Error, stream: anytype) !void { }, .expected_suffix_op => { return stream.print("expected pointer dereference, optional unwrap, or field access, found '{s}'", .{ - token_tags[parse_error.token + @boolToInt(parse_error.token_is_prev)].symbol(), + token_tags[parse_error.token + @intFromBool(parse_error.token_is_prev)].symbol(), }); }, .expected_type_expr => { return stream.print("expected type expression, found '{s}'", .{ - token_tags[parse_error.token + @boolToInt(parse_error.token_is_prev)].symbol(), + token_tags[parse_error.token + @intFromBool(parse_error.token_is_prev)].symbol(), }); }, .expected_var_decl => { return stream.print("expected variable declaration, found '{s}'", .{ - token_tags[parse_error.token + @boolToInt(parse_error.token_is_prev)].symbol(), + token_tags[parse_error.token + @intFromBool(parse_error.token_is_prev)].symbol(), }); }, .expected_var_decl_or_fn => { return stream.print("expected variable declaration or function, found '{s}'", .{ - token_tags[parse_error.token + @boolToInt(parse_error.token_is_prev)].symbol(), + token_tags[parse_error.token + @intFromBool(parse_error.token_is_prev)].symbol(), }); }, .expected_loop_payload => { return stream.print("expected loop payload, found '{s}'", .{ - token_tags[parse_error.token + @boolToInt(parse_error.token_is_prev)].symbol(), + token_tags[parse_error.token + @intFromBool(parse_error.token_is_prev)].symbol(), }); }, .expected_container => { return stream.print("expected a struct, enum or union, found '{s}'", .{ - token_tags[parse_error.token + @boolToInt(parse_error.token_is_prev)].symbol(), + token_tags[parse_error.token + @intFromBool(parse_error.token_is_prev)].symbol(), }); }, .extern_fn_body => { @@ -434,7 +434,7 @@ pub fn renderError(tree: Ast, parse_error: Error, stream: anytype) !void { }, .expected_token => { - const found_tag = token_tags[parse_error.token + @boolToInt(parse_error.token_is_prev)]; + const found_tag = token_tags[parse_error.token + @intFromBool(parse_error.token_is_prev)]; const expected_symbol = parse_error.extra.expected_tag.symbol(); switch (found_tag) { .invalid => return stream.print("expected '{s}', found invalid bytes", .{ @@ -1289,7 +1289,7 @@ pub fn lastToken(tree: Ast, node: Node.Index) TokenIndex { }, .@"for" => { const extra = @bitCast(Node.For, datas[n].rhs); - n = tree.extra_data[datas[n].lhs + extra.inputs + @boolToInt(extra.has_else)]; + n = tree.extra_data[datas[n].lhs + extra.inputs + @intFromBool(extra.has_else)]; }, .@"suspend" => { if (datas[n].lhs != 0) { @@ -2291,7 +2291,7 @@ fn fullForComponents(tree: Ast, info: full.For.Components) full.For { result.label_token = tok_i - 1; } const last_cond_token = tree.lastToken(info.inputs[info.inputs.len - 1]); - result.payload_token = last_cond_token + 3 + @boolToInt(token_tags[last_cond_token + 1] == .comma); + result.payload_token = last_cond_token + 3 + @intFromBool(token_tags[last_cond_token + 1] == .comma); if (info.else_expr != 0) { result.else_token = tree.lastToken(info.then_expr) + 1; } diff --git a/lib/std/zig/ErrorBundle.zig b/lib/std/zig/ErrorBundle.zig index 72d49b4f36..36101a7f22 100644 --- a/lib/std/zig/ErrorBundle.zig +++ b/lib/std/zig/ErrorBundle.zig @@ -98,17 +98,17 @@ pub fn getMessages(eb: ErrorBundle) []const MessageIndex { } pub fn getErrorMessage(eb: ErrorBundle, index: MessageIndex) ErrorMessage { - return eb.extraData(ErrorMessage, @enumToInt(index)).data; + return eb.extraData(ErrorMessage, @intFromEnum(index)).data; } pub fn getSourceLocation(eb: ErrorBundle, index: SourceLocationIndex) SourceLocation { assert(index != .none); - return eb.extraData(SourceLocation, @enumToInt(index)).data; + return eb.extraData(SourceLocation, @intFromEnum(index)).data; } pub fn getNotes(eb: ErrorBundle, index: MessageIndex) []const MessageIndex { const notes_len = eb.getErrorMessage(index).notes_len; - const start = @enumToInt(index) + @typeInfo(ErrorMessage).Struct.fields.len; + const start = @intFromEnum(index) + @typeInfo(ErrorMessage).Struct.fields.len; return @ptrCast([]const MessageIndex, eb.extra[start..][0..notes_len]); } @@ -125,8 +125,8 @@ fn extraData(eb: ErrorBundle, comptime T: type, index: usize) struct { data: T, inline for (fields) |field| { @field(result, field.name) = switch (field.type) { u32 => eb.extra[i], - MessageIndex => @intToEnum(MessageIndex, eb.extra[i]), - SourceLocationIndex => @intToEnum(SourceLocationIndex, eb.extra[i]), + MessageIndex => @enumFromInt(MessageIndex, eb.extra[i]), + SourceLocationIndex => @enumFromInt(SourceLocationIndex, eb.extra[i]), else => @compileError("bad field type"), }; i += 1; @@ -189,7 +189,7 @@ fn renderErrorMessageToWriter( const counting_stderr = counting_writer.writer(); const err_msg = eb.getErrorMessage(err_msg_index); if (err_msg.src_loc != .none) { - const src = eb.extraData(SourceLocation, @enumToInt(err_msg.src_loc)); + const src = eb.extraData(SourceLocation, @intFromEnum(err_msg.src_loc)); try counting_stderr.writeByteNTimes(' ', indent); try ttyconf.setColor(stderr, .bold); try counting_stderr.print("{s}:{d}:{d}: ", .{ @@ -407,15 +407,15 @@ pub const Wip = struct { } pub fn addErrorMessage(wip: *Wip, em: ErrorMessage) !MessageIndex { - return @intToEnum(MessageIndex, try addExtra(wip, em)); + return @enumFromInt(MessageIndex, try addExtra(wip, em)); } pub fn addErrorMessageAssumeCapacity(wip: *Wip, em: ErrorMessage) MessageIndex { - return @intToEnum(MessageIndex, addExtraAssumeCapacity(wip, em)); + return @enumFromInt(MessageIndex, addExtraAssumeCapacity(wip, em)); } pub fn addSourceLocation(wip: *Wip, sl: SourceLocation) !SourceLocationIndex { - return @intToEnum(SourceLocationIndex, try addExtra(wip, sl)); + return @enumFromInt(SourceLocationIndex, try addExtra(wip, sl)); } pub fn addReferenceTrace(wip: *Wip, rt: ReferenceTrace) !void { @@ -433,7 +433,7 @@ pub const Wip = struct { // The ensureUnusedCapacity call above guarantees this. const notes_start = wip.reserveNotes(@intCast(u32, other_list.len)) catch unreachable; for (notes_start.., other_list) |note, message| { - wip.extra.items[note] = @enumToInt(wip.addOtherMessage(other, message) catch unreachable); + wip.extra.items[note] = @intFromEnum(wip.addOtherMessage(other, message) catch unreachable); } } @@ -455,7 +455,7 @@ pub const Wip = struct { }); const notes_start = try wip.reserveNotes(other_msg.notes_len); for (notes_start.., other.getNotes(msg_index)) |note, other_note| { - wip.extra.items[note] = @enumToInt(try wip.addOtherMessage(other, other_note)); + wip.extra.items[note] = @intFromEnum(try wip.addOtherMessage(other, other_note)); } return msg; } @@ -505,8 +505,8 @@ pub const Wip = struct { inline for (fields) |field| { wip.extra.items[i] = switch (field.type) { u32 => @field(extra, field.name), - MessageIndex => @enumToInt(@field(extra, field.name)), - SourceLocationIndex => @enumToInt(@field(extra, field.name)), + MessageIndex => @intFromEnum(@field(extra, field.name)), + SourceLocationIndex => @intFromEnum(@field(extra, field.name)), else => @compileError("bad field type"), }; i += 1; diff --git a/lib/std/zig/Parse.zig b/lib/std/zig/Parse.zig index 2ef91ca3a6..f3eec86acc 100644 --- a/lib/std/zig/Parse.zig +++ b/lib/std/zig/Parse.zig @@ -1486,7 +1486,7 @@ fn parseExprPrecedence(p: *Parse, min_prec: i32) Error!Node.Index { while (true) { const tok_tag = p.token_tags[p.tok_i]; - const info = operTable[@intCast(usize, @enumToInt(tok_tag))]; + const info = operTable[@intCast(usize, @intFromEnum(tok_tag))]; if (info.prec < min_prec) { break; } diff --git a/lib/std/zig/Server.zig b/lib/std/zig/Server.zig index 0c099744cc..f4f979f012 100644 --- a/lib/std/zig/Server.zig +++ b/lib/std/zig/Server.zig @@ -253,7 +253,7 @@ fn bswap(x: anytype) @TypeOf(x) { const T = @TypeOf(x); switch (@typeInfo(T)) { - .Enum => return @intToEnum(T, @byteSwap(@enumToInt(x))), + .Enum => return @enumFromInt(T, @byteSwap(@intFromEnum(x))), .Int => return @byteSwap(x), .Struct => |info| switch (info.layout) { .Extern => { @@ -286,7 +286,7 @@ fn bswap_and_workaround_u32(bytes_ptr: *const [4]u8) u32 { /// workaround for https://github.com/ziglang/zig/issues/14904 fn bswap_and_workaround_tag(bytes_ptr: *const [4]u8) InMessage.Tag { const int = std.mem.readIntLittle(u32, bytes_ptr); - return @intToEnum(InMessage.Tag, int); + return @enumFromInt(InMessage.Tag, int); } const OutMessage = std.zig.Server.Message; diff --git a/lib/std/zig/c_builtins.zig b/lib/std/zig/c_builtins.zig index b28134c7cd..de9ac95600 100644 --- a/lib/std/zig/c_builtins.zig +++ b/lib/std/zig/c_builtins.zig @@ -11,10 +11,10 @@ pub inline fn __builtin_bswap64(val: u64) u64 { } pub inline fn __builtin_signbit(val: f64) c_int { - return @boolToInt(std.math.signbit(val)); + return @intFromBool(std.math.signbit(val)); } pub inline fn __builtin_signbitf(val: f32) c_int { - return @boolToInt(std.math.signbit(val)); + return @intFromBool(std.math.signbit(val)); } pub inline fn __builtin_popcount(val: c_uint) c_int { @@ -215,11 +215,11 @@ pub inline fn __builtin_inff() f32 { } pub inline fn __builtin_isnan(x: anytype) c_int { - return @boolToInt(std.math.isNan(x)); + return @intFromBool(std.math.isNan(x)); } pub inline fn __builtin_isinf(x: anytype) c_int { - return @boolToInt(std.math.isInf(x)); + return @intFromBool(std.math.isInf(x)); } /// Similar to isinf, except the return value is -1 for an argument of -Inf and 1 for an argument of +Inf. @@ -230,7 +230,7 @@ pub inline fn __builtin_isinf_sign(x: anytype) c_int { pub inline fn __has_builtin(func: anytype) c_int { _ = func; - return @boolToInt(true); + return @intFromBool(true); } pub inline fn __builtin_assume(cond: bool) void { @@ -243,7 +243,7 @@ pub inline fn __builtin_unreachable() noreturn { pub inline fn __builtin_constant_p(expr: anytype) c_int { _ = expr; - return @boolToInt(false); + return @intFromBool(false); } pub fn __builtin_mul_overflow(a: anytype, b: anytype, result: *@TypeOf(a, b)) c_int { const res = @mulWithOverflow(a, b); diff --git a/lib/std/zig/c_translation.zig b/lib/std/zig/c_translation.zig index 1273527358..dafef5e63b 100644 --- a/lib/std/zig/c_translation.zig +++ b/lib/std/zig/c_translation.zig @@ -21,30 +21,30 @@ pub fn cast(comptime DestType: type, target: anytype) DestType { .Int => { switch (@typeInfo(SourceType)) { .Pointer => { - return castInt(DestType, @ptrToInt(target)); + return castInt(DestType, @intFromPtr(target)); }, .Optional => |opt| { if (@typeInfo(opt.child) == .Pointer) { - return castInt(DestType, @ptrToInt(target)); + return castInt(DestType, @intFromPtr(target)); } }, .Int => { return castInt(DestType, target); }, .Fn => { - return castInt(DestType, @ptrToInt(&target)); + return castInt(DestType, @intFromPtr(&target)); }, .Bool => { - return @boolToInt(target); + return @intFromBool(target); }, else => {}, } }, .Float => { switch (@typeInfo(SourceType)) { - .Int => return @intToFloat(DestType, target), + .Int => return @floatFromInt(DestType, target), .Float => return @floatCast(DestType, target), - .Bool => return @intToFloat(DestType, @boolToInt(target)), + .Bool => return @floatFromInt(DestType, @intFromBool(target)), else => {}, } }, @@ -88,13 +88,13 @@ fn castPtr(comptime DestType: type, target: anytype) DestType { fn castToPtr(comptime DestType: type, comptime SourceType: type, target: anytype) DestType { switch (@typeInfo(SourceType)) { .Int => { - return @intToPtr(DestType, castInt(usize, target)); + return @ptrFromInt(DestType, castInt(usize, target)); }, .ComptimeInt => { if (target < 0) - return @intToPtr(DestType, @bitCast(usize, @intCast(isize, target))) + return @ptrFromInt(DestType, @bitCast(usize, @intCast(isize, target))) else - return @intToPtr(DestType, @intCast(usize, target)); + return @ptrFromInt(DestType, @intCast(usize, target)); }, .Pointer => { return castPtr(DestType, target); @@ -120,34 +120,34 @@ fn ptrInfo(comptime PtrType: type) std.builtin.Type.Pointer { test "cast" { var i = @as(i64, 10); - try testing.expect(cast(*u8, 16) == @intToPtr(*u8, 16)); + try testing.expect(cast(*u8, 16) == @ptrFromInt(*u8, 16)); try testing.expect(cast(*u64, &i).* == @as(u64, 10)); try testing.expect(cast(*i64, @as(?*align(1) i64, &i)) == &i); - try testing.expect(cast(?*u8, 2) == @intToPtr(*u8, 2)); + try testing.expect(cast(?*u8, 2) == @ptrFromInt(*u8, 2)); try testing.expect(cast(?*i64, @as(*align(1) i64, &i)) == &i); try testing.expect(cast(?*i64, @as(?*align(1) i64, &i)) == &i); - try testing.expectEqual(@as(u32, 4), cast(u32, @intToPtr(*u32, 4))); - try testing.expectEqual(@as(u32, 4), cast(u32, @intToPtr(?*u32, 4))); + try testing.expectEqual(@as(u32, 4), cast(u32, @ptrFromInt(*u32, 4))); + try testing.expectEqual(@as(u32, 4), cast(u32, @ptrFromInt(?*u32, 4))); try testing.expectEqual(@as(u32, 10), cast(u32, @as(u64, 10))); try testing.expectEqual(@bitCast(i32, @as(u32, 0x8000_0000)), cast(i32, @as(u32, 0x8000_0000))); - try testing.expectEqual(@intToPtr(*u8, 2), cast(*u8, @intToPtr(*const u8, 2))); - try testing.expectEqual(@intToPtr(*u8, 2), cast(*u8, @intToPtr(*volatile u8, 2))); + try testing.expectEqual(@ptrFromInt(*u8, 2), cast(*u8, @ptrFromInt(*const u8, 2))); + try testing.expectEqual(@ptrFromInt(*u8, 2), cast(*u8, @ptrFromInt(*volatile u8, 2))); - try testing.expectEqual(@intToPtr(?*anyopaque, 2), cast(?*anyopaque, @intToPtr(*u8, 2))); + try testing.expectEqual(@ptrFromInt(?*anyopaque, 2), cast(?*anyopaque, @ptrFromInt(*u8, 2))); var foo: c_int = -1; - try testing.expect(cast(*anyopaque, -1) == @intToPtr(*anyopaque, @bitCast(usize, @as(isize, -1)))); - try testing.expect(cast(*anyopaque, foo) == @intToPtr(*anyopaque, @bitCast(usize, @as(isize, -1)))); - try testing.expect(cast(?*anyopaque, -1) == @intToPtr(?*anyopaque, @bitCast(usize, @as(isize, -1)))); - try testing.expect(cast(?*anyopaque, foo) == @intToPtr(?*anyopaque, @bitCast(usize, @as(isize, -1)))); + try testing.expect(cast(*anyopaque, -1) == @ptrFromInt(*anyopaque, @bitCast(usize, @as(isize, -1)))); + try testing.expect(cast(*anyopaque, foo) == @ptrFromInt(*anyopaque, @bitCast(usize, @as(isize, -1)))); + try testing.expect(cast(?*anyopaque, -1) == @ptrFromInt(?*anyopaque, @bitCast(usize, @as(isize, -1)))); + try testing.expect(cast(?*anyopaque, foo) == @ptrFromInt(?*anyopaque, @bitCast(usize, @as(isize, -1)))); const FnPtr = ?*align(1) const fn (*anyopaque) void; - try testing.expect(cast(FnPtr, 0) == @intToPtr(FnPtr, @as(usize, 0))); - try testing.expect(cast(FnPtr, foo) == @intToPtr(FnPtr, @bitCast(usize, @as(isize, -1)))); + try testing.expect(cast(FnPtr, 0) == @ptrFromInt(FnPtr, @as(usize, 0))); + try testing.expect(cast(FnPtr, foo) == @ptrFromInt(FnPtr, @bitCast(usize, @as(isize, -1)))); } /// Given a value returns its size as C's sizeof operator would. diff --git a/lib/std/zig/number_literal.zig b/lib/std/zig/number_literal.zig index b021190ad9..66596b3b15 100644 --- a/lib/std/zig/number_literal.zig +++ b/lib/std/zig/number_literal.zig @@ -141,7 +141,7 @@ pub fn parseNumberLiteral(bytes: []const u8) Result { 'a'...'z' => c - 'a' + 10, else => return .{ .failure = .{ .invalid_character = i } }, }; - if (digit >= base) return .{ .failure = .{ .invalid_digit = .{ .i = i, .base = @intToEnum(Base, base) } } }; + if (digit >= base) return .{ .failure = .{ .invalid_digit = .{ .i = i, .base = @enumFromInt(Base, base) } } }; if (exponent and digit >= 10) return .{ .failure = .{ .invalid_digit_exponent = i } }; underscore = false; special = 0; @@ -159,7 +159,7 @@ pub fn parseNumberLiteral(bytes: []const u8) Result { if (underscore) return .{ .failure = .{ .trailing_underscore = bytes.len - 1 } }; if (special != 0) return .{ .failure = .{ .trailing_special = bytes.len - 1 } }; - if (float) return .{ .float = @intToEnum(FloatBase, base) }; - if (overflow) return .{ .big_int = @intToEnum(Base, base) }; + if (float) return .{ .float = @enumFromInt(FloatBase, base) }; + if (overflow) return .{ .big_int = @enumFromInt(Base, base) }; return .{ .int = x }; } diff --git a/lib/std/zig/parser_test.zig b/lib/std/zig/parser_test.zig index 21785278ec..e41e9157e6 100644 --- a/lib/std/zig/parser_test.zig +++ b/lib/std/zig/parser_test.zig @@ -628,7 +628,7 @@ test "zig fmt: builtin call with trailing comma" { try testCanonical( \\pub fn main() void { \\ @breakpoint(); - \\ _ = @boolToInt(a); + \\ _ = @intFromBool(a); \\ _ = @call( \\ a, \\ b, @@ -4815,7 +4815,7 @@ test "zig fmt: use of comments and multiline string literals may force the param \\ \\ Consider providing your own hash function. \\ ); \\ return @intCast(i1, doMemCheckClientRequestExpr(0, // default return - \\ .MakeMemUndefined, @ptrToInt(qzz.ptr), qzz.len, 0, 0, 0)); + \\ .MakeMemUndefined, @intFromPtr(qzz.ptr), qzz.len, 0, 0, 0)); \\} \\ \\// This looks like garbage don't do this diff --git a/lib/std/zig/perf_test.zig b/lib/std/zig/perf_test.zig index 58f7a67694..df60978510 100644 --- a/lib/std/zig/perf_test.zig +++ b/lib/std/zig/perf_test.zig @@ -18,9 +18,9 @@ pub fn main() !void { } const end = timer.read(); memory_used /= iterations; - const elapsed_s = @intToFloat(f64, end - start) / std.time.ns_per_s; - const bytes_per_sec_float = @intToFloat(f64, source.len * iterations) / elapsed_s; - const bytes_per_sec = @floatToInt(u64, @floor(bytes_per_sec_float)); + const elapsed_s = @floatFromInt(f64, end - start) / std.time.ns_per_s; + const bytes_per_sec_float = @floatFromInt(f64, source.len * iterations) / elapsed_s; + const bytes_per_sec = @intFromFloat(u64, @floor(bytes_per_sec_float)); var stdout_file = std.io.getStdOut(); const stdout = stdout_file.writer(); diff --git a/lib/std/zig/render.zig b/lib/std/zig/render.zig index 70c9d7209c..0c93230d46 100644 --- a/lib/std/zig/render.zig +++ b/lib/std/zig/render.zig @@ -1723,7 +1723,7 @@ fn renderSwitchCase( if (switch_case.payload_token) |payload_token| { try renderToken(ais, tree, payload_token - 1, .none); // pipe - const ident = payload_token + @boolToInt(token_tags[payload_token] == .asterisk); + const ident = payload_token + @intFromBool(token_tags[payload_token] == .asterisk); if (token_tags[payload_token] == .asterisk) { try renderToken(ais, tree, payload_token, .none); // asterisk } diff --git a/lib/std/zig/system/NativeTargetInfo.zig b/lib/std/zig/system/NativeTargetInfo.zig index 2daac4881d..66ab620622 100644 --- a/lib/std/zig/system/NativeTargetInfo.zig +++ b/lib/std/zig/system/NativeTargetInfo.zig @@ -207,10 +207,10 @@ pub fn detect(cross_target: CrossTarget) DetectError!NativeTargetInfo { })) { switch (result.target.abi) { .code16 => result.target.cpu.features.addFeature( - @enumToInt(std.Target.x86.Feature.@"16bit_mode"), + @intFromEnum(std.Target.x86.Feature.@"16bit_mode"), ), else => result.target.cpu.features.addFeature( - @enumToInt(std.Target.x86.Feature.@"32bit_mode"), + @intFromEnum(std.Target.x86.Feature.@"32bit_mode"), ), } } @@ -221,7 +221,7 @@ pub fn detect(cross_target: CrossTarget) DetectError!NativeTargetInfo { }, .thumb, .thumbeb => { result.target.cpu.features.addFeature( - @enumToInt(std.Target.arm.Feature.thumb_mode), + @intFromEnum(std.Target.arm.Feature.thumb_mode), ); }, else => {}, @@ -268,7 +268,7 @@ fn detectAbiAndDynamicLinker( // and supported by Zig. But that means that we must detect the system ABI here rather than // relying on `builtin.target`. const all_abis = comptime blk: { - assert(@enumToInt(Target.Abi.none) == 0); + assert(@intFromEnum(Target.Abi.none) == 0); const fields = std.meta.fields(Target.Abi)[1..]; var array: [fields.len]Target.Abi = undefined; inline for (fields, 0..) |field, i| { diff --git a/lib/std/zig/system/arm.zig b/lib/std/zig/system/arm.zig index 82f87b1e9a..da05c8c90d 100644 --- a/lib/std/zig/system/arm.zig +++ b/lib/std/zig/system/arm.zig @@ -135,7 +135,7 @@ pub const cpu_models = struct { pub const aarch64 = struct { fn setFeature(cpu: *Target.Cpu, feature: Target.aarch64.Feature, enabled: bool) void { - const idx = @as(Target.Cpu.Feature.Set.Index, @enumToInt(feature)); + const idx = @as(Target.Cpu.Feature.Set.Index, @intFromEnum(feature)); if (enabled) cpu.features.addFeature(idx) else cpu.features.removeFeature(idx); } diff --git a/lib/std/zig/system/windows.zig b/lib/std/zig/system/windows.zig index 6039425b1a..c5c6f052ec 100644 --- a/lib/std/zig/system/windows.zig +++ b/lib/std/zig/system/windows.zig @@ -43,7 +43,7 @@ pub fn detectRuntimeVersion() WindowsVersion { const version: u32 = @as(u32, os_ver) << 16 | @as(u16, sp_ver) << 8 | sub_ver; - return @intToEnum(WindowsVersion, version); + return @enumFromInt(WindowsVersion, version); } // Technically, a registry value can be as long as 1MB. However, MS recommends storing @@ -188,7 +188,7 @@ fn getCpuInfoFromRegistry(core: usize, args: anytype) !void { } fn setFeature(comptime Feature: type, cpu: *Target.Cpu, feature: Feature, enabled: bool) void { - const idx = @as(Target.Cpu.Feature.Set.Index, @enumToInt(feature)); + const idx = @as(Target.Cpu.Feature.Set.Index, @intFromEnum(feature)); if (enabled) cpu.features.addFeature(idx) else cpu.features.removeFeature(idx); } diff --git a/lib/std/zig/system/x86.zig b/lib/std/zig/system/x86.zig index 873659e58c..b99f5cf65f 100644 --- a/lib/std/zig/system/x86.zig +++ b/lib/std/zig/system/x86.zig @@ -10,7 +10,7 @@ const XCR0_ZMM0_15 = 0x40; const XCR0_ZMM16_31 = 0x80; fn setFeature(cpu: *Target.Cpu, feature: Target.x86.Feature, enabled: bool) void { - const idx = @as(Target.Cpu.Feature.Set.Index, @enumToInt(feature)); + const idx = @as(Target.Cpu.Feature.Set.Index, @intFromEnum(feature)); if (enabled) cpu.features.addFeature(idx) else cpu.features.removeFeature(idx); } diff --git a/lib/test_runner.zig b/lib/test_runner.zig index 33fe547b57..8bc79a96c8 100644 --- a/lib/test_runner.zig +++ b/lib/test_runner.zig @@ -117,7 +117,7 @@ fn mainServer() !void { }, else => { - std.debug.print("unsupported message: {x}", .{@enumToInt(hdr.tag)}); + std.debug.print("unsupported message: {x}", .{@intFromEnum(hdr.tag)}); std.process.exit(1); }, } @@ -216,10 +216,10 @@ pub fn log( comptime format: []const u8, args: anytype, ) void { - if (@enumToInt(message_level) <= @enumToInt(std.log.Level.err)) { + if (@intFromEnum(message_level) <= @intFromEnum(std.log.Level.err)) { log_err_count += 1; } - if (@enumToInt(message_level) <= @enumToInt(std.testing.log_level)) { + if (@intFromEnum(message_level) <= @intFromEnum(std.testing.log_level)) { std.debug.print( "[" ++ @tagName(scope) ++ "] (" ++ @tagName(message_level) ++ "): " ++ format ++ "\n", args, diff --git a/src/Air.zig b/src/Air.zig index 91e8d0da4d..d4d4de07f2 100644 --- a/src/Air.zig +++ b/src/Air.zig @@ -850,93 +850,93 @@ pub const Inst = struct { pub const Index = u32; pub const Ref = enum(u32) { - u1_type = @enumToInt(InternPool.Index.u1_type), - u8_type = @enumToInt(InternPool.Index.u8_type), - i8_type = @enumToInt(InternPool.Index.i8_type), - u16_type = @enumToInt(InternPool.Index.u16_type), - i16_type = @enumToInt(InternPool.Index.i16_type), - u29_type = @enumToInt(InternPool.Index.u29_type), - u32_type = @enumToInt(InternPool.Index.u32_type), - i32_type = @enumToInt(InternPool.Index.i32_type), - u64_type = @enumToInt(InternPool.Index.u64_type), - i64_type = @enumToInt(InternPool.Index.i64_type), - u80_type = @enumToInt(InternPool.Index.u80_type), - u128_type = @enumToInt(InternPool.Index.u128_type), - i128_type = @enumToInt(InternPool.Index.i128_type), - usize_type = @enumToInt(InternPool.Index.usize_type), - isize_type = @enumToInt(InternPool.Index.isize_type), - c_char_type = @enumToInt(InternPool.Index.c_char_type), - c_short_type = @enumToInt(InternPool.Index.c_short_type), - c_ushort_type = @enumToInt(InternPool.Index.c_ushort_type), - c_int_type = @enumToInt(InternPool.Index.c_int_type), - c_uint_type = @enumToInt(InternPool.Index.c_uint_type), - c_long_type = @enumToInt(InternPool.Index.c_long_type), - c_ulong_type = @enumToInt(InternPool.Index.c_ulong_type), - c_longlong_type = @enumToInt(InternPool.Index.c_longlong_type), - c_ulonglong_type = @enumToInt(InternPool.Index.c_ulonglong_type), - c_longdouble_type = @enumToInt(InternPool.Index.c_longdouble_type), - f16_type = @enumToInt(InternPool.Index.f16_type), - f32_type = @enumToInt(InternPool.Index.f32_type), - f64_type = @enumToInt(InternPool.Index.f64_type), - f80_type = @enumToInt(InternPool.Index.f80_type), - f128_type = @enumToInt(InternPool.Index.f128_type), - anyopaque_type = @enumToInt(InternPool.Index.anyopaque_type), - bool_type = @enumToInt(InternPool.Index.bool_type), - void_type = @enumToInt(InternPool.Index.void_type), - type_type = @enumToInt(InternPool.Index.type_type), - anyerror_type = @enumToInt(InternPool.Index.anyerror_type), - comptime_int_type = @enumToInt(InternPool.Index.comptime_int_type), - comptime_float_type = @enumToInt(InternPool.Index.comptime_float_type), - noreturn_type = @enumToInt(InternPool.Index.noreturn_type), - anyframe_type = @enumToInt(InternPool.Index.anyframe_type), - null_type = @enumToInt(InternPool.Index.null_type), - undefined_type = @enumToInt(InternPool.Index.undefined_type), - enum_literal_type = @enumToInt(InternPool.Index.enum_literal_type), - atomic_order_type = @enumToInt(InternPool.Index.atomic_order_type), - atomic_rmw_op_type = @enumToInt(InternPool.Index.atomic_rmw_op_type), - calling_convention_type = @enumToInt(InternPool.Index.calling_convention_type), - address_space_type = @enumToInt(InternPool.Index.address_space_type), - float_mode_type = @enumToInt(InternPool.Index.float_mode_type), - reduce_op_type = @enumToInt(InternPool.Index.reduce_op_type), - call_modifier_type = @enumToInt(InternPool.Index.call_modifier_type), - prefetch_options_type = @enumToInt(InternPool.Index.prefetch_options_type), - export_options_type = @enumToInt(InternPool.Index.export_options_type), - extern_options_type = @enumToInt(InternPool.Index.extern_options_type), - type_info_type = @enumToInt(InternPool.Index.type_info_type), - manyptr_u8_type = @enumToInt(InternPool.Index.manyptr_u8_type), - manyptr_const_u8_type = @enumToInt(InternPool.Index.manyptr_const_u8_type), - manyptr_const_u8_sentinel_0_type = @enumToInt(InternPool.Index.manyptr_const_u8_sentinel_0_type), - single_const_pointer_to_comptime_int_type = @enumToInt(InternPool.Index.single_const_pointer_to_comptime_int_type), - slice_const_u8_type = @enumToInt(InternPool.Index.slice_const_u8_type), - slice_const_u8_sentinel_0_type = @enumToInt(InternPool.Index.slice_const_u8_sentinel_0_type), - anyerror_void_error_union_type = @enumToInt(InternPool.Index.anyerror_void_error_union_type), - generic_poison_type = @enumToInt(InternPool.Index.generic_poison_type), - empty_struct_type = @enumToInt(InternPool.Index.empty_struct_type), - undef = @enumToInt(InternPool.Index.undef), - zero = @enumToInt(InternPool.Index.zero), - zero_usize = @enumToInt(InternPool.Index.zero_usize), - zero_u8 = @enumToInt(InternPool.Index.zero_u8), - one = @enumToInt(InternPool.Index.one), - one_usize = @enumToInt(InternPool.Index.one_usize), - one_u8 = @enumToInt(InternPool.Index.one_u8), - four_u8 = @enumToInt(InternPool.Index.four_u8), - negative_one = @enumToInt(InternPool.Index.negative_one), - calling_convention_c = @enumToInt(InternPool.Index.calling_convention_c), - calling_convention_inline = @enumToInt(InternPool.Index.calling_convention_inline), - void_value = @enumToInt(InternPool.Index.void_value), - unreachable_value = @enumToInt(InternPool.Index.unreachable_value), - null_value = @enumToInt(InternPool.Index.null_value), - bool_true = @enumToInt(InternPool.Index.bool_true), - bool_false = @enumToInt(InternPool.Index.bool_false), - empty_struct = @enumToInt(InternPool.Index.empty_struct), - generic_poison = @enumToInt(InternPool.Index.generic_poison), + u1_type = @intFromEnum(InternPool.Index.u1_type), + u8_type = @intFromEnum(InternPool.Index.u8_type), + i8_type = @intFromEnum(InternPool.Index.i8_type), + u16_type = @intFromEnum(InternPool.Index.u16_type), + i16_type = @intFromEnum(InternPool.Index.i16_type), + u29_type = @intFromEnum(InternPool.Index.u29_type), + u32_type = @intFromEnum(InternPool.Index.u32_type), + i32_type = @intFromEnum(InternPool.Index.i32_type), + u64_type = @intFromEnum(InternPool.Index.u64_type), + i64_type = @intFromEnum(InternPool.Index.i64_type), + u80_type = @intFromEnum(InternPool.Index.u80_type), + u128_type = @intFromEnum(InternPool.Index.u128_type), + i128_type = @intFromEnum(InternPool.Index.i128_type), + usize_type = @intFromEnum(InternPool.Index.usize_type), + isize_type = @intFromEnum(InternPool.Index.isize_type), + c_char_type = @intFromEnum(InternPool.Index.c_char_type), + c_short_type = @intFromEnum(InternPool.Index.c_short_type), + c_ushort_type = @intFromEnum(InternPool.Index.c_ushort_type), + c_int_type = @intFromEnum(InternPool.Index.c_int_type), + c_uint_type = @intFromEnum(InternPool.Index.c_uint_type), + c_long_type = @intFromEnum(InternPool.Index.c_long_type), + c_ulong_type = @intFromEnum(InternPool.Index.c_ulong_type), + c_longlong_type = @intFromEnum(InternPool.Index.c_longlong_type), + c_ulonglong_type = @intFromEnum(InternPool.Index.c_ulonglong_type), + c_longdouble_type = @intFromEnum(InternPool.Index.c_longdouble_type), + f16_type = @intFromEnum(InternPool.Index.f16_type), + f32_type = @intFromEnum(InternPool.Index.f32_type), + f64_type = @intFromEnum(InternPool.Index.f64_type), + f80_type = @intFromEnum(InternPool.Index.f80_type), + f128_type = @intFromEnum(InternPool.Index.f128_type), + anyopaque_type = @intFromEnum(InternPool.Index.anyopaque_type), + bool_type = @intFromEnum(InternPool.Index.bool_type), + void_type = @intFromEnum(InternPool.Index.void_type), + type_type = @intFromEnum(InternPool.Index.type_type), + anyerror_type = @intFromEnum(InternPool.Index.anyerror_type), + comptime_int_type = @intFromEnum(InternPool.Index.comptime_int_type), + comptime_float_type = @intFromEnum(InternPool.Index.comptime_float_type), + noreturn_type = @intFromEnum(InternPool.Index.noreturn_type), + anyframe_type = @intFromEnum(InternPool.Index.anyframe_type), + null_type = @intFromEnum(InternPool.Index.null_type), + undefined_type = @intFromEnum(InternPool.Index.undefined_type), + enum_literal_type = @intFromEnum(InternPool.Index.enum_literal_type), + atomic_order_type = @intFromEnum(InternPool.Index.atomic_order_type), + atomic_rmw_op_type = @intFromEnum(InternPool.Index.atomic_rmw_op_type), + calling_convention_type = @intFromEnum(InternPool.Index.calling_convention_type), + address_space_type = @intFromEnum(InternPool.Index.address_space_type), + float_mode_type = @intFromEnum(InternPool.Index.float_mode_type), + reduce_op_type = @intFromEnum(InternPool.Index.reduce_op_type), + call_modifier_type = @intFromEnum(InternPool.Index.call_modifier_type), + prefetch_options_type = @intFromEnum(InternPool.Index.prefetch_options_type), + export_options_type = @intFromEnum(InternPool.Index.export_options_type), + extern_options_type = @intFromEnum(InternPool.Index.extern_options_type), + type_info_type = @intFromEnum(InternPool.Index.type_info_type), + manyptr_u8_type = @intFromEnum(InternPool.Index.manyptr_u8_type), + manyptr_const_u8_type = @intFromEnum(InternPool.Index.manyptr_const_u8_type), + manyptr_const_u8_sentinel_0_type = @intFromEnum(InternPool.Index.manyptr_const_u8_sentinel_0_type), + single_const_pointer_to_comptime_int_type = @intFromEnum(InternPool.Index.single_const_pointer_to_comptime_int_type), + slice_const_u8_type = @intFromEnum(InternPool.Index.slice_const_u8_type), + slice_const_u8_sentinel_0_type = @intFromEnum(InternPool.Index.slice_const_u8_sentinel_0_type), + anyerror_void_error_union_type = @intFromEnum(InternPool.Index.anyerror_void_error_union_type), + generic_poison_type = @intFromEnum(InternPool.Index.generic_poison_type), + empty_struct_type = @intFromEnum(InternPool.Index.empty_struct_type), + undef = @intFromEnum(InternPool.Index.undef), + zero = @intFromEnum(InternPool.Index.zero), + zero_usize = @intFromEnum(InternPool.Index.zero_usize), + zero_u8 = @intFromEnum(InternPool.Index.zero_u8), + one = @intFromEnum(InternPool.Index.one), + one_usize = @intFromEnum(InternPool.Index.one_usize), + one_u8 = @intFromEnum(InternPool.Index.one_u8), + four_u8 = @intFromEnum(InternPool.Index.four_u8), + negative_one = @intFromEnum(InternPool.Index.negative_one), + calling_convention_c = @intFromEnum(InternPool.Index.calling_convention_c), + calling_convention_inline = @intFromEnum(InternPool.Index.calling_convention_inline), + void_value = @intFromEnum(InternPool.Index.void_value), + unreachable_value = @intFromEnum(InternPool.Index.unreachable_value), + null_value = @intFromEnum(InternPool.Index.null_value), + bool_true = @intFromEnum(InternPool.Index.bool_true), + bool_false = @intFromEnum(InternPool.Index.bool_false), + empty_struct = @intFromEnum(InternPool.Index.empty_struct), + generic_poison = @intFromEnum(InternPool.Index.generic_poison), /// This Ref does not correspond to any AIR instruction or constant /// value. It is used to handle argument types of var args functions. - var_args_param_type = @enumToInt(InternPool.Index.var_args_param_type), + var_args_param_type = @intFromEnum(InternPool.Index.var_args_param_type), /// This Ref does not correspond to any AIR instruction or constant /// value and may instead be used as a sentinel to indicate null. - none = @enumToInt(InternPool.Index.none), + none = @intFromEnum(InternPool.Index.none), _, }; @@ -1103,11 +1103,11 @@ pub const VectorCmp = struct { op: u32, pub fn compareOperator(self: VectorCmp) std.math.CompareOperator { - return @intToEnum(std.math.CompareOperator, @truncate(u3, self.op)); + return @enumFromInt(std.math.CompareOperator, @truncate(u3, self.op)); } pub fn encodeOp(compare_operator: std.math.CompareOperator) u32 { - return @enumToInt(compare_operator); + return @intFromEnum(compare_operator); } }; @@ -1148,11 +1148,11 @@ pub const Cmpxchg = struct { flags: u32, pub fn successOrder(self: Cmpxchg) std.builtin.AtomicOrder { - return @intToEnum(std.builtin.AtomicOrder, @truncate(u3, self.flags)); + return @enumFromInt(std.builtin.AtomicOrder, @truncate(u3, self.flags)); } pub fn failureOrder(self: Cmpxchg) std.builtin.AtomicOrder { - return @intToEnum(std.builtin.AtomicOrder, @truncate(u3, self.flags >> 3)); + return @enumFromInt(std.builtin.AtomicOrder, @truncate(u3, self.flags >> 3)); } }; @@ -1163,11 +1163,11 @@ pub const AtomicRmw = struct { flags: u32, pub fn ordering(self: AtomicRmw) std.builtin.AtomicOrder { - return @intToEnum(std.builtin.AtomicOrder, @truncate(u3, self.flags)); + return @enumFromInt(std.builtin.AtomicOrder, @truncate(u3, self.flags)); } pub fn op(self: AtomicRmw) std.builtin.AtomicRmwOp { - return @intToEnum(std.builtin.AtomicRmwOp, @truncate(u4, self.flags >> 3)); + return @enumFromInt(std.builtin.AtomicRmwOp, @truncate(u4, self.flags >> 3)); } }; @@ -1177,13 +1177,13 @@ pub const UnionInit = struct { }; pub fn getMainBody(air: Air) []const Air.Inst.Index { - const body_index = air.extra[@enumToInt(ExtraIndex.main_block)]; + const body_index = air.extra[@intFromEnum(ExtraIndex.main_block)]; const extra = air.extraData(Block, body_index); return air.extra[extra.end..][0..extra.data.body_len]; } pub fn typeOf(air: Air, inst: Air.Inst.Ref, ip: *const InternPool) Type { - const ref_int = @enumToInt(inst); + const ref_int = @intFromEnum(inst); if (ref_int < InternPool.static_keys.len) { return InternPool.static_keys[ref_int].typeOf().toType(); } @@ -1446,9 +1446,9 @@ pub fn typeOfIndex(air: Air, inst: Air.Inst.Index, ip: *const InternPool) Type { } pub fn getRefType(air: Air, ref: Air.Inst.Ref) Type { - const ref_int = @enumToInt(ref); + const ref_int = @intFromEnum(ref); if (ref_int < ref_start_index) { - const ip_index = @intToEnum(InternPool.Index, ref_int); + const ip_index = @enumFromInt(InternPool.Index, ref_int); return ip_index.toType(); } const inst_index = ref_int - ref_start_index; @@ -1469,9 +1469,9 @@ pub fn extraData(air: Air, comptime T: type, index: usize) struct { data: T, end inline for (fields) |field| { @field(result, field.name) = switch (field.type) { u32 => air.extra[i], - Inst.Ref => @intToEnum(Inst.Ref, air.extra[i]), + Inst.Ref => @enumFromInt(Inst.Ref, air.extra[i]), i32 => @bitCast(i32, air.extra[i]), - InternPool.Index => @intToEnum(InternPool.Index, air.extra[i]), + InternPool.Index => @enumFromInt(InternPool.Index, air.extra[i]), else => @compileError("bad field type: " ++ @typeName(field.type)), }; i += 1; @@ -1491,12 +1491,12 @@ pub fn deinit(air: *Air, gpa: std.mem.Allocator) void { pub const ref_start_index: u32 = InternPool.static_len; pub fn indexToRef(inst: Inst.Index) Inst.Ref { - return @intToEnum(Inst.Ref, ref_start_index + inst); + return @enumFromInt(Inst.Ref, ref_start_index + inst); } pub fn refToIndex(inst: Inst.Ref) ?Inst.Index { assert(inst != .none); - const ref_int = @enumToInt(inst); + const ref_int = @intFromEnum(inst); if (ref_int >= ref_start_index) { return ref_int - ref_start_index; } else { @@ -1511,9 +1511,9 @@ pub fn refToIndexAllowNone(inst: Inst.Ref) ?Inst.Index { /// Returns `null` if runtime-known. pub fn value(air: Air, inst: Inst.Ref, mod: *Module) !?Value { - const ref_int = @enumToInt(inst); + const ref_int = @intFromEnum(inst); if (ref_int < ref_start_index) { - const ip_index = @intToEnum(InternPool.Index, ref_int); + const ip_index = @enumFromInt(InternPool.Index, ref_int); return ip_index.toValue(); } const inst_index = @intCast(Air.Inst.Index, ref_int - ref_start_index); diff --git a/src/AstGen.zig b/src/AstGen.zig index 0508704269..f1acd7e3e3 100644 --- a/src/AstGen.zig +++ b/src/AstGen.zig @@ -82,7 +82,7 @@ fn setExtra(astgen: *AstGen, index: usize, extra: anytype) void { inline for (fields) |field| { astgen.extra.items[i] = switch (field.type) { u32 => @field(extra, field.name), - Zir.Inst.Ref => @enumToInt(@field(extra, field.name)), + Zir.Inst.Ref => @intFromEnum(@field(extra, field.name)), i32 => @bitCast(u32, @field(extra, field.name)), Zir.Inst.Call.Flags => @bitCast(u32, @field(extra, field.name)), Zir.Inst.BuiltinCall.Flags => @bitCast(u32, @field(extra, field.name)), @@ -168,7 +168,7 @@ pub fn generate(gpa: Allocator, tree: Ast) Allocator.Error!Zir { try lowerAstErrors(&astgen); } - const err_index = @enumToInt(Zir.ExtraIndex.compile_errors); + const err_index = @intFromEnum(Zir.ExtraIndex.compile_errors); if (astgen.compile_errors.items.len == 0) { astgen.extra.items[err_index] = 0; } else { @@ -184,7 +184,7 @@ pub fn generate(gpa: Allocator, tree: Ast) Allocator.Error!Zir { } } - const imports_index = @enumToInt(Zir.ExtraIndex.imports); + const imports_index = @intFromEnum(Zir.ExtraIndex.imports); if (astgen.imports.count() == 0) { astgen.extra.items[imports_index] = 0; } else { @@ -1513,7 +1513,7 @@ fn arrayInitExprRlNone( for (elements) |elem_init| { const elem_ref = try expr(gz, scope, .{ .rl = .none }, elem_init); - astgen.extra.items[extra_index] = @enumToInt(elem_ref); + astgen.extra.items[extra_index] = @intFromEnum(elem_ref); extra_index += 1; } return try gz.addPlNodePayloadIndex(tag, node, payload_index); @@ -1530,13 +1530,13 @@ fn arrayInitExprInner( ) InnerError!Zir.Inst.Ref { const astgen = gz.astgen; - const len = elements.len + @boolToInt(array_ty_inst != .none); + const len = elements.len + @intFromBool(array_ty_inst != .none); const payload_index = try addExtra(astgen, Zir.Inst.MultiOp{ .operands_len = @intCast(u32, len), }); var extra_index = try reserveExtra(astgen, len); if (array_ty_inst != .none) { - astgen.extra.items[extra_index] = @enumToInt(array_ty_inst); + astgen.extra.items[extra_index] = @intFromEnum(array_ty_inst); extra_index += 1; } @@ -1548,14 +1548,14 @@ fn arrayInitExprInner( .tag = .elem_type_index, .data = .{ .bin = .{ .lhs = array_ty_inst, - .rhs = @intToEnum(Zir.Inst.Ref, i), + .rhs = @enumFromInt(Zir.Inst.Ref, i), } }, }); break :ri ResultInfo{ .rl = .{ .coerced_ty = ty_expr } }; } else ResultInfo{ .rl = .{ .none = {} } }; const elem_ref = try expr(gz, scope, ri, elem_init); - astgen.extra.items[extra_index] = @enumToInt(elem_ref); + astgen.extra.items[extra_index] = @intFromEnum(elem_ref); extra_index += 1; } @@ -3515,17 +3515,17 @@ fn ptrType( .src_node = gz.nodeIndexToRelative(node), }); if (sentinel_ref != .none) { - gz.astgen.extra.appendAssumeCapacity(@enumToInt(sentinel_ref)); + gz.astgen.extra.appendAssumeCapacity(@intFromEnum(sentinel_ref)); } if (align_ref != .none) { - gz.astgen.extra.appendAssumeCapacity(@enumToInt(align_ref)); + gz.astgen.extra.appendAssumeCapacity(@intFromEnum(align_ref)); } if (addrspace_ref != .none) { - gz.astgen.extra.appendAssumeCapacity(@enumToInt(addrspace_ref)); + gz.astgen.extra.appendAssumeCapacity(@intFromEnum(addrspace_ref)); } if (bit_start_ref != .none) { - gz.astgen.extra.appendAssumeCapacity(@enumToInt(bit_start_ref)); - gz.astgen.extra.appendAssumeCapacity(@enumToInt(bit_end_ref)); + gz.astgen.extra.appendAssumeCapacity(@intFromEnum(bit_start_ref)); + gz.astgen.extra.appendAssumeCapacity(@intFromEnum(bit_end_ref)); } const new_index = @intCast(Zir.Inst.Index, gz.astgen.instructions.len); @@ -3644,10 +3644,10 @@ const WipMembers = struct { assert(index < self.decls_start); const bit_bag: u32 = if (self.decl_index % decls_per_u32 == 0) 0 else self.payload.items[index]; self.payload.items[index] = (bit_bag >> bits_per_decl) | - (@as(u32, @boolToInt(is_pub)) << 28) | - (@as(u32, @boolToInt(is_export)) << 29) | - (@as(u32, @boolToInt(has_align)) << 30) | - (@as(u32, @boolToInt(has_section_or_addrspace)) << 31); + (@as(u32, @intFromBool(is_pub)) << 28) | + (@as(u32, @intFromBool(is_export)) << 29) | + (@as(u32, @intFromBool(has_align)) << 30) | + (@as(u32, @intFromBool(has_section_or_addrspace)) << 31); self.decl_index += 1; } @@ -3659,7 +3659,7 @@ const WipMembers = struct { bit_bag >>= bits_per_field; comptime var i = 0; inline while (i < bits_per_field) : (i += 1) { - bit_bag |= @as(u32, @boolToInt(bits[i])) << (32 - bits_per_field + i); + bit_bag |= @as(u32, @intFromBool(bits[i])) << (32 - bits_per_field + i); } self.payload.items[index] = bit_bag; self.field_index += 1; @@ -4233,11 +4233,11 @@ fn globalVarDecl( wip_members.appendToDecl(block_inst); wip_members.appendToDecl(doc_comment_index); // doc_comment wip if (align_inst != .none) { - wip_members.appendToDecl(@enumToInt(align_inst)); + wip_members.appendToDecl(@intFromEnum(align_inst)); } if (has_section_or_addrspace) { - wip_members.appendToDecl(@enumToInt(section_inst)); - wip_members.appendToDecl(@enumToInt(addrspace_inst)); + wip_members.appendToDecl(@intFromEnum(section_inst)); + wip_members.appendToDecl(@intFromEnum(addrspace_inst)); } } @@ -4727,7 +4727,7 @@ fn structDeclInner( wip_members.appendToField(@intCast(u32, astgen.scratch.items.len - old_scratch_len)); block_scope.instructions.items.len = block_scope.instructions_top; } else { - wip_members.appendToField(@enumToInt(field_type)); + wip_members.appendToField(@intFromEnum(field_type)); } if (have_align) { @@ -4878,13 +4878,13 @@ fn unionDeclInner( if (have_type) { const field_type = try typeExpr(&block_scope, &namespace.base, member.ast.type_expr); - wip_members.appendToField(@enumToInt(field_type)); + wip_members.appendToField(@intFromEnum(field_type)); } else if (arg_inst == .none and auto_enum_tok == null) { return astgen.failNode(member_node, "union field missing type", .{}); } if (have_align) { const align_inst = try expr(&block_scope, &block_scope.base, .{ .rl = .{ .ty = .u32_type } }, member.ast.align_expr); - wip_members.appendToField(@enumToInt(align_inst)); + wip_members.appendToField(@intFromEnum(align_inst)); } if (have_value) { if (arg_inst == .none) { @@ -4916,7 +4916,7 @@ fn unionDeclInner( ); } const tag_value = try expr(&block_scope, &block_scope.base, .{ .rl = .{ .ty = arg_inst } }, member.ast.value_expr); - wip_members.appendToField(@enumToInt(tag_value)); + wip_members.appendToField(@intFromEnum(tag_value)); } } @@ -5167,7 +5167,7 @@ fn containerDecl( } namespace.base.tag = .enum_namespace; const tag_value_inst = try expr(&block_scope, &namespace.base, .{ .rl = .{ .ty = arg_inst } }, member.ast.value_expr); - wip_members.appendToField(@enumToInt(tag_value_inst)); + wip_members.appendToField(@intFromEnum(tag_value_inst)); } } @@ -5846,7 +5846,7 @@ fn ifExpr( else .err_union_payload_unsafe; const payload_inst = try then_scope.addUnNode(tag, cond.inst, then_node); - const token_name_index = payload_token + @boolToInt(payload_is_ref); + const token_name_index = payload_token + @intFromBool(payload_is_ref); const ident_name = try astgen.identAsString(token_name_index); const token_name_str = tree.tokenSlice(token_name_index); if (mem.eql(u8, "_", token_name_str)) @@ -6000,8 +6000,8 @@ fn setCondBrPayload( const astgen = then_scope.astgen; const then_body = then_scope.instructionsSliceUpto(else_scope); const else_body = else_scope.instructionsSlice(); - const then_body_len = astgen.countBodyLenAfterFixups(then_body) + @boolToInt(then_break != 0); - const else_body_len = astgen.countBodyLenAfterFixups(else_body) + @boolToInt(else_break != 0); + const then_body_len = astgen.countBodyLenAfterFixups(then_body) + @intFromBool(then_break != 0); + const else_body_len = astgen.countBodyLenAfterFixups(else_body) + @intFromBool(else_break != 0); try astgen.extra.ensureUnusedCapacity( astgen.gpa, @typeInfo(Zir.Inst.CondBr).Struct.fields.len + then_body_len + else_body_len, @@ -6036,8 +6036,8 @@ fn setCondBrPayloadElideBlockStorePtr( const else_body = else_scope.instructionsSlice(); const has_then_break = then_break != 0; const has_else_break = else_break != 0; - const then_body_len = astgen.countBodyLenAfterFixups(then_body) + @boolToInt(has_then_break); - const else_body_len = astgen.countBodyLenAfterFixups(else_body) + @boolToInt(has_else_break); + const then_body_len = astgen.countBodyLenAfterFixups(then_body) + @intFromBool(has_then_break); + const else_body_len = astgen.countBodyLenAfterFixups(else_body) + @intFromBool(has_else_break); try astgen.extra.ensureUnusedCapacity( astgen.gpa, @typeInfo(Zir.Inst.CondBr).Struct.fields.len + then_body_len + else_body_len, @@ -6197,7 +6197,7 @@ fn whileExpr( const ident_bytes = tree.tokenSlice(ident_token); if (mem.eql(u8, "_", ident_bytes)) break :s &then_scope.base; - const payload_name_loc = payload_token + @boolToInt(payload_is_ref); + const payload_name_loc = payload_token + @intFromBool(payload_is_ref); const ident_name = try astgen.identAsString(payload_name_loc); try astgen.detectLocalShadowing(&then_scope.base, ident_name, payload_name_loc, ident_bytes, .capture); payload_val_scope = .{ @@ -6439,7 +6439,7 @@ fn forExpr( for (for_full.ast.inputs, 0..) |input, i_usize| { const i = @intCast(u32, i_usize); const capture_is_ref = token_tags[capture_token] == .asterisk; - const ident_tok = capture_token + @boolToInt(capture_is_ref); + const ident_tok = capture_token + @intFromBool(capture_is_ref); const is_discard = mem.eql(u8, tree.tokenSlice(ident_tok), "_"); if (is_discard and capture_is_ref) { @@ -6567,7 +6567,7 @@ fn forExpr( for (for_full.ast.inputs, 0..) |input, i_usize| { const i = @intCast(u32, i_usize); const capture_is_ref = token_tags[capture_token] == .asterisk; - const ident_tok = capture_token + @boolToInt(capture_is_ref); + const ident_tok = capture_token + @intFromBool(capture_is_ref); const capture_name = tree.tokenSlice(ident_tok); // Skip over the comma, and on to the next capture (or the ending pipe character). capture_token = ident_tok + 2; @@ -6591,7 +6591,7 @@ fn forExpr( // indexables, we use it as an element index. This is so similar // that they can share the same code paths, branching only on the // ZIR tag. - const switch_cond = (@as(u2, @boolToInt(capture_is_ref)) << 1) | @boolToInt(is_counter); + const switch_cond = (@as(u2, @intFromBool(capture_is_ref)) << 1) | @intFromBool(is_counter); const tag: Zir.Inst.Tag = switch (switch_cond) { 0b00 => .elem_val, 0b01 => .add, @@ -6842,7 +6842,7 @@ fn switchExpr( const payloads = &astgen.scratch; const scratch_top = astgen.scratch.items.len; const case_table_start = scratch_top; - const scalar_case_table = case_table_start + @boolToInt(special_prong != .none); + const scalar_case_table = case_table_start + @intFromBool(special_prong != .none); const multi_case_table = scalar_case_table + scalar_cases_len; const case_table_end = multi_case_table + multi_cases_len; try astgen.scratch.resize(gpa, case_table_end); @@ -6971,7 +6971,7 @@ fn switchExpr( items_len += 1; const item_inst = try comptimeExpr(parent_gz, scope, item_ri, item_node); - try payloads.append(gpa, @enumToInt(item_inst)); + try payloads.append(gpa, @intFromEnum(item_inst)); } // ranges @@ -6983,7 +6983,7 @@ fn switchExpr( const first = try comptimeExpr(parent_gz, scope, item_ri, node_datas[range].lhs); const last = try comptimeExpr(parent_gz, scope, item_ri, node_datas[range].rhs); try payloads.appendSlice(gpa, &[_]u32{ - @enumToInt(first), @enumToInt(last), + @intFromEnum(first), @intFromEnum(last), }); } @@ -7000,7 +7000,7 @@ fn switchExpr( try payloads.resize(gpa, header_index + 2); // item, body_len const item_node = case.ast.values[0]; const item_inst = try comptimeExpr(parent_gz, scope, item_ri, item_node); - payloads.items[header_index] = @enumToInt(item_inst); + payloads.items[header_index] = @intFromEnum(item_inst); break :blk header_index + 1; }; @@ -7069,8 +7069,8 @@ fn switchExpr( try parent_gz.instructions.append(gpa, switch_block); try astgen.extra.ensureUnusedCapacity(gpa, @typeInfo(Zir.Inst.SwitchBlock).Struct.fields.len + - @boolToInt(multi_cases_len != 0) + - @boolToInt(any_has_tag_capture) + + @intFromBool(multi_cases_len != 0) + + @intFromBool(any_has_tag_capture) + payloads.items.len - case_table_end); const payload_index = astgen.addExtraAssumeCapacity(Zir.Inst.SwitchBlock{ @@ -7633,8 +7633,8 @@ fn numberLiteral(gz: *GenZir, ri: ResultInfo, node: Ast.Node.Index, source_node: const gpa = astgen.gpa; var big_int = try std.math.big.int.Managed.init(gpa); defer big_int.deinit(); - const prefix_offset = @as(u8, 2) * @boolToInt(base != .decimal); - big_int.setString(@enumToInt(base), bytes[prefix_offset..]) catch |err| switch (err) { + const prefix_offset = @as(u8, 2) * @intFromBool(base != .decimal); + big_int.setString(@intFromEnum(base), bytes[prefix_offset..]) catch |err| switch (err) { error.InvalidCharacter => unreachable, // caught in `parseNumberLiteral` error.InvalidBase => unreachable, // we only pass 16, 8, 2, see above error.OutOfMemory => return error.OutOfMemory, @@ -7739,7 +7739,7 @@ fn asmExpr( }, else => .{ .tag = .asm_expr, - .tmpl = @enumToInt(try comptimeExpr(gz, scope, .{ .rl = .none }, full.ast.template)), + .tmpl = @intFromEnum(try comptimeExpr(gz, scope, .{ .rl = .none }, full.ast.template)), }, }; @@ -7977,7 +7977,7 @@ fn typeOf( for (args, 0..) |arg, i| { const param_ref = try reachableExpr(&typeof_scope, &typeof_scope.base, .{ .rl = .none }, arg, node); - astgen.extra.items[args_index + i] = @enumToInt(param_ref); + astgen.extra.items[args_index + i] = @intFromEnum(param_ref); } _ = try typeof_scope.addBreak(.break_inline, refToIndex(typeof_inst).?, .void_value); @@ -8026,7 +8026,7 @@ fn minMax( var extra_index = try reserveExtra(gz.astgen, args.len); for (args) |arg| { const arg_ref = try expr(gz, scope, .{ .rl = .none }, arg); - astgen.extra.items[extra_index] = @enumToInt(arg_ref); + astgen.extra.items[extra_index] = @intFromEnum(arg_ref); extra_index += 1; } const tag: Zir.Inst.Extended = switch (op) { @@ -8101,7 +8101,7 @@ fn builtinCall( var extra_index = try reserveExtra(gz.astgen, params.len); for (params) |param| { const param_ref = try expr(gz, scope, .{ .rl = .none }, param); - astgen.extra.items[extra_index] = @enumToInt(param_ref); + astgen.extra.items[extra_index] = @intFromEnum(param_ref); extra_index += 1; } const result = try gz.addExtendedMultiOpPayloadIndex(.compile_log, payload_index, params.len); @@ -8335,7 +8335,7 @@ fn builtinCall( .tag = .extended, .data = .{ .extended = .{ .opcode = .reify, - .small = @enumToInt(gz.anon_name_strategy), + .small = @intFromEnum(gz.anon_name_strategy), .operand = payload_index, } }, }); @@ -9050,7 +9050,7 @@ fn callExpr( .callee = callee_obj, .flags = .{ .pop_error_return_trace = !propagate_error_trace, - .packed_modifier = @intCast(Zir.Inst.Call.Flags.PackedModifier, @enumToInt(modifier)), + .packed_modifier = @intCast(Zir.Inst.Call.Flags.PackedModifier, @intFromEnum(modifier)), .args_len = @intCast(Zir.Inst.Call.Flags.PackedArgsLen, call.ast.params.len), }, }); @@ -9071,7 +9071,7 @@ fn callExpr( .field_name_start = callee_field.field_name_start, .flags = .{ .pop_error_return_trace = !propagate_error_trace, - .packed_modifier = @intCast(Zir.Inst.Call.Flags.PackedModifier, @enumToInt(modifier)), + .packed_modifier = @intCast(Zir.Inst.Call.Flags.PackedModifier, @intFromEnum(modifier)), .args_len = @intCast(Zir.Inst.Call.Flags.PackedArgsLen, call.ast.params.len), }, }); @@ -10266,80 +10266,80 @@ fn rvalue( }, .ty => |ty_inst| { // Quickly eliminate some common, unnecessary type coercion. - const as_ty = @as(u64, @enumToInt(Zir.Inst.Ref.type_type)) << 32; - const as_comptime_int = @as(u64, @enumToInt(Zir.Inst.Ref.comptime_int_type)) << 32; - const as_bool = @as(u64, @enumToInt(Zir.Inst.Ref.bool_type)) << 32; - const as_usize = @as(u64, @enumToInt(Zir.Inst.Ref.usize_type)) << 32; - const as_void = @as(u64, @enumToInt(Zir.Inst.Ref.void_type)) << 32; - switch ((@as(u64, @enumToInt(ty_inst)) << 32) | @as(u64, @enumToInt(result))) { - as_ty | @enumToInt(Zir.Inst.Ref.u1_type), - as_ty | @enumToInt(Zir.Inst.Ref.u8_type), - as_ty | @enumToInt(Zir.Inst.Ref.i8_type), - as_ty | @enumToInt(Zir.Inst.Ref.u16_type), - as_ty | @enumToInt(Zir.Inst.Ref.u29_type), - as_ty | @enumToInt(Zir.Inst.Ref.i16_type), - as_ty | @enumToInt(Zir.Inst.Ref.u32_type), - as_ty | @enumToInt(Zir.Inst.Ref.i32_type), - as_ty | @enumToInt(Zir.Inst.Ref.u64_type), - as_ty | @enumToInt(Zir.Inst.Ref.i64_type), - as_ty | @enumToInt(Zir.Inst.Ref.u128_type), - as_ty | @enumToInt(Zir.Inst.Ref.i128_type), - as_ty | @enumToInt(Zir.Inst.Ref.usize_type), - as_ty | @enumToInt(Zir.Inst.Ref.isize_type), - as_ty | @enumToInt(Zir.Inst.Ref.c_char_type), - as_ty | @enumToInt(Zir.Inst.Ref.c_short_type), - as_ty | @enumToInt(Zir.Inst.Ref.c_ushort_type), - as_ty | @enumToInt(Zir.Inst.Ref.c_int_type), - as_ty | @enumToInt(Zir.Inst.Ref.c_uint_type), - as_ty | @enumToInt(Zir.Inst.Ref.c_long_type), - as_ty | @enumToInt(Zir.Inst.Ref.c_ulong_type), - as_ty | @enumToInt(Zir.Inst.Ref.c_longlong_type), - as_ty | @enumToInt(Zir.Inst.Ref.c_ulonglong_type), - as_ty | @enumToInt(Zir.Inst.Ref.c_longdouble_type), - as_ty | @enumToInt(Zir.Inst.Ref.f16_type), - as_ty | @enumToInt(Zir.Inst.Ref.f32_type), - as_ty | @enumToInt(Zir.Inst.Ref.f64_type), - as_ty | @enumToInt(Zir.Inst.Ref.f80_type), - as_ty | @enumToInt(Zir.Inst.Ref.f128_type), - as_ty | @enumToInt(Zir.Inst.Ref.anyopaque_type), - as_ty | @enumToInt(Zir.Inst.Ref.bool_type), - as_ty | @enumToInt(Zir.Inst.Ref.void_type), - as_ty | @enumToInt(Zir.Inst.Ref.type_type), - as_ty | @enumToInt(Zir.Inst.Ref.anyerror_type), - as_ty | @enumToInt(Zir.Inst.Ref.comptime_int_type), - as_ty | @enumToInt(Zir.Inst.Ref.comptime_float_type), - as_ty | @enumToInt(Zir.Inst.Ref.noreturn_type), - as_ty | @enumToInt(Zir.Inst.Ref.anyframe_type), - as_ty | @enumToInt(Zir.Inst.Ref.null_type), - as_ty | @enumToInt(Zir.Inst.Ref.undefined_type), - as_ty | @enumToInt(Zir.Inst.Ref.enum_literal_type), - as_ty | @enumToInt(Zir.Inst.Ref.atomic_order_type), - as_ty | @enumToInt(Zir.Inst.Ref.atomic_rmw_op_type), - as_ty | @enumToInt(Zir.Inst.Ref.calling_convention_type), - as_ty | @enumToInt(Zir.Inst.Ref.address_space_type), - as_ty | @enumToInt(Zir.Inst.Ref.float_mode_type), - as_ty | @enumToInt(Zir.Inst.Ref.reduce_op_type), - as_ty | @enumToInt(Zir.Inst.Ref.call_modifier_type), - as_ty | @enumToInt(Zir.Inst.Ref.prefetch_options_type), - as_ty | @enumToInt(Zir.Inst.Ref.export_options_type), - as_ty | @enumToInt(Zir.Inst.Ref.extern_options_type), - as_ty | @enumToInt(Zir.Inst.Ref.type_info_type), - as_ty | @enumToInt(Zir.Inst.Ref.manyptr_u8_type), - as_ty | @enumToInt(Zir.Inst.Ref.manyptr_const_u8_type), - as_ty | @enumToInt(Zir.Inst.Ref.manyptr_const_u8_sentinel_0_type), - as_ty | @enumToInt(Zir.Inst.Ref.single_const_pointer_to_comptime_int_type), - as_ty | @enumToInt(Zir.Inst.Ref.slice_const_u8_type), - as_ty | @enumToInt(Zir.Inst.Ref.slice_const_u8_sentinel_0_type), - as_ty | @enumToInt(Zir.Inst.Ref.anyerror_void_error_union_type), - as_ty | @enumToInt(Zir.Inst.Ref.generic_poison_type), - as_ty | @enumToInt(Zir.Inst.Ref.empty_struct_type), - as_comptime_int | @enumToInt(Zir.Inst.Ref.zero), - as_comptime_int | @enumToInt(Zir.Inst.Ref.one), - as_bool | @enumToInt(Zir.Inst.Ref.bool_true), - as_bool | @enumToInt(Zir.Inst.Ref.bool_false), - as_usize | @enumToInt(Zir.Inst.Ref.zero_usize), - as_usize | @enumToInt(Zir.Inst.Ref.one_usize), - as_void | @enumToInt(Zir.Inst.Ref.void_value), + const as_ty = @as(u64, @intFromEnum(Zir.Inst.Ref.type_type)) << 32; + const as_comptime_int = @as(u64, @intFromEnum(Zir.Inst.Ref.comptime_int_type)) << 32; + const as_bool = @as(u64, @intFromEnum(Zir.Inst.Ref.bool_type)) << 32; + const as_usize = @as(u64, @intFromEnum(Zir.Inst.Ref.usize_type)) << 32; + const as_void = @as(u64, @intFromEnum(Zir.Inst.Ref.void_type)) << 32; + switch ((@as(u64, @intFromEnum(ty_inst)) << 32) | @as(u64, @intFromEnum(result))) { + as_ty | @intFromEnum(Zir.Inst.Ref.u1_type), + as_ty | @intFromEnum(Zir.Inst.Ref.u8_type), + as_ty | @intFromEnum(Zir.Inst.Ref.i8_type), + as_ty | @intFromEnum(Zir.Inst.Ref.u16_type), + as_ty | @intFromEnum(Zir.Inst.Ref.u29_type), + as_ty | @intFromEnum(Zir.Inst.Ref.i16_type), + as_ty | @intFromEnum(Zir.Inst.Ref.u32_type), + as_ty | @intFromEnum(Zir.Inst.Ref.i32_type), + as_ty | @intFromEnum(Zir.Inst.Ref.u64_type), + as_ty | @intFromEnum(Zir.Inst.Ref.i64_type), + as_ty | @intFromEnum(Zir.Inst.Ref.u128_type), + as_ty | @intFromEnum(Zir.Inst.Ref.i128_type), + as_ty | @intFromEnum(Zir.Inst.Ref.usize_type), + as_ty | @intFromEnum(Zir.Inst.Ref.isize_type), + as_ty | @intFromEnum(Zir.Inst.Ref.c_char_type), + as_ty | @intFromEnum(Zir.Inst.Ref.c_short_type), + as_ty | @intFromEnum(Zir.Inst.Ref.c_ushort_type), + as_ty | @intFromEnum(Zir.Inst.Ref.c_int_type), + as_ty | @intFromEnum(Zir.Inst.Ref.c_uint_type), + as_ty | @intFromEnum(Zir.Inst.Ref.c_long_type), + as_ty | @intFromEnum(Zir.Inst.Ref.c_ulong_type), + as_ty | @intFromEnum(Zir.Inst.Ref.c_longlong_type), + as_ty | @intFromEnum(Zir.Inst.Ref.c_ulonglong_type), + as_ty | @intFromEnum(Zir.Inst.Ref.c_longdouble_type), + as_ty | @intFromEnum(Zir.Inst.Ref.f16_type), + as_ty | @intFromEnum(Zir.Inst.Ref.f32_type), + as_ty | @intFromEnum(Zir.Inst.Ref.f64_type), + as_ty | @intFromEnum(Zir.Inst.Ref.f80_type), + as_ty | @intFromEnum(Zir.Inst.Ref.f128_type), + as_ty | @intFromEnum(Zir.Inst.Ref.anyopaque_type), + as_ty | @intFromEnum(Zir.Inst.Ref.bool_type), + as_ty | @intFromEnum(Zir.Inst.Ref.void_type), + as_ty | @intFromEnum(Zir.Inst.Ref.type_type), + as_ty | @intFromEnum(Zir.Inst.Ref.anyerror_type), + as_ty | @intFromEnum(Zir.Inst.Ref.comptime_int_type), + as_ty | @intFromEnum(Zir.Inst.Ref.comptime_float_type), + as_ty | @intFromEnum(Zir.Inst.Ref.noreturn_type), + as_ty | @intFromEnum(Zir.Inst.Ref.anyframe_type), + as_ty | @intFromEnum(Zir.Inst.Ref.null_type), + as_ty | @intFromEnum(Zir.Inst.Ref.undefined_type), + as_ty | @intFromEnum(Zir.Inst.Ref.enum_literal_type), + as_ty | @intFromEnum(Zir.Inst.Ref.atomic_order_type), + as_ty | @intFromEnum(Zir.Inst.Ref.atomic_rmw_op_type), + as_ty | @intFromEnum(Zir.Inst.Ref.calling_convention_type), + as_ty | @intFromEnum(Zir.Inst.Ref.address_space_type), + as_ty | @intFromEnum(Zir.Inst.Ref.float_mode_type), + as_ty | @intFromEnum(Zir.Inst.Ref.reduce_op_type), + as_ty | @intFromEnum(Zir.Inst.Ref.call_modifier_type), + as_ty | @intFromEnum(Zir.Inst.Ref.prefetch_options_type), + as_ty | @intFromEnum(Zir.Inst.Ref.export_options_type), + as_ty | @intFromEnum(Zir.Inst.Ref.extern_options_type), + as_ty | @intFromEnum(Zir.Inst.Ref.type_info_type), + as_ty | @intFromEnum(Zir.Inst.Ref.manyptr_u8_type), + as_ty | @intFromEnum(Zir.Inst.Ref.manyptr_const_u8_type), + as_ty | @intFromEnum(Zir.Inst.Ref.manyptr_const_u8_sentinel_0_type), + as_ty | @intFromEnum(Zir.Inst.Ref.single_const_pointer_to_comptime_int_type), + as_ty | @intFromEnum(Zir.Inst.Ref.slice_const_u8_type), + as_ty | @intFromEnum(Zir.Inst.Ref.slice_const_u8_sentinel_0_type), + as_ty | @intFromEnum(Zir.Inst.Ref.anyerror_void_error_union_type), + as_ty | @intFromEnum(Zir.Inst.Ref.generic_poison_type), + as_ty | @intFromEnum(Zir.Inst.Ref.empty_struct_type), + as_comptime_int | @intFromEnum(Zir.Inst.Ref.zero), + as_comptime_int | @intFromEnum(Zir.Inst.Ref.one), + as_bool | @intFromEnum(Zir.Inst.Ref.bool_true), + as_bool | @intFromEnum(Zir.Inst.Ref.bool_false), + as_usize | @intFromEnum(Zir.Inst.Ref.zero_usize), + as_usize | @intFromEnum(Zir.Inst.Ref.one_usize), + as_void | @intFromEnum(Zir.Inst.Ref.void_value), => return result, // type of result is already correct // Need an explicit type coercion instruction. @@ -11429,8 +11429,8 @@ const GenZir = struct { fancyFnExprExtraLen(astgen, cc_body, args.cc_ref) + fancyFnExprExtraLen(astgen, ret_body, ret_ref) + body_len + src_locs.len + - @boolToInt(args.lib_name != 0) + - @boolToInt(args.noalias_bits != 0), + @intFromBool(args.lib_name != 0) + + @intFromBool(args.noalias_bits != 0), ); const payload_index = astgen.addExtraAssumeCapacity(Zir.Inst.FuncFancy{ .param_block = args.param_block, @@ -11468,7 +11468,7 @@ const GenZir = struct { const inst_data = zir_datas[align_body[align_body.len - 1]].@"break"; astgen.extra.items[inst_data.payload_index] = new_index; } else if (args.align_ref != .none) { - astgen.extra.appendAssumeCapacity(@enumToInt(args.align_ref)); + astgen.extra.appendAssumeCapacity(@intFromEnum(args.align_ref)); } if (addrspace_body.len != 0) { astgen.extra.appendAssumeCapacity(countBodyLenAfterFixups(astgen, addrspace_body)); @@ -11476,7 +11476,7 @@ const GenZir = struct { const inst_data = zir_datas[addrspace_body[addrspace_body.len - 1]].@"break"; astgen.extra.items[inst_data.payload_index] = new_index; } else if (args.addrspace_ref != .none) { - astgen.extra.appendAssumeCapacity(@enumToInt(args.addrspace_ref)); + astgen.extra.appendAssumeCapacity(@intFromEnum(args.addrspace_ref)); } if (section_body.len != 0) { astgen.extra.appendAssumeCapacity(countBodyLenAfterFixups(astgen, section_body)); @@ -11484,7 +11484,7 @@ const GenZir = struct { const inst_data = zir_datas[section_body[section_body.len - 1]].@"break"; astgen.extra.items[inst_data.payload_index] = new_index; } else if (args.section_ref != .none) { - astgen.extra.appendAssumeCapacity(@enumToInt(args.section_ref)); + astgen.extra.appendAssumeCapacity(@intFromEnum(args.section_ref)); } if (cc_body.len != 0) { astgen.extra.appendAssumeCapacity(countBodyLenAfterFixups(astgen, cc_body)); @@ -11492,7 +11492,7 @@ const GenZir = struct { const inst_data = zir_datas[cc_body[cc_body.len - 1]].@"break"; astgen.extra.items[inst_data.payload_index] = new_index; } else if (args.cc_ref != .none) { - astgen.extra.appendAssumeCapacity(@enumToInt(args.cc_ref)); + astgen.extra.appendAssumeCapacity(@intFromEnum(args.cc_ref)); } if (ret_body.len != 0) { astgen.extra.appendAssumeCapacity(countBodyLenAfterFixups(astgen, ret_body)); @@ -11500,7 +11500,7 @@ const GenZir = struct { const inst_data = zir_datas[ret_body[ret_body.len - 1]].@"break"; astgen.extra.items[inst_data.payload_index] = new_index; } else if (ret_ref != .none) { - astgen.extra.appendAssumeCapacity(@enumToInt(ret_ref)); + astgen.extra.appendAssumeCapacity(@intFromEnum(ret_ref)); } if (args.noalias_bits != 0) { @@ -11542,7 +11542,7 @@ const GenZir = struct { const ret_body_len = if (ret_body.len != 0) countBodyLenAfterFixups(astgen, ret_body) else - @boolToInt(ret_ref != .none); + @intFromBool(ret_ref != .none); const payload_index = astgen.addExtraAssumeCapacity(Zir.Inst.Func{ .param_block = args.param_block, @@ -11556,7 +11556,7 @@ const GenZir = struct { const inst_data = zir_datas[ret_body[ret_body.len - 1]].@"break"; astgen.extra.items[inst_data.payload_index] = new_index; } else if (ret_ref != .none) { - astgen.extra.appendAssumeCapacity(@enumToInt(ret_ref)); + astgen.extra.appendAssumeCapacity(@intFromEnum(ret_ref)); } astgen.appendBodyWithFixups(body); astgen.extra.appendSliceAssumeCapacity(src_locs); @@ -11587,7 +11587,7 @@ const GenZir = struct { fn fancyFnExprExtraLen(astgen: *AstGen, body: []Zir.Inst.Index, ref: Zir.Inst.Ref) u32 { // In the case of non-empty body, there is one for the body length, // and then one for each instruction. - return countBodyLenAfterFixups(astgen, body) + @boolToInt(ref != .none); + return countBodyLenAfterFixups(astgen, body) + @intFromBool(ref != .none); } fn addVar(gz: *GenZir, args: struct { @@ -11607,9 +11607,9 @@ const GenZir = struct { try astgen.extra.ensureUnusedCapacity( gpa, @typeInfo(Zir.Inst.ExtendedVar).Struct.fields.len + - @boolToInt(args.lib_name != 0) + - @boolToInt(args.align_inst != .none) + - @boolToInt(args.init != .none), + @intFromBool(args.lib_name != 0) + + @intFromBool(args.align_inst != .none) + + @intFromBool(args.init != .none), ); const payload_index = astgen.addExtraAssumeCapacity(Zir.Inst.ExtendedVar{ .var_type = args.var_type, @@ -11618,10 +11618,10 @@ const GenZir = struct { astgen.extra.appendAssumeCapacity(args.lib_name); } if (args.align_inst != .none) { - astgen.extra.appendAssumeCapacity(@enumToInt(args.align_inst)); + astgen.extra.appendAssumeCapacity(@intFromEnum(args.align_inst)); } if (args.init != .none) { - astgen.extra.appendAssumeCapacity(@enumToInt(args.init)); + astgen.extra.appendAssumeCapacity(@intFromEnum(args.init)); } const new_index = @intCast(Zir.Inst.Index, astgen.instructions.len); @@ -12208,23 +12208,23 @@ const GenZir = struct { try astgen.extra.ensureUnusedCapacity( gpa, @typeInfo(Zir.Inst.AllocExtended).Struct.fields.len + - @as(usize, @boolToInt(args.type_inst != .none)) + - @as(usize, @boolToInt(args.align_inst != .none)), + @as(usize, @intFromBool(args.type_inst != .none)) + + @as(usize, @intFromBool(args.align_inst != .none)), ); const payload_index = gz.astgen.addExtraAssumeCapacity(Zir.Inst.AllocExtended{ .src_node = gz.nodeIndexToRelative(args.node), }); if (args.type_inst != .none) { - astgen.extra.appendAssumeCapacity(@enumToInt(args.type_inst)); + astgen.extra.appendAssumeCapacity(@intFromEnum(args.type_inst)); } if (args.align_inst != .none) { - astgen.extra.appendAssumeCapacity(@enumToInt(args.align_inst)); + astgen.extra.appendAssumeCapacity(@intFromEnum(args.align_inst)); } - const has_type: u4 = @boolToInt(args.type_inst != .none); - const has_align: u4 = @boolToInt(args.align_inst != .none); - const is_const: u4 = @boolToInt(args.is_const); - const is_comptime: u4 = @boolToInt(args.is_comptime); + const has_type: u4 = @intFromBool(args.type_inst != .none); + const has_align: u4 = @intFromBool(args.align_inst != .none); + const is_const: u4 = @intFromBool(args.is_const); + const is_comptime: u4 = @intFromBool(args.is_comptime); const small: u16 = has_type | (has_align << 1) | (is_const << 2) | (is_comptime << 3); const new_index = @intCast(Zir.Inst.Index, astgen.instructions.len); @@ -12284,7 +12284,7 @@ const GenZir = struct { const small: u16 = @intCast(u16, args.outputs.len) | @intCast(u16, args.inputs.len << 5) | @intCast(u16, args.clobbers.len << 10) | - (@as(u16, @boolToInt(args.is_volatile)) << 15); + (@as(u16, @intFromBool(args.is_volatile)) << 15); const new_index = @intCast(Zir.Inst.Index, astgen.instructions.len); astgen.instructions.appendAssumeCapacity(.{ @@ -12362,7 +12362,7 @@ const GenZir = struct { if (args.backing_int_ref != .none) { astgen.extra.appendAssumeCapacity(args.backing_int_body_len); if (args.backing_int_body_len == 0) { - astgen.extra.appendAssumeCapacity(@enumToInt(args.backing_int_ref)); + astgen.extra.appendAssumeCapacity(@intFromEnum(args.backing_int_ref)); } } astgen.instructions.set(inst, .{ @@ -12405,7 +12405,7 @@ const GenZir = struct { astgen.extra.appendAssumeCapacity(@bitCast(u32, node_offset)); } if (args.tag_type != .none) { - astgen.extra.appendAssumeCapacity(@enumToInt(args.tag_type)); + astgen.extra.appendAssumeCapacity(@intFromEnum(args.tag_type)); } if (args.body_len != 0) { astgen.extra.appendAssumeCapacity(args.body_len); @@ -12454,7 +12454,7 @@ const GenZir = struct { astgen.extra.appendAssumeCapacity(@bitCast(u32, node_offset)); } if (args.tag_type != .none) { - astgen.extra.appendAssumeCapacity(@enumToInt(args.tag_type)); + astgen.extra.appendAssumeCapacity(@intFromEnum(args.tag_type)); } if (args.body_len != 0) { astgen.extra.appendAssumeCapacity(args.body_len); @@ -12948,10 +12948,10 @@ fn lowerAstErrors(astgen: *AstGen) !void { var notes: std.ArrayListUnmanaged(u32) = .{}; defer notes.deinit(gpa); - if (token_tags[parse_err.token + @boolToInt(parse_err.token_is_prev)] == .invalid) { - const tok = parse_err.token + @boolToInt(parse_err.token_is_prev); - const bad_off = @intCast(u32, tree.tokenSlice(parse_err.token + @boolToInt(parse_err.token_is_prev)).len); - const byte_abs = token_starts[parse_err.token + @boolToInt(parse_err.token_is_prev)] + bad_off; + if (token_tags[parse_err.token + @intFromBool(parse_err.token_is_prev)] == .invalid) { + const tok = parse_err.token + @intFromBool(parse_err.token_is_prev); + const bad_off = @intCast(u32, tree.tokenSlice(parse_err.token + @intFromBool(parse_err.token_is_prev)).len); + const byte_abs = token_starts[parse_err.token + @intFromBool(parse_err.token_is_prev)] + bad_off; try notes.append(gpa, try astgen.errNoteTokOff(tok, bad_off, "invalid byte: '{'}'", .{ std.zig.fmtEscapes(tree.source[byte_abs..][0..1]), })); diff --git a/src/Autodoc.zig b/src/Autodoc.zig index e3580483fb..68ddcc94c4 100644 --- a/src/Autodoc.zig +++ b/src/Autodoc.zig @@ -107,10 +107,10 @@ pub fn generateZirData(self: *Autodoc) !void { const file = self.comp_module.import_table.get(abs_root_src_path).?; // file is expected to be present in the import table // Append all the types in Zir.Inst.Ref. { - comptime std.debug.assert(@enumToInt(InternPool.Index.first_type) == 0); + comptime std.debug.assert(@intFromEnum(InternPool.Index.first_type) == 0); var i: u32 = 0; - while (i <= @enumToInt(InternPool.Index.last_type)) : (i += 1) { - const ip_index = @intToEnum(InternPool.Index, i); + while (i <= @intFromEnum(InternPool.Index.last_type)) : (i += 1) { + const ip_index = @enumFromInt(InternPool.Index, i); var tmpbuf = std.ArrayList(u8).init(self.arena); if (ip_index == .generic_poison_type) { // Not a real type, doesn't have a normal name @@ -696,14 +696,14 @@ const DocData = struct { jsw.whitespace = opts.whitespace; try jsw.beginArray(); try jsw.arrayElem(); - try jsw.emitNumber(@enumToInt(active_tag)); + try jsw.emitNumber(@intFromEnum(active_tag)); inline for (comptime std.meta.fields(Type)) |case| { if (@field(Type, case.name) == active_tag) { const current_value = @field(self, case.name); inline for (comptime std.meta.fields(case.type)) |f| { try jsw.arrayElem(); if (f.type == std.builtin.Type.Pointer.Size) { - try jsw.emitNumber(@enumToInt(@field(current_value, f.name))); + try jsw.emitNumber(@intFromEnum(@field(current_value, f.name))); } else { try std.json.stringify(@field(current_value, f.name), opts, w); jsw.state_index -= 1; @@ -756,7 +756,7 @@ const DocData = struct { as: As, sizeOf: usize, // index in `exprs` bitSizeOf: usize, // index in `exprs` - enumToInt: usize, // index in `exprs` + intFromEnum: usize, // index in `exprs` compileError: usize, //index in `exprs` errorSets: usize, string: []const u8, // direct value @@ -956,7 +956,7 @@ fn walkInstruction( if (result.found_existing) { return DocData.WalkResult{ - .typeRef = .{ .type = @enumToInt(Ref.type_type) }, + .typeRef = .{ .type = @intFromEnum(Ref.type_type) }, .expr = .{ .type = result.value_ptr.main }, }; } @@ -1005,7 +1005,7 @@ fn walkInstruction( const result = try self.files.getOrPut(self.arena, new_file.file); if (result.found_existing) { return DocData.WalkResult{ - .typeRef = .{ .type = @enumToInt(Ref.type_type) }, + .typeRef = .{ .type = @intFromEnum(Ref.type_type) }, .expr = .{ .type = result.value_ptr.* }, }; } @@ -1033,8 +1033,8 @@ fn walkInstruction( }, .ret_type => { return DocData.WalkResult{ - .typeRef = .{ .type = @enumToInt(Ref.type_type) }, - .expr = .{ .type = @enumToInt(Ref.type_type) }, + .typeRef = .{ .type = @intFromEnum(Ref.type_type) }, + .expr = .{ .type = @intFromEnum(Ref.type_type) }, }; }, .ret_node => { @@ -1093,7 +1093,7 @@ fn walkInstruction( try self.types.append(self.arena, .{ .Array = .{ .len = .{ .int = .{ .value = str.len } }, - .child = .{ .type = @enumToInt(Ref.u8_type) }, + .child = .{ .type = @intFromEnum(Ref.u8_type) }, .sentinel = .{ .int = .{ .value = 0, .negated = false, @@ -1155,7 +1155,7 @@ fn walkInstruction( .int => { const int = data[inst_index].int; return DocData.WalkResult{ - .typeRef = .{ .type = @enumToInt(Ref.comptime_int_type) }, + .typeRef = .{ .type = @intFromEnum(Ref.comptime_int_type) }, .expr = .{ .int = .{ .value = int } }, }; }, @@ -1176,7 +1176,7 @@ fn walkInstruction( const as_string = try big_int.toStringAlloc(self.arena, 10, .lower); return DocData.WalkResult{ - .typeRef = .{ .type = @enumToInt(Ref.comptime_int_type) }, + .typeRef = .{ .type = @intFromEnum(Ref.comptime_int_type) }, .expr = .{ .int_big = .{ .value = as_string } }, }; }, @@ -1422,7 +1422,7 @@ fn walkInstruction( } }; return DocData.WalkResult{ - .typeRef = .{ .type = @enumToInt(Ref.type_type) }, + .typeRef = .{ .type = @intFromEnum(Ref.type_type) }, .expr = .{ .binOpIndex = binop_index }, }; }, @@ -1466,7 +1466,7 @@ fn walkInstruction( } }; return DocData.WalkResult{ - .typeRef = .{ .type = @enumToInt(Ref.bool_type) }, + .typeRef = .{ .type = @intFromEnum(Ref.bool_type) }, .expr = .{ .binOpIndex = binop_index }, }; }, @@ -1516,7 +1516,7 @@ fn walkInstruction( self.exprs.items[bin_index] = .{ .builtin = .{ .name = @tagName(tags[inst_index]), .param = param_index } }; return DocData.WalkResult{ - .typeRef = param.typeRef orelse .{ .type = @enumToInt(Ref.type_type) }, + .typeRef = param.typeRef orelse .{ .type = @intFromEnum(Ref.type_type) }, .expr = .{ .builtinIndex = bin_index }, }; }, @@ -1578,7 +1578,7 @@ fn walkInstruction( self.exprs.items[binop_index] = .{ .builtinBin = .{ .name = @tagName(tags[inst_index]), .lhs = lhs_index, .rhs = rhs_index } }; return DocData.WalkResult{ - .typeRef = .{ .type = @enumToInt(Ref.type_type) }, + .typeRef = .{ .type = @intFromEnum(Ref.type_type) }, .expr = .{ .builtinBinIndex = binop_index }, }; }, @@ -1608,7 +1608,7 @@ fn walkInstruction( } }); return DocData.WalkResult{ - .typeRef = .{ .type = @enumToInt(Ref.type_type) }, + .typeRef = .{ .type = @intFromEnum(Ref.type_type) }, .expr = .{ .errorUnion = type_slot_index }, }; }, @@ -1637,7 +1637,7 @@ fn walkInstruction( } }); return DocData.WalkResult{ - .typeRef = .{ .type = @enumToInt(Ref.type_type) }, + .typeRef = .{ .type = @intFromEnum(Ref.type_type) }, .expr = .{ .errorSets = type_slot_index }, }; }, @@ -1670,7 +1670,7 @@ fn walkInstruction( // present in json var sentinel: ?DocData.Expr = null; if (ptr.flags.has_sentinel) { - const ref = @intToEnum(Zir.Inst.Ref, file.zir.extra[extra_index]); + const ref = @enumFromInt(Zir.Inst.Ref, file.zir.extra[extra_index]); const ref_result = try self.walkRef(file, parent_scope, parent_src, ref, false); sentinel = ref_result.expr; extra_index += 1; @@ -1678,21 +1678,21 @@ fn walkInstruction( var @"align": ?DocData.Expr = null; if (ptr.flags.has_align) { - const ref = @intToEnum(Zir.Inst.Ref, file.zir.extra[extra_index]); + const ref = @enumFromInt(Zir.Inst.Ref, file.zir.extra[extra_index]); const ref_result = try self.walkRef(file, parent_scope, parent_src, ref, false); @"align" = ref_result.expr; extra_index += 1; } var address_space: ?DocData.Expr = null; if (ptr.flags.has_addrspace) { - const ref = @intToEnum(Zir.Inst.Ref, file.zir.extra[extra_index]); + const ref = @enumFromInt(Zir.Inst.Ref, file.zir.extra[extra_index]); const ref_result = try self.walkRef(file, parent_scope, parent_src, ref, false); address_space = ref_result.expr; extra_index += 1; } var bit_start: ?DocData.Expr = null; if (ptr.flags.has_bit_range) { - const ref = @intToEnum(Zir.Inst.Ref, file.zir.extra[extra_index]); + const ref = @enumFromInt(Zir.Inst.Ref, file.zir.extra[extra_index]); const ref_result = try self.walkRef(file, parent_scope, parent_src, ref, false); address_space = ref_result.expr; extra_index += 1; @@ -1700,7 +1700,7 @@ fn walkInstruction( var host_size: ?DocData.Expr = null; if (ptr.flags.has_bit_range) { - const ref = @intToEnum(Zir.Inst.Ref, file.zir.extra[extra_index]); + const ref = @enumFromInt(Zir.Inst.Ref, file.zir.extra[extra_index]); const ref_result = try self.walkRef(file, parent_scope, parent_src, ref, false); host_size = ref_result.expr; } @@ -1724,7 +1724,7 @@ fn walkInstruction( }, }); return DocData.WalkResult{ - .typeRef = .{ .type = @enumToInt(Ref.type_type) }, + .typeRef = .{ .type = @intFromEnum(Ref.type_type) }, .expr = .{ .type = type_slot_index }, }; }, @@ -1744,7 +1744,7 @@ fn walkInstruction( }); return DocData.WalkResult{ - .typeRef = .{ .type = @enumToInt(Ref.type_type) }, + .typeRef = .{ .type = @intFromEnum(Ref.type_type) }, .expr = .{ .type = type_slot_index }, }; }, @@ -1764,7 +1764,7 @@ fn walkInstruction( }, }); return DocData.WalkResult{ - .typeRef = .{ .type = @enumToInt(Ref.type_type) }, + .typeRef = .{ .type = @intFromEnum(Ref.type_type) }, .expr = .{ .type = type_slot_index }, }; }, @@ -1863,7 +1863,7 @@ fn walkInstruction( .float => { const float = data[inst_index].float; return DocData.WalkResult{ - .typeRef = .{ .type = @enumToInt(Ref.comptime_float_type) }, + .typeRef = .{ .type = @intFromEnum(Ref.comptime_float_type) }, .expr = .{ .float = float }, }; }, @@ -1872,7 +1872,7 @@ fn walkInstruction( const pl_node = data[inst_index].pl_node; const extra = file.zir.extraData(Zir.Inst.Float128, pl_node.payload_index); return DocData.WalkResult{ - .typeRef = .{ .type = @enumToInt(Ref.comptime_float_type) }, + .typeRef = .{ .type = @intFromEnum(Ref.comptime_float_type) }, .expr = .{ .float128 = extra.data.get() }, }; }, @@ -1913,7 +1913,7 @@ fn walkInstruction( const operand_index = self.exprs.items.len; try self.exprs.append(self.arena, operand.expr); return DocData.WalkResult{ - .typeRef = .{ .type = @enumToInt(Ref.comptime_int_type) }, + .typeRef = .{ .type = @intFromEnum(Ref.comptime_int_type) }, .expr = .{ .sizeOf = operand_index }, }; }, @@ -1950,8 +1950,8 @@ fn walkInstruction( try self.exprs.append(self.arena, operand.expr); return DocData.WalkResult{ - .typeRef = .{ .type = @enumToInt(Ref.comptime_int_type) }, - .expr = .{ .enumToInt = operand_index }, + .typeRef = .{ .type = @intFromEnum(Ref.comptime_int_type) }, + .expr = .{ .intFromEnum = operand_index }, }; }, .switch_block => { @@ -1992,7 +1992,7 @@ fn walkInstruction( // } }); return DocData.WalkResult{ - .typeRef = .{ .type = @enumToInt(Ref.type_type) }, + .typeRef = .{ .type = @intFromEnum(Ref.type_type) }, .expr = .{ .switchIndex = switch_index }, }; }, @@ -2109,7 +2109,7 @@ fn walkInstruction( }); return DocData.WalkResult{ - .typeRef = .{ .type = @enumToInt(Ref.type_type) }, + .typeRef = .{ .type = @intFromEnum(Ref.type_type) }, .expr = .{ .type = operand_idx }, }; }, @@ -2210,13 +2210,13 @@ fn walkInstruction( }); return DocData.WalkResult{ - .typeRef = .{ .type = @enumToInt(Ref.type_type) }, + .typeRef = .{ .type = @intFromEnum(Ref.type_type) }, .expr = .{ .type = self.types.items.len - 1 }, }; }, .block => { const res = DocData.WalkResult{ - .typeRef = .{ .type = @enumToInt(Ref.type_type) }, + .typeRef = .{ .type = @intFromEnum(Ref.type_type) }, .expr = .{ .comptimeExpr = self.comptime_exprs.items.len }, }; const pl_node = data[inst_index].pl_node; @@ -2233,7 +2233,7 @@ fn walkInstruction( parent_src, getBlockInlineBreak(file.zir, inst_index) orelse { const res = DocData.WalkResult{ - .typeRef = .{ .type = @enumToInt(Ref.type_type) }, + .typeRef = .{ .type = @intFromEnum(Ref.type_type) }, .expr = .{ .comptimeExpr = self.comptime_exprs.items.len }, }; const pl_node = data[inst_index].pl_node; @@ -2376,7 +2376,7 @@ fn walkInstruction( }); return DocData.WalkResult{ - .typeRef = .{ .type = @enumToInt(Ref.type_type) }, + .typeRef = .{ .type = @intFromEnum(Ref.type_type) }, .expr = .{ .type = type_slot_index }, }; }, @@ -2600,7 +2600,7 @@ fn walkInstruction( // anyway, but maybe we should put it elsewhere. } return DocData.WalkResult{ - .typeRef = .{ .type = @enumToInt(Ref.type_type) }, + .typeRef = .{ .type = @intFromEnum(Ref.type_type) }, .expr = .{ .type = type_slot_index }, }; }, @@ -2620,7 +2620,7 @@ fn walkInstruction( }; if (small.has_init) { - const var_init_ref = @intToEnum(Ref, file.zir.extra[extra_index]); + const var_init_ref = @enumFromInt(Ref, file.zir.extra[extra_index]); const var_init = try self.walkRef(file, parent_scope, parent_src, var_init_ref, need_type); value.expr = var_init.expr; value.typeRef = var_init.typeRef; @@ -2656,7 +2656,7 @@ fn walkInstruction( const tag_type_ref: ?Ref = if (small.has_tag_type) blk: { const tag_type = file.zir.extra[extra_index]; extra_index += 1; - const tag_ref = @intToEnum(Ref, tag_type); + const tag_ref = @enumFromInt(Ref, tag_type); break :blk tag_ref; } else null; @@ -2751,7 +2751,7 @@ fn walkInstruction( } return DocData.WalkResult{ - .typeRef = .{ .type = @enumToInt(Ref.type_type) }, + .typeRef = .{ .type = @intFromEnum(Ref.type_type) }, .expr = .{ .type = type_slot_index }, }; }, @@ -2781,7 +2781,7 @@ fn walkInstruction( const tag_type: ?DocData.Expr = if (small.has_tag_type) blk: { const tag_type = file.zir.extra[extra_index]; extra_index += 1; - const tag_ref = @intToEnum(Ref, tag_type); + const tag_ref = @enumFromInt(Ref, tag_type); const wr = try self.walkRef(file, parent_scope, parent_src, tag_ref, false); break :blk wr.expr; } else null; @@ -2839,7 +2839,7 @@ fn walkInstruction( const value_expr: ?DocData.Expr = if (has_value) blk: { const value_ref = file.zir.extra[extra_index]; extra_index += 1; - const value = try self.walkRef(file, &scope, src_info, @intToEnum(Ref, value_ref), false); + const value = try self.walkRef(file, &scope, src_info, @enumFromInt(Ref, value_ref), false); break :blk value.expr; } else null; try field_values.append(self.arena, value_expr); @@ -2887,7 +2887,7 @@ fn walkInstruction( // anyway, but maybe we should put it elsewhere. } return DocData.WalkResult{ - .typeRef = .{ .type = @enumToInt(Ref.type_type) }, + .typeRef = .{ .type = @intFromEnum(Ref.type_type) }, .expr = .{ .type = type_slot_index }, }; }, @@ -2928,7 +2928,7 @@ fn walkInstruction( const backing_int_body_len = file.zir.extra[extra_index]; extra_index += 1; // backing_int_body_len if (backing_int_body_len == 0) { - const backing_int_ref = @intToEnum(Ref, file.zir.extra[extra_index]); + const backing_int_ref = @enumFromInt(Ref, file.zir.extra[extra_index]); const backing_int_res = try self.walkRef(file, &scope, src_info, backing_int_ref, true); backing_int = backing_int_res.expr; extra_index += 1; // backing_int_ref @@ -3006,13 +3006,13 @@ fn walkInstruction( // anyway, but maybe we should put it elsewhere. } return DocData.WalkResult{ - .typeRef = .{ .type = @enumToInt(Ref.type_type) }, + .typeRef = .{ .type = @intFromEnum(Ref.type_type) }, .expr = .{ .type = type_slot_index }, }; }, .this => { return DocData.WalkResult{ - .typeRef = .{ .type = @enumToInt(Ref.type_type) }, + .typeRef = .{ .type = @intFromEnum(Ref.type_type) }, .expr = .{ .this = parent_scope.enclosing_type.?, // We know enclosing_type is always present @@ -3038,7 +3038,7 @@ fn walkInstruction( self.exprs.items[bin_index] = .{ .builtin = .{ .name = @tagName(extended.opcode), .param = param_index } }; return DocData.WalkResult{ - .typeRef = param.typeRef orelse .{ .type = @enumToInt(Ref.type_type) }, + .typeRef = param.typeRef orelse .{ .type = @intFromEnum(Ref.type_type) }, .expr = .{ .builtinIndex = bin_index }, }; }, @@ -3058,7 +3058,7 @@ fn walkInstruction( return DocData.WalkResult{ // from docs we know they return u32 - .typeRef = .{ .type = @enumToInt(Ref.u32_type) }, + .typeRef = .{ .type = @intFromEnum(Ref.u32_type) }, .expr = .{ .builtinIndex = bin_index }, }; }, @@ -3131,7 +3131,7 @@ fn walkInstruction( .failure_order = failure_order_index, } }); return DocData.WalkResult{ - .typeRef = .{ .type = @enumToInt(Ref.type_type) }, + .typeRef = .{ .type = @intFromEnum(Ref.type_type) }, .expr = .{ .cmpxchgIndex = cmpxchg_index }, }; }, @@ -3280,21 +3280,21 @@ fn analyzeDecl( extra_index += 1; const align_inst: Zir.Inst.Ref = if (!has_align) .none else inst: { - const inst = @intToEnum(Zir.Inst.Ref, file.zir.extra[extra_index]); + const inst = @enumFromInt(Zir.Inst.Ref, file.zir.extra[extra_index]); extra_index += 1; break :inst inst; }; _ = align_inst; const section_inst: Zir.Inst.Ref = if (!has_section_or_addrspace) .none else inst: { - const inst = @intToEnum(Zir.Inst.Ref, file.zir.extra[extra_index]); + const inst = @enumFromInt(Zir.Inst.Ref, file.zir.extra[extra_index]); extra_index += 1; break :inst inst; }; _ = section_inst; const addrspace_inst: Zir.Inst.Ref = if (!has_section_or_addrspace) .none else inst: { - const inst = @intToEnum(Zir.Inst.Ref, file.zir.extra[extra_index]); + const inst = @enumFromInt(Zir.Inst.Ref, file.zir.extra[extra_index]); extra_index += 1; break :inst inst; }; @@ -4111,7 +4111,7 @@ fn analyzeFancyFunction( var align_index: ?usize = null; if (extra.data.bits.has_align_ref) { - const align_ref = @intToEnum(Zir.Inst.Ref, file.zir.extra[extra_index]); + const align_ref = @enumFromInt(Zir.Inst.Ref, file.zir.extra[extra_index]); align_index = self.exprs.items.len; _ = try self.walkRef(file, scope, parent_src, align_ref, false); extra_index += 1; @@ -4128,7 +4128,7 @@ fn analyzeFancyFunction( var addrspace_index: ?usize = null; if (extra.data.bits.has_addrspace_ref) { - const addrspace_ref = @intToEnum(Zir.Inst.Ref, file.zir.extra[extra_index]); + const addrspace_ref = @enumFromInt(Zir.Inst.Ref, file.zir.extra[extra_index]); addrspace_index = self.exprs.items.len; _ = try self.walkRef(file, scope, parent_src, addrspace_ref, false); extra_index += 1; @@ -4145,7 +4145,7 @@ fn analyzeFancyFunction( var section_index: ?usize = null; if (extra.data.bits.has_section_ref) { - const section_ref = @intToEnum(Zir.Inst.Ref, file.zir.extra[extra_index]); + const section_ref = @enumFromInt(Zir.Inst.Ref, file.zir.extra[extra_index]); section_index = self.exprs.items.len; _ = try self.walkRef(file, scope, parent_src, section_ref, false); extra_index += 1; @@ -4162,7 +4162,7 @@ fn analyzeFancyFunction( var cc_index: ?usize = null; if (extra.data.bits.has_cc_ref and !extra.data.bits.has_cc_body) { - const cc_ref = @intToEnum(Zir.Inst.Ref, file.zir.extra[extra_index]); + const cc_ref = @enumFromInt(Zir.Inst.Ref, file.zir.extra[extra_index]); const cc_expr = try self.walkRef(file, scope, parent_src, cc_ref, false); cc_index = self.exprs.items.len; @@ -4211,7 +4211,7 @@ fn analyzeFancyFunction( const generic_ret: ?DocData.Expr = switch (ret_type_ref) { .type => |t| blk: { if (fn_info.body.len == 0) break :blk null; - if (t == @enumToInt(Ref.type_type)) { + if (t == @intFromEnum(Ref.type_type)) { break :blk try self.getGenericReturnType( file, scope, @@ -4249,7 +4249,7 @@ fn analyzeFancyFunction( }; return DocData.WalkResult{ - .typeRef = .{ .type = @enumToInt(Ref.type_type) }, + .typeRef = .{ .type = @intFromEnum(Ref.type_type) }, .expr = .{ .type = type_slot_index }, }; } @@ -4354,7 +4354,7 @@ fn analyzeFunction( const generic_ret: ?DocData.Expr = switch (ret_type_ref) { .type => |t| blk: { if (fn_info.body.len == 0) break :blk null; - if (t == @enumToInt(Ref.type_type)) { + if (t == @intFromEnum(Ref.type_type)) { break :blk try self.getGenericReturnType( file, scope, @@ -4395,7 +4395,7 @@ fn analyzeFunction( }; return DocData.WalkResult{ - .typeRef = .{ .type = @enumToInt(Ref.type_type) }, + .typeRef = .{ .type = @intFromEnum(Ref.type_type) }, .expr = .{ .type = type_slot_index }, }; } @@ -4467,7 +4467,7 @@ fn collectUnionFieldInfo( const doc_comment_index = file.zir.extra[extra_index]; extra_index += 1; const field_type = if (has_type) - @intToEnum(Zir.Inst.Ref, file.zir.extra[extra_index]) + @enumFromInt(Zir.Inst.Ref, file.zir.extra[extra_index]) else .void_type; if (has_type) extra_index += 1; @@ -4561,7 +4561,7 @@ fn collectStructFieldInfo( if (has_type_body) { fields[field_i].type_body_len = file.zir.extra[extra_index]; } else { - fields[field_i].type_ref = @intToEnum(Zir.Inst.Ref, file.zir.extra[extra_index]); + fields[field_i].type_ref = @enumFromInt(Zir.Inst.Ref, file.zir.extra[extra_index]); } extra_index += 1; @@ -4651,13 +4651,13 @@ fn walkRef( ) AutodocErrors!DocData.WalkResult { if (ref == .none) { return .{ .expr = .{ .comptimeExpr = 0 } }; - } else if (@enumToInt(ref) <= @enumToInt(InternPool.Index.last_type)) { + } else if (@intFromEnum(ref) <= @intFromEnum(InternPool.Index.last_type)) { // We can just return a type that indexes into `types` with the // enum value because in the beginning we pre-filled `types` with // the types that are listed in `Ref`. return DocData.WalkResult{ - .typeRef = .{ .type = @enumToInt(std.builtin.TypeId.Type) }, - .expr = .{ .type = @enumToInt(ref) }, + .typeRef = .{ .type = @intFromEnum(std.builtin.TypeId.Type) }, + .expr = .{ .type = @intFromEnum(ref) }, }; } else if (Zir.refToIndex(ref)) |zir_index| { return self.walkInstruction(file, parent_scope, parent_src, zir_index, need_type); @@ -4676,26 +4676,26 @@ fn walkRef( }, .zero => { return DocData.WalkResult{ - .typeRef = .{ .type = @enumToInt(Ref.comptime_int_type) }, + .typeRef = .{ .type = @intFromEnum(Ref.comptime_int_type) }, .expr = .{ .int = .{ .value = 0 } }, }; }, .one => { return DocData.WalkResult{ - .typeRef = .{ .type = @enumToInt(Ref.comptime_int_type) }, + .typeRef = .{ .type = @intFromEnum(Ref.comptime_int_type) }, .expr = .{ .int = .{ .value = 1 } }, }; }, .void_value => { return DocData.WalkResult{ - .typeRef = .{ .type = @enumToInt(Ref.void_type) }, + .typeRef = .{ .type = @intFromEnum(Ref.void_type) }, .expr = .{ .void = .{} }, }; }, .unreachable_value => { return DocData.WalkResult{ - .typeRef = .{ .type = @enumToInt(Ref.noreturn_type) }, + .typeRef = .{ .type = @intFromEnum(Ref.noreturn_type) }, .expr = .{ .@"unreachable" = .{} }, }; }, @@ -4704,13 +4704,13 @@ fn walkRef( }, .bool_true => { return DocData.WalkResult{ - .typeRef = .{ .type = @enumToInt(Ref.bool_type) }, + .typeRef = .{ .type = @intFromEnum(Ref.bool_type) }, .expr = .{ .bool = true }, }; }, .bool_false => { return DocData.WalkResult{ - .typeRef = .{ .type = @enumToInt(Ref.bool_type) }, + .typeRef = .{ .type = @intFromEnum(Ref.bool_type) }, .expr = .{ .bool = false }, }; }, @@ -4719,37 +4719,37 @@ fn walkRef( }, .zero_usize => { return DocData.WalkResult{ - .typeRef = .{ .type = @enumToInt(Ref.usize_type) }, + .typeRef = .{ .type = @intFromEnum(Ref.usize_type) }, .expr = .{ .int = .{ .value = 0 } }, }; }, .one_usize => { return DocData.WalkResult{ - .typeRef = .{ .type = @enumToInt(Ref.usize_type) }, + .typeRef = .{ .type = @intFromEnum(Ref.usize_type) }, .expr = .{ .int = .{ .value = 1 } }, }; }, .calling_convention_type => { return DocData.WalkResult{ - .typeRef = .{ .type = @enumToInt(Ref.type_type) }, - .expr = .{ .type = @enumToInt(Ref.calling_convention_type) }, + .typeRef = .{ .type = @intFromEnum(Ref.type_type) }, + .expr = .{ .type = @intFromEnum(Ref.calling_convention_type) }, }; }, .calling_convention_c => { return DocData.WalkResult{ - .typeRef = .{ .type = @enumToInt(Ref.calling_convention_type) }, + .typeRef = .{ .type = @intFromEnum(Ref.calling_convention_type) }, .expr = .{ .enumLiteral = "C" }, }; }, .calling_convention_inline => { return DocData.WalkResult{ - .typeRef = .{ .type = @enumToInt(Ref.calling_convention_type) }, + .typeRef = .{ .type = @intFromEnum(Ref.calling_convention_type) }, .expr = .{ .enumLiteral = "Inline" }, }; }, // .generic_poison => { // return DocData.WalkResult{ .int = .{ - // .type = @enumToInt(Ref.comptime_int_type), + // .type = @intFromEnum(Ref.comptime_int_type), // .value = 1, // } }; // }, diff --git a/src/Compilation.zig b/src/Compilation.zig index 739b747e32..4c8b901fd1 100644 --- a/src/Compilation.zig +++ b/src/Compilation.zig @@ -1050,7 +1050,7 @@ pub fn create(gpa: Allocator, options: InitOptions) !*Compilation { const is_enabled = options.target.cpu.features.isEnabled(index); if (feature.llvm_name) |llvm_name| { - const plus_or_minus = "-+"[@boolToInt(is_enabled)]; + const plus_or_minus = "-+"[@intFromBool(is_enabled)]; try buf.ensureUnusedCapacity(2 + llvm_name.len); buf.appendAssumeCapacity(plus_or_minus); buf.appendSliceAssumeCapacity(llvm_name); @@ -2506,7 +2506,7 @@ pub fn makeBinFileWritable(self: *Compilation) !void { /// This function is temporally single-threaded. pub fn totalErrorCount(self: *Compilation) u32 { var total: usize = self.failed_c_objects.count() + self.misc_failures.count() + - @boolToInt(self.alloc_failure_occurred) + self.lld_errors.items.len; + @intFromBool(self.alloc_failure_occurred) + self.lld_errors.items.len; if (self.bin_file.options.module) |module| { total += module.failed_exports.count(); @@ -2520,7 +2520,7 @@ pub fn totalErrorCount(self: *Compilation) u32 { } else { const file = entry.key_ptr.*; assert(file.zir_loaded); - const payload_index = file.zir.extra[@enumToInt(Zir.ExtraIndex.compile_errors)]; + const payload_index = file.zir.extra[@intFromEnum(Zir.ExtraIndex.compile_errors)]; assert(payload_index != 0); const header = file.zir.extraData(Zir.Inst.CompileErrors, payload_index); total += header.data.items_len; @@ -2551,14 +2551,14 @@ pub fn totalErrorCount(self: *Compilation) u32 { // The "no entry point found" error only counts if there are no semantic analysis errors. if (total == 0) { - total += @boolToInt(self.link_error_flags.no_entry_point_found); + total += @intFromBool(self.link_error_flags.no_entry_point_found); } - total += @boolToInt(self.link_error_flags.missing_libc); + total += @intFromBool(self.link_error_flags.missing_libc); // Compile log errors only count if there are no other errors. if (total == 0) { if (self.bin_file.options.module) |module| { - total += @boolToInt(module.compile_log_decls.count() != 0); + total += @intFromBool(module.compile_log_decls.count() != 0); } } @@ -2604,7 +2604,7 @@ pub fn getAllErrorsAlloc(self: *Compilation) !ErrorBundle { }); const notes_start = try bundle.reserveNotes(notes_len); for (notes_start.., lld_error.context_lines) |note, context_line| { - bundle.extra.items[note] = @enumToInt(bundle.addErrorMessageAssumeCapacity(.{ + bundle.extra.items[note] = @intFromEnum(bundle.addErrorMessageAssumeCapacity(.{ .msg = try bundle.addString(context_line), })); } @@ -2697,10 +2697,10 @@ pub fn getAllErrorsAlloc(self: *Compilation) !ErrorBundle { .notes_len = 2, }); const notes_start = try bundle.reserveNotes(2); - bundle.extra.items[notes_start + 0] = @enumToInt(try bundle.addErrorMessage(.{ + bundle.extra.items[notes_start + 0] = @intFromEnum(try bundle.addErrorMessage(.{ .msg = try bundle.addString("run 'zig libc -h' to learn about libc installations"), })); - bundle.extra.items[notes_start + 1] = @enumToInt(try bundle.addErrorMessage(.{ + bundle.extra.items[notes_start + 1] = @intFromEnum(try bundle.addErrorMessage(.{ .msg = try bundle.addString("run 'zig targets' to see the targets for which zig can always provide libc"), })); } @@ -2895,7 +2895,7 @@ pub fn addModuleErrorMsg(mod: *Module, eb: *ErrorBundle.Wip, module_err_msg: Mod const notes_start = try eb.reserveNotes(notes_len); for (notes_start.., notes.keys()) |i, note| { - eb.extra.items[i] = @enumToInt(try eb.addErrorMessage(note)); + eb.extra.items[i] = @intFromEnum(try eb.addErrorMessage(note)); } } @@ -2903,7 +2903,7 @@ pub fn addZirErrorMessages(eb: *ErrorBundle.Wip, file: *Module.File) !void { assert(file.zir_loaded); assert(file.tree_loaded); assert(file.source_loaded); - const payload_index = file.zir.extra[@enumToInt(Zir.ExtraIndex.compile_errors)]; + const payload_index = file.zir.extra[@intFromEnum(Zir.ExtraIndex.compile_errors)]; assert(payload_index != 0); const gpa = eb.gpa; @@ -2963,7 +2963,7 @@ pub fn addZirErrorMessages(eb: *ErrorBundle.Wip, file: *Module.File) !void { const src_path = try file.fullPath(gpa); defer gpa.free(src_path); - eb.extra.items[note_i] = @enumToInt(try eb.addErrorMessage(.{ + eb.extra.items[note_i] = @intFromEnum(try eb.addErrorMessage(.{ .msg = try eb.addString(msg), .src_loc = try eb.addSourceLocation(.{ .src_path = try eb.addString(src_path), @@ -3466,7 +3466,7 @@ fn workerAstGenFile( // If we experience an error preemptively fetching the // file, just ignore it and let it happen again later during Sema. assert(file.zir_loaded); - const imports_index = file.zir.extra[@enumToInt(Zir.ExtraIndex.imports)]; + const imports_index = file.zir.extra[@intFromEnum(Zir.ExtraIndex.imports)]; if (imports_index != 0) { const extra = file.zir.extraData(Zir.Inst.Imports, imports_index); var import_i: u32 = 0; @@ -4239,10 +4239,10 @@ pub fn addCCArgs( } try argv.append(try std.fmt.allocPrint(arena, "-D_LIBCPP_ABI_VERSION={d}", .{ - @enumToInt(comp.libcxx_abi_version), + @intFromEnum(comp.libcxx_abi_version), })); try argv.append(try std.fmt.allocPrint(arena, "-D_LIBCPP_ABI_NAMESPACE=__{d}", .{ - @enumToInt(comp.libcxx_abi_version), + @intFromEnum(comp.libcxx_abi_version), })); } @@ -4307,7 +4307,7 @@ pub fn addCCArgs( if (feature.llvm_name) |llvm_name| { argv.appendSliceAssumeCapacity(&[_][]const u8{ "-Xclang", "-target-feature", "-Xclang" }); - const plus_or_minus = "-+"[@boolToInt(is_enabled)]; + const plus_or_minus = "-+"[@intFromBool(is_enabled)]; const arg = try std.fmt.allocPrint(arena, "{c}{s}", .{ plus_or_minus, llvm_name }); argv.appendAssumeCapacity(arg); } diff --git a/src/InternPool.zig b/src/InternPool.zig index 4da4790e2f..221b56b88a 100644 --- a/src/InternPool.zig +++ b/src/InternPool.zig @@ -80,7 +80,7 @@ const KeyAdapter = struct { pub fn eql(ctx: @This(), a: Key, b_void: void, b_map_index: usize) bool { _ = b_void; - return ctx.intern_pool.indexToKey(@intToEnum(Index, b_map_index)).eql(a, ctx.intern_pool); + return ctx.intern_pool.indexToKey(@enumFromInt(Index, b_map_index)).eql(a, ctx.intern_pool); } pub fn hash(ctx: @This(), a: Key) u32 { @@ -95,7 +95,7 @@ pub const OptionalMapIndex = enum(u32) { pub fn unwrap(oi: OptionalMapIndex) ?MapIndex { if (oi == .none) return null; - return @intToEnum(MapIndex, @enumToInt(oi)); + return @enumFromInt(MapIndex, @intFromEnum(oi)); } }; @@ -104,7 +104,7 @@ pub const MapIndex = enum(u32) { _, pub fn toOptional(i: MapIndex) OptionalMapIndex { - return @intToEnum(OptionalMapIndex, @enumToInt(i)); + return @enumFromInt(OptionalMapIndex, @intFromEnum(i)); } }; @@ -114,7 +114,7 @@ pub const RuntimeIndex = enum(u32) { _, pub fn increment(ri: *RuntimeIndex) void { - ri.* = @intToEnum(RuntimeIndex, @enumToInt(ri.*) + 1); + ri.* = @enumFromInt(RuntimeIndex, @intFromEnum(ri.*) + 1); } }; @@ -130,11 +130,11 @@ pub const NullTerminatedString = enum(u32) { _, pub fn toString(self: NullTerminatedString) String { - return @intToEnum(String, @enumToInt(self)); + return @enumFromInt(String, @intFromEnum(self)); } pub fn toOptional(self: NullTerminatedString) OptionalNullTerminatedString { - return @intToEnum(OptionalNullTerminatedString, @enumToInt(self)); + return @enumFromInt(OptionalNullTerminatedString, @intFromEnum(self)); } const Adapter = struct { @@ -147,14 +147,14 @@ pub const NullTerminatedString = enum(u32) { pub fn hash(ctx: @This(), a: NullTerminatedString) u32 { _ = ctx; - return std.hash.uint32(@enumToInt(a)); + return std.hash.uint32(@intFromEnum(a)); } }; /// Compare based on integer value alone, ignoring the string contents. pub fn indexLessThan(ctx: void, a: NullTerminatedString, b: NullTerminatedString) bool { _ = ctx; - return @enumToInt(a) < @enumToInt(b); + return @intFromEnum(a) < @intFromEnum(b); } pub fn toUnsigned(self: NullTerminatedString, ip: *const InternPool) ?u32 { @@ -196,7 +196,7 @@ pub const OptionalNullTerminatedString = enum(u32) { pub fn unwrap(oi: OptionalNullTerminatedString) ?NullTerminatedString { if (oi == .none) return null; - return @intToEnum(NullTerminatedString, @enumToInt(oi)); + return @enumFromInt(NullTerminatedString, @intFromEnum(oi)); } }; @@ -279,7 +279,7 @@ pub const Key = union(enum) { /// Look up field index based on field name. pub fn nameIndex(self: ErrorSetType, ip: *const InternPool, name: NullTerminatedString) ?u32 { - const map = &ip.maps.items[@enumToInt(self.names_map.unwrap().?)]; + const map = &ip.maps.items[@intFromEnum(self.names_map.unwrap().?)]; const adapter: NullTerminatedString.Adapter = .{ .strings = self.names }; const field_index = map.getIndexAdapted(name, adapter) orelse return null; return @intCast(u32, field_index); @@ -417,7 +417,7 @@ pub const Key = union(enum) { /// Look up field index based on field name. pub fn nameIndex(self: EnumType, ip: *const InternPool, name: NullTerminatedString) ?u32 { - const map = &ip.maps.items[@enumToInt(self.names_map.unwrap().?)]; + const map = &ip.maps.items[@intFromEnum(self.names_map.unwrap().?)]; const adapter: NullTerminatedString.Adapter = .{ .strings = self.names }; const field_index = map.getIndexAdapted(name, adapter) orelse return null; return @intCast(u32, field_index); @@ -437,7 +437,7 @@ pub const Key = union(enum) { else => unreachable, }; if (self.values_map.unwrap()) |values_map| { - const map = &ip.maps.items[@enumToInt(values_map)]; + const map = &ip.maps.items[@intFromEnum(values_map)]; const adapter: Index.Adapter = .{ .indexes = self.values }; const field_index = map.getIndexAdapted(int_tag_val, adapter) orelse return null; return @intCast(u32, field_index); @@ -691,7 +691,7 @@ pub const Key = union(enum) { pub fn hash64(key: Key, ip: *const InternPool) u64 { const asBytes = std.mem.asBytes; const KeyTag = @typeInfo(Key).Union.tag_type.?; - const seed = @enumToInt(@as(KeyTag, key)); + const seed = @intFromEnum(@as(KeyTag, key)); return switch (key) { // TODO: assert no padding in these types inline .ptr_type, @@ -714,8 +714,8 @@ pub const Key = union(enum) { .un, => |x| Hash.hash(seed, asBytes(&x)), - .int_type => |x| Hash.hash(seed + @enumToInt(x.signedness), asBytes(&x.bits)), - .union_type => |x| Hash.hash(seed + @enumToInt(x.runtime_tag), asBytes(&x.index)), + .int_type => |x| Hash.hash(seed + @intFromEnum(x.signedness), asBytes(&x.bits)), + .union_type => |x| Hash.hash(seed + @intFromEnum(x.runtime_tag), asBytes(&x.index)), .error_union => |x| switch (x.val) { .err_name => |y| Hash.hash(seed + 0, asBytes(&x.ty) ++ asBytes(&y)), @@ -777,7 +777,7 @@ pub const Key = union(enum) { // Int-to-ptr pointers are hashed separately than decl-referencing pointers. // This is sound due to pointer provenance rules. const addr: @typeInfo(Key.Ptr.Addr).Union.tag_type.? = ptr.addr; - const seed2 = seed + @enumToInt(addr); + const seed2 = seed + @intFromEnum(addr); const common = asBytes(&ptr.ty) ++ asBytes(&ptr.len); return switch (ptr.addr) { .decl => |x| Hash.hash(seed2, common ++ asBytes(&x)), @@ -1381,7 +1381,7 @@ pub const Index = enum(u32) { pub fn hash(ctx: @This(), a: Index) u32 { _ = ctx; - return std.hash.uint32(@enumToInt(a)); + return std.hash.uint32(@intFromEnum(a)); } }; @@ -2259,21 +2259,21 @@ pub const Alignment = enum(u6) { pub fn toByteUnitsOptional(a: Alignment) ?u64 { return switch (a) { .none => null, - _ => @as(u64, 1) << @enumToInt(a), + _ => @as(u64, 1) << @intFromEnum(a), }; } pub fn toByteUnits(a: Alignment, default: u64) u64 { return switch (a) { .none => default, - _ => @as(u64, 1) << @enumToInt(a), + _ => @as(u64, 1) << @intFromEnum(a), }; } pub fn fromByteUnits(n: u64) Alignment { if (n == 0) return .none; assert(std.math.isPowerOfTwo(n)); - return @intToEnum(Alignment, @ctz(n)); + return @enumFromInt(Alignment, @ctz(n)); } pub fn fromNonzeroByteUnits(n: u64) Alignment { @@ -2282,7 +2282,7 @@ pub const Alignment = enum(u6) { } pub fn min(a: Alignment, b: Alignment) Alignment { - return @intToEnum(Alignment, @min(@enumToInt(a), @enumToInt(b))); + return @enumFromInt(Alignment, @min(@intFromEnum(a), @intFromEnum(b))); } }; @@ -2509,10 +2509,10 @@ pub fn init(ip: *InternPool, gpa: Allocator) !void { const cc_c = ip.indexToKey(.calling_convention_c).enum_tag.int; assert(ip.indexToKey(cc_inline).int.storage.u64 == - @enumToInt(std.builtin.CallingConvention.Inline)); + @intFromEnum(std.builtin.CallingConvention.Inline)); assert(ip.indexToKey(cc_c).int.storage.u64 == - @enumToInt(std.builtin.CallingConvention.C)); + @intFromEnum(std.builtin.CallingConvention.C)); assert(ip.indexToKey(ip.typeOf(cc_inline)).int_type.bits == @typeInfo(@typeInfo(std.builtin.CallingConvention).Enum.tag_type).Int.bits); @@ -2550,7 +2550,7 @@ pub fn deinit(ip: *InternPool, gpa: Allocator) void { pub fn indexToKey(ip: *const InternPool, index: Index) Key { assert(index != .none); - const item = ip.items.get(@enumToInt(index)); + const item = ip.items.get(@intFromEnum(index)); const data = item.data; return switch (item.tag) { .type_int_signed => .{ @@ -2581,8 +2581,8 @@ pub fn indexToKey(ip: *const InternPool, index: Index) Key { .sentinel = .none, } }; }, - .simple_type => .{ .simple_type = @intToEnum(SimpleType, data) }, - .simple_value => .{ .simple_value = @intToEnum(SimpleValue, data) }, + .simple_type => .{ .simple_type = @enumFromInt(SimpleType, data) }, + .simple_value => .{ .simple_value = @enumFromInt(SimpleValue, data) }, .type_vector => { const vector_info = ip.extraData(Vector, data); @@ -2601,8 +2601,8 @@ pub fn indexToKey(ip: *const InternPool, index: Index) Key { return .{ .ptr_type = ptr_info }; }, - .type_optional => .{ .opt_type = @intToEnum(Index, data) }, - .type_anyframe => .{ .anyframe_type = @intToEnum(Index, data) }, + .type_optional => .{ .opt_type = @enumFromInt(Index, data) }, + .type_anyframe => .{ .anyframe_type = @enumFromInt(Index, data) }, .type_error_union => .{ .error_union_type = ip.extraData(Key.ErrorUnionType, data) }, .type_error_set => { @@ -2615,12 +2615,12 @@ pub fn indexToKey(ip: *const InternPool, index: Index) Key { } }; }, .type_inferred_error_set => .{ - .inferred_error_set_type = @intToEnum(Module.Fn.InferredErrorSet.Index, data), + .inferred_error_set_type = @enumFromInt(Module.Fn.InferredErrorSet.Index, data), }, .type_opaque => .{ .opaque_type = ip.extraData(Key.OpaqueType, data) }, .type_struct => { - const struct_index = @intToEnum(Module.Struct.OptionalIndex, data); + const struct_index = @enumFromInt(Module.Struct.OptionalIndex, data); const namespace = if (struct_index.unwrap()) |i| ip.structPtrConst(i).namespace.toOptional() else @@ -2632,7 +2632,7 @@ pub fn indexToKey(ip: *const InternPool, index: Index) Key { }, .type_struct_ns => .{ .struct_type = .{ .index = .none, - .namespace = @intToEnum(Module.Namespace.Index, data).toOptional(), + .namespace = @enumFromInt(Module.Namespace.Index, data).toOptional(), } }, .type_struct_anon => { @@ -2660,15 +2660,15 @@ pub fn indexToKey(ip: *const InternPool, index: Index) Key { }, .type_union_untagged => .{ .union_type = .{ - .index = @intToEnum(Module.Union.Index, data), + .index = @enumFromInt(Module.Union.Index, data), .runtime_tag = .none, } }, .type_union_tagged => .{ .union_type = .{ - .index = @intToEnum(Module.Union.Index, data), + .index = @enumFromInt(Module.Union.Index, data), .runtime_tag = .tagged, } }, .type_union_safety => .{ .union_type = .{ - .index = @intToEnum(Module.Union.Index, data), + .index = @enumFromInt(Module.Union.Index, data), .runtime_tag = .safety, } }, @@ -2693,10 +2693,10 @@ pub fn indexToKey(ip: *const InternPool, index: Index) Key { .type_enum_nonexhaustive => ip.indexToKeyEnum(data, .nonexhaustive), .type_function => .{ .func_type = ip.indexToKeyFuncType(data) }, - .undef => .{ .undef = @intToEnum(Index, data) }, + .undef => .{ .undef = @enumFromInt(Index, data) }, .runtime_value => .{ .runtime_value = ip.extraData(Tag.TypeValue, data) }, .opt_null => .{ .opt = .{ - .ty = @intToEnum(Index, data), + .ty = @enumFromInt(Index, data), .val = .none, } }, .opt_payload => { @@ -2754,7 +2754,7 @@ pub fn indexToKey(ip: *const InternPool, index: Index) Key { .ptr_elem => { // Avoid `indexToKey` recursion by asserting the tag encoding. const info = ip.extraData(PtrBaseIndex, data); - const index_item = ip.items.get(@enumToInt(info.index)); + const index_item = ip.items.get(@intFromEnum(info.index)); return switch (index_item.tag) { .int_usize => .{ .ptr = .{ .ty = info.ty, @@ -2770,7 +2770,7 @@ pub fn indexToKey(ip: *const InternPool, index: Index) Key { .ptr_field => { // Avoid `indexToKey` recursion by asserting the tag encoding. const info = ip.extraData(PtrBaseIndex, data); - const index_item = ip.items.get(@enumToInt(info.index)); + const index_item = ip.items.get(@intFromEnum(info.index)); return switch (index_item.tag) { .int_usize => .{ .ptr = .{ .ty = info.ty, @@ -2785,7 +2785,7 @@ pub fn indexToKey(ip: *const InternPool, index: Index) Key { }, .ptr_slice => { const info = ip.extraData(PtrSlice, data); - const ptr_item = ip.items.get(@enumToInt(info.ptr)); + const ptr_item = ip.items.get(@intFromEnum(info.ptr)); return .{ .ptr = .{ .ty = info.ty, @@ -2815,7 +2815,7 @@ pub fn indexToKey(ip: *const InternPool, index: Index) Key { .ptr_elem => b: { // Avoid `indexToKey` recursion by asserting the tag encoding. const sub_info = ip.extraData(PtrBaseIndex, ptr_item.data); - const index_item = ip.items.get(@enumToInt(sub_info.index)); + const index_item = ip.items.get(@intFromEnum(sub_info.index)); break :b switch (index_item.tag) { .int_usize => .{ .elem = .{ .base = sub_info.base, @@ -2828,7 +2828,7 @@ pub fn indexToKey(ip: *const InternPool, index: Index) Key { .ptr_field => b: { // Avoid `indexToKey` recursion by asserting the tag encoding. const sub_info = ip.extraData(PtrBaseIndex, ptr_item.data); - const index_item = ip.items.get(@enumToInt(sub_info.index)); + const index_item = ip.items.get(@intFromEnum(sub_info.index)); break :b switch (index_item.tag) { .int_usize => .{ .field = .{ .base = sub_info.base, @@ -2940,8 +2940,8 @@ pub fn indexToKey(ip: *const InternPool, index: Index) Key { .extern_func => .{ .extern_func = ip.extraData(Tag.ExternFunc, data) }, .func => .{ .func = ip.extraData(Tag.Func, data) }, .only_possible_value => { - const ty = @intToEnum(Index, data); - const ty_item = ip.items.get(@enumToInt(ty)); + const ty = @enumFromInt(Index, data); + const ty_item = ip.items.get(@intFromEnum(ty)); return switch (ty_item.tag) { .type_array_big => { const sentinel = @ptrCast( @@ -2950,7 +2950,7 @@ pub fn indexToKey(ip: *const InternPool, index: Index) Key { ); return .{ .aggregate = .{ .ty = ty, - .storage = .{ .elems = sentinel[0..@boolToInt(sentinel[0] != .none)] }, + .storage = .{ .elems = sentinel[0..@intFromBool(sentinel[0] != .none)] }, } }; }, .type_array_small, .type_vector => .{ .aggregate = .{ @@ -2994,7 +2994,7 @@ pub fn indexToKey(ip: *const InternPool, index: Index) Key { const len = @intCast(u32, ip.aggregateTypeLenIncludingSentinel(extra.ty)); return .{ .aggregate = .{ .ty = extra.ty, - .storage = .{ .bytes = ip.string_bytes.items[@enumToInt(extra.bytes)..][0..len] }, + .storage = .{ .bytes = ip.string_bytes.items[@intFromEnum(extra.bytes)..][0..len] }, } }; }, .aggregate => { @@ -3029,7 +3029,7 @@ pub fn indexToKey(ip: *const InternPool, index: Index) Key { .val = .{ .payload = extra.val }, } }; }, - .enum_literal => .{ .enum_literal = @intToEnum(NullTerminatedString, data) }, + .enum_literal => .{ .enum_literal = @enumFromInt(NullTerminatedString, data) }, .enum_tag => .{ .enum_tag = ip.extraData(Tag.EnumTag, data) }, .memoized_call => { @@ -3103,7 +3103,7 @@ fn indexToKeyBigInt(ip: *const InternPool, limb_index: u32, positive: bool) Key pub fn get(ip: *InternPool, gpa: Allocator, key: Key) Allocator.Error!Index { const adapter: KeyAdapter = .{ .intern_pool = ip }; const gop = try ip.map.getOrPutAdapted(gpa, key, adapter); - if (gop.found_existing) return @intToEnum(Index, gop.index); + if (gop.found_existing) return @enumFromInt(Index, gop.index); try ip.items.ensureUnusedCapacity(gpa, 1); switch (key) { .int_type => |int_type| { @@ -3129,9 +3129,9 @@ pub fn get(ip: *InternPool, gpa: Allocator, key: Key) Allocator.Error!Index { try ip.items.ensureUnusedCapacity(gpa, 1); ip.items.appendAssumeCapacity(.{ .tag = .type_slice, - .data = @enumToInt(ptr_type_index), + .data = @intFromEnum(ptr_type_index), }); - return @intToEnum(Index, ip.items.len - 1); + return @enumFromInt(Index, ip.items.len - 1); } var ptr_type_adjusted = ptr_type; @@ -3155,7 +3155,7 @@ pub fn get(ip: *InternPool, gpa: Allocator, key: Key) Allocator.Error!Index { .child = array_type.child, }), }); - return @intToEnum(Index, ip.items.len - 1); + return @enumFromInt(Index, ip.items.len - 1); } } @@ -3183,14 +3183,14 @@ pub fn get(ip: *InternPool, gpa: Allocator, key: Key) Allocator.Error!Index { assert(payload_type != .none); ip.items.appendAssumeCapacity(.{ .tag = .type_optional, - .data = @enumToInt(payload_type), + .data = @intFromEnum(payload_type), }); }, .anyframe_type => |payload_type| { // payload_type might be none, indicating the type is `anyframe`. ip.items.appendAssumeCapacity(.{ .tag = .type_anyframe, - .data = @enumToInt(payload_type), + .data = @intFromEnum(payload_type), }); }, .error_union_type => |error_union_type| { @@ -3218,26 +3218,26 @@ pub fn get(ip: *InternPool, gpa: Allocator, key: Key) Allocator.Error!Index { .inferred_error_set_type => |ies_index| { ip.items.appendAssumeCapacity(.{ .tag = .type_inferred_error_set, - .data = @enumToInt(ies_index), + .data = @intFromEnum(ies_index), }); }, .simple_type => |simple_type| { ip.items.appendAssumeCapacity(.{ .tag = .simple_type, - .data = @enumToInt(simple_type), + .data = @intFromEnum(simple_type), }); }, .simple_value => |simple_value| { ip.items.appendAssumeCapacity(.{ .tag = .simple_value, - .data = @enumToInt(simple_value), + .data = @intFromEnum(simple_value), }); }, .undef => |ty| { assert(ty != .none); ip.items.appendAssumeCapacity(.{ .tag = .undef, - .data = @enumToInt(ty), + .data = @intFromEnum(ty), }); }, .runtime_value => |runtime_value| { @@ -3251,13 +3251,13 @@ pub fn get(ip: *InternPool, gpa: Allocator, key: Key) Allocator.Error!Index { .struct_type => |struct_type| { ip.items.appendAssumeCapacity(if (struct_type.index.unwrap()) |i| .{ .tag = .type_struct, - .data = @enumToInt(i), + .data = @intFromEnum(i), } else if (struct_type.namespace.unwrap()) |i| .{ .tag = .type_struct_ns, - .data = @enumToInt(i), + .data = @intFromEnum(i), } else .{ .tag = .type_struct, - .data = @enumToInt(Module.Struct.OptionalIndex.none), + .data = @intFromEnum(Module.Struct.OptionalIndex.none), }); }, @@ -3279,7 +3279,7 @@ pub fn get(ip: *InternPool, gpa: Allocator, key: Key) Allocator.Error!Index { }); ip.extra.appendSliceAssumeCapacity(@ptrCast([]const u32, anon_struct_type.types)); ip.extra.appendSliceAssumeCapacity(@ptrCast([]const u32, anon_struct_type.values)); - return @intToEnum(Index, ip.items.len - 1); + return @enumFromInt(Index, ip.items.len - 1); } assert(anon_struct_type.names.len == anon_struct_type.types.len); @@ -3297,7 +3297,7 @@ pub fn get(ip: *InternPool, gpa: Allocator, key: Key) Allocator.Error!Index { ip.extra.appendSliceAssumeCapacity(@ptrCast([]const u32, anon_struct_type.types)); ip.extra.appendSliceAssumeCapacity(@ptrCast([]const u32, anon_struct_type.values)); ip.extra.appendSliceAssumeCapacity(@ptrCast([]const u32, anon_struct_type.names)); - return @intToEnum(Index, ip.items.len - 1); + return @enumFromInt(Index, ip.items.len - 1); }, .union_type => |union_type| { @@ -3307,7 +3307,7 @@ pub fn get(ip: *InternPool, gpa: Allocator, key: Key) Allocator.Error!Index { .safety => .type_union_safety, .tagged => .type_union_tagged, }, - .data = @enumToInt(union_type.index), + .data = @intFromEnum(union_type.index), }); }, @@ -3343,7 +3343,7 @@ pub fn get(ip: *InternPool, gpa: Allocator, key: Key) Allocator.Error!Index { }), }); ip.extra.appendSliceAssumeCapacity(@ptrCast([]const u32, enum_type.names)); - return @intToEnum(Index, ip.items.len - 1); + return @enumFromInt(Index, ip.items.len - 1); }, .explicit => return finishGetEnum(ip, gpa, enum_type, .type_enum_explicit), .nonexhaustive => return finishGetEnum(ip, gpa, enum_type, .type_enum_nonexhaustive), @@ -3540,7 +3540,7 @@ pub fn get(ip: *InternPool, gpa: Allocator, key: Key) Allocator.Error!Index { }); }, } - assert(ptr.ty == ip.indexToKey(@intToEnum(Index, ip.items.len - 1)).ptr.ty); + assert(ptr.ty == ip.indexToKey(@enumFromInt(Index, ip.items.len - 1)).ptr.ty); }, .opt => |opt| { @@ -3548,7 +3548,7 @@ pub fn get(ip: *InternPool, gpa: Allocator, key: Key) Allocator.Error!Index { assert(opt.val == .none or ip.indexToKey(opt.ty).opt_type == ip.typeOf(opt.val)); ip.items.appendAssumeCapacity(if (opt.val == .none) .{ .tag = .opt_null, - .data = @enumToInt(opt.ty), + .data = @intFromEnum(opt.ty), } else .{ .tag = .opt_payload, .data = try ip.addExtra(gpa, Tag.TypeValue{ @@ -3574,7 +3574,7 @@ pub fn get(ip: *InternPool, gpa: Allocator, key: Key) Allocator.Error!Index { .lazy_ty = lazy_ty, }), }); - return @intToEnum(Index, ip.items.len - 1); + return @enumFromInt(Index, ip.items.len - 1); }, } switch (int.ty) { @@ -3715,7 +3715,7 @@ pub fn get(ip: *InternPool, gpa: Allocator, key: Key) Allocator.Error!Index { .value = casted, }), }); - return @intToEnum(Index, ip.items.len - 1); + return @enumFromInt(Index, ip.items.len - 1); } else |_| {} const tag: Tag = if (big_int.positive) .int_positive else .int_negative; @@ -3730,7 +3730,7 @@ pub fn get(ip: *InternPool, gpa: Allocator, key: Key) Allocator.Error!Index { .value = casted, }), }); - return @intToEnum(Index, ip.items.len - 1); + return @enumFromInt(Index, ip.items.len - 1); } var buf: [2]Limb = undefined; @@ -3772,7 +3772,7 @@ pub fn get(ip: *InternPool, gpa: Allocator, key: Key) Allocator.Error!Index { .enum_literal => |enum_literal| ip.items.appendAssumeCapacity(.{ .tag = .enum_literal, - .data = @enumToInt(enum_literal), + .data = @intFromEnum(enum_literal), }), .enum_tag => |enum_tag| { @@ -3790,7 +3790,7 @@ pub fn get(ip: *InternPool, gpa: Allocator, key: Key) Allocator.Error!Index { .empty_enum_value => |enum_or_union_ty| ip.items.appendAssumeCapacity(.{ .tag = .only_possible_value, - .data = @enumToInt(enum_or_union_ty), + .data = @intFromEnum(enum_or_union_ty), }), .float => |float| { @@ -3847,7 +3847,7 @@ pub fn get(ip: *InternPool, gpa: Allocator, key: Key) Allocator.Error!Index { .vector_type, .anon_struct_type, .struct_type => .none, else => unreachable, }; - const len_including_sentinel = len + @boolToInt(sentinel != .none); + const len_including_sentinel = len + @intFromBool(sentinel != .none); switch (aggregate.storage) { .bytes => |bytes| { assert(child == .u8_type); @@ -3891,9 +3891,9 @@ pub fn get(ip: *InternPool, gpa: Allocator, key: Key) Allocator.Error!Index { if (len == 0) { ip.items.appendAssumeCapacity(.{ .tag = .only_possible_value, - .data = @enumToInt(aggregate.ty), + .data = @intFromEnum(aggregate.ty), }); - return @intToEnum(Index, ip.items.len - 1); + return @enumFromInt(Index, ip.items.len - 1); } switch (ty_key) { @@ -3919,9 +3919,9 @@ pub fn get(ip: *InternPool, gpa: Allocator, key: Key) Allocator.Error!Index { // in the aggregate fields. ip.items.appendAssumeCapacity(.{ .tag = .only_possible_value, - .data = @enumToInt(aggregate.ty), + .data = @intFromEnum(aggregate.ty), }); - return @intToEnum(Index, ip.items.len - 1); + return @enumFromInt(Index, ip.items.len - 1); }, else => {}, } @@ -3960,7 +3960,7 @@ pub fn get(ip: *InternPool, gpa: Allocator, key: Key) Allocator.Error!Index { .elem_val = elem, }), }); - return @intToEnum(Index, ip.items.len - 1); + return @enumFromInt(Index, ip.items.len - 1); } if (child == .u8_type) bytes: { @@ -3994,7 +3994,7 @@ pub fn get(ip: *InternPool, gpa: Allocator, key: Key) Allocator.Error!Index { @intCast(u8, ip.indexToKey(sentinel).int.storage.u64), ); const string = if (has_internal_null) - @intToEnum(String, string_bytes_index) + @enumFromInt(String, string_bytes_index) else (try ip.getOrPutTrailingString(gpa, @intCast(usize, len_including_sentinel))).toString(); ip.items.appendAssumeCapacity(.{ @@ -4004,7 +4004,7 @@ pub fn get(ip: *InternPool, gpa: Allocator, key: Key) Allocator.Error!Index { .bytes = string, }), }); - return @intToEnum(Index, ip.items.len - 1); + return @enumFromInt(Index, ip.items.len - 1); } try ip.extra.ensureUnusedCapacity( @@ -4018,7 +4018,7 @@ pub fn get(ip: *InternPool, gpa: Allocator, key: Key) Allocator.Error!Index { }), }); ip.extra.appendSliceAssumeCapacity(@ptrCast([]const u32, aggregate.storage.elems)); - if (sentinel != .none) ip.extra.appendAssumeCapacity(@enumToInt(sentinel)); + if (sentinel != .none) ip.extra.appendAssumeCapacity(@intFromEnum(sentinel)); }, .un => |un| { @@ -4046,7 +4046,7 @@ pub fn get(ip: *InternPool, gpa: Allocator, key: Key) Allocator.Error!Index { ip.extra.appendSliceAssumeCapacity(@ptrCast([]const u32, memoized_call.arg_values)); }, } - return @intToEnum(Index, ip.items.len - 1); + return @enumFromInt(Index, ip.items.len - 1); } /// Provides API for completing an enum type after calling `getIncompleteEnum`. @@ -4060,7 +4060,7 @@ pub const IncompleteEnumType = struct { pub fn setTagType(self: @This(), ip: *InternPool, tag_ty: Index) void { assert(tag_ty == .noreturn_type or ip.isIntegerType(tag_ty)); - ip.extra.items[self.tag_ty_index] = @enumToInt(tag_ty); + ip.extra.items[self.tag_ty_index] = @intFromEnum(tag_ty); } /// Returns the already-existing field with the same name, if any. @@ -4070,7 +4070,7 @@ pub const IncompleteEnumType = struct { gpa: Allocator, name: NullTerminatedString, ) Allocator.Error!?u32 { - const map = &ip.maps.items[@enumToInt(self.names_map)]; + const map = &ip.maps.items[@intFromEnum(self.names_map)]; const field_index = map.count(); const strings = ip.extra.items[self.names_start..][0..field_index]; const adapter: NullTerminatedString.Adapter = .{ @@ -4078,7 +4078,7 @@ pub const IncompleteEnumType = struct { }; const gop = try map.getOrPutAdapted(gpa, name, adapter); if (gop.found_existing) return @intCast(u32, gop.index); - ip.extra.items[self.names_start + field_index] = @enumToInt(name); + ip.extra.items[self.names_start + field_index] = @intFromEnum(name); return null; } @@ -4090,8 +4090,8 @@ pub const IncompleteEnumType = struct { gpa: Allocator, value: Index, ) Allocator.Error!?u32 { - assert(ip.typeOf(value) == @intToEnum(Index, ip.extra.items[self.tag_ty_index])); - const map = &ip.maps.items[@enumToInt(self.values_map.unwrap().?)]; + assert(ip.typeOf(value) == @enumFromInt(Index, ip.extra.items[self.tag_ty_index])); + const map = &ip.maps.items[@intFromEnum(self.values_map.unwrap().?)]; const field_index = map.count(); const indexes = ip.extra.items[self.values_start..][0..field_index]; const adapter: Index.Adapter = .{ @@ -4099,7 +4099,7 @@ pub const IncompleteEnumType = struct { }; const gop = try map.getOrPutAdapted(gpa, value, adapter); if (gop.found_existing) return @intCast(u32, gop.index); - ip.extra.items[self.values_start + field_index] = @enumToInt(value); + ip.extra.items[self.values_start + field_index] = @intFromEnum(value); return null; } }; @@ -4156,9 +4156,9 @@ fn getIncompleteEnumAuto( .tag = .type_enum_auto, .data = extra_index, }); - ip.extra.appendNTimesAssumeCapacity(@enumToInt(Index.none), enum_type.fields_len); + ip.extra.appendNTimesAssumeCapacity(@intFromEnum(Index.none), enum_type.fields_len); return .{ - .index = @intToEnum(Index, ip.items.len - 1), + .index = @enumFromInt(Index, ip.items.len - 1), .tag_ty_index = extra_index + std.meta.fieldIndex(EnumAuto, "int_tag_type").?, .names_map = names_map, .names_start = extra_index + extra_fields_len, @@ -4207,9 +4207,9 @@ fn getIncompleteEnumExplicit( .data = extra_index, }); // This is both fields and values (if present). - ip.extra.appendNTimesAssumeCapacity(@enumToInt(Index.none), reserved_len); + ip.extra.appendNTimesAssumeCapacity(@intFromEnum(Index.none), reserved_len); return .{ - .index = @intToEnum(Index, ip.items.len - 1), + .index = @enumFromInt(Index, ip.items.len - 1), .tag_ty_index = extra_index + std.meta.fieldIndex(EnumExplicit, "int_tag_type").?, .names_map = names_map, .names_start = extra_index + extra_fields_len, @@ -4248,13 +4248,13 @@ pub fn finishGetEnum( }); ip.extra.appendSliceAssumeCapacity(@ptrCast([]const u32, enum_type.names)); ip.extra.appendSliceAssumeCapacity(@ptrCast([]const u32, enum_type.values)); - return @intToEnum(Index, ip.items.len - 1); + return @enumFromInt(Index, ip.items.len - 1); } pub fn getIfExists(ip: *const InternPool, key: Key) ?Index { const adapter: KeyAdapter = .{ .intern_pool = ip }; const index = ip.map.getIndexAdapted(key, adapter) orelse return null; - return @intToEnum(Index, index); + return @enumFromInt(Index, index); } pub fn getAssumeExists(ip: *const InternPool, key: Key) Index { @@ -4267,7 +4267,7 @@ fn addStringsToMap( map_index: MapIndex, strings: []const NullTerminatedString, ) Allocator.Error!void { - const map = &ip.maps.items[@enumToInt(map_index)]; + const map = &ip.maps.items[@intFromEnum(map_index)]; const adapter: NullTerminatedString.Adapter = .{ .strings = strings }; for (strings) |string| { const gop = try map.getOrPutAdapted(gpa, string, adapter); @@ -4281,7 +4281,7 @@ fn addIndexesToMap( map_index: MapIndex, indexes: []const Index, ) Allocator.Error!void { - const map = &ip.maps.items[@enumToInt(map_index)]; + const map = &ip.maps.items[@intFromEnum(map_index)]; const adapter: Index.Adapter = .{ .indexes = indexes }; for (indexes) |index| { const gop = try map.getOrPutAdapted(gpa, index, adapter); @@ -4292,7 +4292,7 @@ fn addIndexesToMap( fn addMap(ip: *InternPool, gpa: Allocator) Allocator.Error!MapIndex { const ptr = try ip.maps.addOne(gpa); ptr.* = .{}; - return @intToEnum(MapIndex, ip.maps.items.len - 1); + return @enumFromInt(MapIndex, ip.maps.items.len - 1); } /// This operation only happens under compile error conditions. @@ -4324,22 +4324,22 @@ fn addExtraAssumeCapacity(ip: *InternPool, extra: anytype) u32 { inline for (@typeInfo(@TypeOf(extra)).Struct.fields) |field| { ip.extra.appendAssumeCapacity(switch (field.type) { u32 => @field(extra, field.name), - Index => @enumToInt(@field(extra, field.name)), - Module.Decl.Index => @enumToInt(@field(extra, field.name)), - Module.Namespace.Index => @enumToInt(@field(extra, field.name)), - Module.Namespace.OptionalIndex => @enumToInt(@field(extra, field.name)), - Module.Fn.Index => @enumToInt(@field(extra, field.name)), - MapIndex => @enumToInt(@field(extra, field.name)), - OptionalMapIndex => @enumToInt(@field(extra, field.name)), - RuntimeIndex => @enumToInt(@field(extra, field.name)), - String => @enumToInt(@field(extra, field.name)), - NullTerminatedString => @enumToInt(@field(extra, field.name)), - OptionalNullTerminatedString => @enumToInt(@field(extra, field.name)), + Index => @intFromEnum(@field(extra, field.name)), + Module.Decl.Index => @intFromEnum(@field(extra, field.name)), + Module.Namespace.Index => @intFromEnum(@field(extra, field.name)), + Module.Namespace.OptionalIndex => @intFromEnum(@field(extra, field.name)), + Module.Fn.Index => @intFromEnum(@field(extra, field.name)), + MapIndex => @intFromEnum(@field(extra, field.name)), + OptionalMapIndex => @intFromEnum(@field(extra, field.name)), + RuntimeIndex => @intFromEnum(@field(extra, field.name)), + String => @intFromEnum(@field(extra, field.name)), + NullTerminatedString => @intFromEnum(@field(extra, field.name)), + OptionalNullTerminatedString => @intFromEnum(@field(extra, field.name)), i32 => @bitCast(u32, @field(extra, field.name)), Tag.TypePointer.Flags => @bitCast(u32, @field(extra, field.name)), TypeFunction.Flags => @bitCast(u32, @field(extra, field.name)), Tag.TypePointer.PackedOffset => @bitCast(u32, @field(extra, field.name)), - Tag.TypePointer.VectorIndex => @enumToInt(@field(extra, field.name)), + Tag.TypePointer.VectorIndex => @intFromEnum(@field(extra, field.name)), Tag.Variable.Flags => @bitCast(u32, @field(extra, field.name)), else => @compileError("bad field type: " ++ @typeName(field.type)), }); @@ -4365,7 +4365,7 @@ fn addLimbsExtraAssumeCapacity(ip: *InternPool, extra: anytype) u32 { inline for (@typeInfo(@TypeOf(extra)).Struct.fields, 0..) |field, i| { const new: u32 = switch (field.type) { u32 => @field(extra, field.name), - Index => @enumToInt(@field(extra, field.name)), + Index => @intFromEnum(@field(extra, field.name)), else => @compileError("bad field type: " ++ @typeName(field.type)), }; if (i % 2 == 0) { @@ -4392,22 +4392,22 @@ fn extraDataTrail(ip: *const InternPool, comptime T: type, index: usize) struct const int32 = ip.extra.items[i + index]; @field(result, field.name) = switch (field.type) { u32 => int32, - Index => @intToEnum(Index, int32), - Module.Decl.Index => @intToEnum(Module.Decl.Index, int32), - Module.Namespace.Index => @intToEnum(Module.Namespace.Index, int32), - Module.Namespace.OptionalIndex => @intToEnum(Module.Namespace.OptionalIndex, int32), - Module.Fn.Index => @intToEnum(Module.Fn.Index, int32), - MapIndex => @intToEnum(MapIndex, int32), - OptionalMapIndex => @intToEnum(OptionalMapIndex, int32), - RuntimeIndex => @intToEnum(RuntimeIndex, int32), - String => @intToEnum(String, int32), - NullTerminatedString => @intToEnum(NullTerminatedString, int32), - OptionalNullTerminatedString => @intToEnum(OptionalNullTerminatedString, int32), + Index => @enumFromInt(Index, int32), + Module.Decl.Index => @enumFromInt(Module.Decl.Index, int32), + Module.Namespace.Index => @enumFromInt(Module.Namespace.Index, int32), + Module.Namespace.OptionalIndex => @enumFromInt(Module.Namespace.OptionalIndex, int32), + Module.Fn.Index => @enumFromInt(Module.Fn.Index, int32), + MapIndex => @enumFromInt(MapIndex, int32), + OptionalMapIndex => @enumFromInt(OptionalMapIndex, int32), + RuntimeIndex => @enumFromInt(RuntimeIndex, int32), + String => @enumFromInt(String, int32), + NullTerminatedString => @enumFromInt(NullTerminatedString, int32), + OptionalNullTerminatedString => @enumFromInt(OptionalNullTerminatedString, int32), i32 => @bitCast(i32, int32), Tag.TypePointer.Flags => @bitCast(Tag.TypePointer.Flags, int32), TypeFunction.Flags => @bitCast(TypeFunction.Flags, int32), Tag.TypePointer.PackedOffset => @bitCast(Tag.TypePointer.PackedOffset, int32), - Tag.TypePointer.VectorIndex => @intToEnum(Tag.TypePointer.VectorIndex, int32), + Tag.TypePointer.VectorIndex => @enumFromInt(Tag.TypePointer.VectorIndex, int32), Tag.Variable.Flags => @bitCast(Tag.Variable.Flags, int32), else => @compileError("bad field type: " ++ @typeName(field.type)), }; @@ -4439,7 +4439,7 @@ fn limbData(ip: *const InternPool, comptime T: type, index: usize) T { @field(result, field.name) = switch (field.type) { u32 => int32, - Index => @intToEnum(Index, int32), + Index => @enumFromInt(Index, int32), else => @compileError("bad field type: " ++ @typeName(field.type)), }; } @@ -4475,7 +4475,7 @@ fn limbsSliceToIndex(ip: *const InternPool, limbs: []const Limb) LimbsAsIndexes }; // TODO: https://github.com/ziglang/zig/issues/1738 return .{ - .start = @intCast(u32, @divExact(@ptrToInt(limbs.ptr) - @ptrToInt(host_slice.ptr), @sizeOf(Limb))), + .start = @intCast(u32, @divExact(@intFromPtr(limbs.ptr) - @intFromPtr(host_slice.ptr), @sizeOf(Limb))), .len = @intCast(u32, limbs.len), }; } @@ -4536,16 +4536,16 @@ pub fn slicePtrType(ip: *const InternPool, i: Index) Index { .slice_const_u8_sentinel_0_type => return .manyptr_const_u8_sentinel_0_type, else => {}, } - const item = ip.items.get(@enumToInt(i)); + const item = ip.items.get(@intFromEnum(i)); switch (item.tag) { - .type_slice => return @intToEnum(Index, item.data), + .type_slice => return @enumFromInt(Index, item.data), else => unreachable, // not a slice type } } /// Given a slice value, returns the value of the ptr field. pub fn slicePtr(ip: *const InternPool, i: Index) Index { - const item = ip.items.get(@enumToInt(i)); + const item = ip.items.get(@intFromEnum(i)); switch (item.tag) { .ptr_slice => return ip.extraData(PtrSlice, item.data).ptr, else => unreachable, // not a slice value @@ -4554,7 +4554,7 @@ pub fn slicePtr(ip: *const InternPool, i: Index) Index { /// Given a slice value, returns the value of the len field. pub fn sliceLen(ip: *const InternPool, i: Index) Index { - const item = ip.items.get(@enumToInt(i)); + const item = ip.items.get(@intFromEnum(i)); switch (item.tag) { .ptr_slice => return ip.extraData(PtrSlice, item.data).len, else => unreachable, // not a slice value @@ -4841,28 +4841,28 @@ pub fn getCoercedInts(ip: *InternPool, gpa: Allocator, int: Key.Int, new_ty: Ind pub fn indexToStructType(ip: *const InternPool, val: Index) Module.Struct.OptionalIndex { assert(val != .none); const tags = ip.items.items(.tag); - if (tags[@enumToInt(val)] != .type_struct) return .none; + if (tags[@intFromEnum(val)] != .type_struct) return .none; const datas = ip.items.items(.data); - return @intToEnum(Module.Struct.Index, datas[@enumToInt(val)]).toOptional(); + return @enumFromInt(Module.Struct.Index, datas[@intFromEnum(val)]).toOptional(); } pub fn indexToUnionType(ip: *const InternPool, val: Index) Module.Union.OptionalIndex { assert(val != .none); const tags = ip.items.items(.tag); - switch (tags[@enumToInt(val)]) { + switch (tags[@intFromEnum(val)]) { .type_union_tagged, .type_union_untagged, .type_union_safety => {}, else => return .none, } const datas = ip.items.items(.data); - return @intToEnum(Module.Union.Index, datas[@enumToInt(val)]).toOptional(); + return @enumFromInt(Module.Union.Index, datas[@intFromEnum(val)]).toOptional(); } pub fn indexToFuncType(ip: *const InternPool, val: Index) ?Key.FuncType { assert(val != .none); const tags = ip.items.items(.tag); const datas = ip.items.items(.data); - switch (tags[@enumToInt(val)]) { - .type_function => return indexToKeyFuncType(ip, datas[@enumToInt(val)]), + switch (tags[@intFromEnum(val)]) { + .type_function => return indexToKeyFuncType(ip, datas[@intFromEnum(val)]), else => return null, } } @@ -4870,17 +4870,17 @@ pub fn indexToFuncType(ip: *const InternPool, val: Index) ?Key.FuncType { pub fn indexToFunc(ip: *const InternPool, val: Index) Module.Fn.OptionalIndex { assert(val != .none); const tags = ip.items.items(.tag); - if (tags[@enumToInt(val)] != .func) return .none; + if (tags[@intFromEnum(val)] != .func) return .none; const datas = ip.items.items(.data); - return ip.extraData(Tag.Func, datas[@enumToInt(val)]).index.toOptional(); + return ip.extraData(Tag.Func, datas[@intFromEnum(val)]).index.toOptional(); } pub fn indexToInferredErrorSetType(ip: *const InternPool, val: Index) Module.Fn.InferredErrorSet.OptionalIndex { assert(val != .none); const tags = ip.items.items(.tag); - if (tags[@enumToInt(val)] != .type_inferred_error_set) return .none; + if (tags[@intFromEnum(val)] != .type_inferred_error_set) return .none; const datas = ip.items.items(.data); - return @intToEnum(Module.Fn.InferredErrorSet.Index, datas[@enumToInt(val)]).toOptional(); + return @enumFromInt(Module.Fn.InferredErrorSet.Index, datas[@intFromEnum(val)]).toOptional(); } /// includes .comptime_int_type @@ -4956,9 +4956,9 @@ pub fn isAggregateType(ip: *const InternPool, ty: Index) bool { /// The is only legal because the initializer is not part of the hash. pub fn mutateVarInit(ip: *InternPool, index: Index, init_index: Index) void { - const item = ip.items.get(@enumToInt(index)); + const item = ip.items.get(@intFromEnum(index)); assert(item.tag == .variable); - ip.extra.items[item.data + std.meta.fieldIndex(Tag.Variable, "init").?] = @enumToInt(init_index); + ip.extra.items[item.data + std.meta.fieldIndex(Tag.Variable, "init").?] = @intFromEnum(init_index); } pub fn dump(ip: *const InternPool) void { @@ -5038,7 +5038,7 @@ fn dumpStatsFallible(ip: *const InternPool, arena: Allocator) anyerror!void { .type_enum_auto => @sizeOf(EnumAuto), .type_opaque => @sizeOf(Key.OpaqueType), .type_struct => b: { - const struct_index = @intToEnum(Module.Struct.Index, data); + const struct_index = @enumFromInt(Module.Struct.Index, data); const struct_obj = ip.structPtrConst(struct_index); break :b @sizeOf(Module.Struct) + @sizeOf(Module.Namespace) + @@ -5107,7 +5107,7 @@ fn dumpStatsFallible(ip: *const InternPool, arena: Allocator) anyerror!void { const info = ip.extraData(Bytes, data); const len = @intCast(u32, ip.aggregateTypeLenIncludingSentinel(info.ty)); break :b @sizeOf(Bytes) + len + - @boolToInt(ip.string_bytes.items[@enumToInt(info.bytes) + len - 1] != 0); + @intFromBool(ip.string_bytes.items[@intFromEnum(info.bytes) + len - 1] != 0); }, .aggregate => b: { const info = ip.extraData(Tag.Aggregate, data); @@ -5162,8 +5162,8 @@ fn dumpAllFallible(ip: *const InternPool) anyerror!void { for (tags, datas, 0..) |tag, data, i| { try w.print("${d} = {s}(", .{ i, @tagName(tag) }); switch (tag) { - .simple_type => try w.print("{s}", .{@tagName(@intToEnum(SimpleType, data))}), - .simple_value => try w.print("{s}", .{@tagName(@intToEnum(SimpleValue, data))}), + .simple_type => try w.print("{s}", .{@tagName(@enumFromInt(SimpleType, data))}), + .simple_value => try w.print("{s}", .{@tagName(@enumFromInt(SimpleValue, data))}), .type_int_signed, .type_int_unsigned, @@ -5246,11 +5246,11 @@ fn dumpAllFallible(ip: *const InternPool) anyerror!void { } pub fn structPtr(ip: *InternPool, index: Module.Struct.Index) *Module.Struct { - return ip.allocated_structs.at(@enumToInt(index)); + return ip.allocated_structs.at(@intFromEnum(index)); } pub fn structPtrConst(ip: *const InternPool, index: Module.Struct.Index) *const Module.Struct { - return ip.allocated_structs.at(@enumToInt(index)); + return ip.allocated_structs.at(@intFromEnum(index)); } pub fn structPtrUnwrapConst(ip: *const InternPool, index: Module.Struct.OptionalIndex) ?*const Module.Struct { @@ -5258,27 +5258,27 @@ pub fn structPtrUnwrapConst(ip: *const InternPool, index: Module.Struct.Optional } pub fn unionPtr(ip: *InternPool, index: Module.Union.Index) *Module.Union { - return ip.allocated_unions.at(@enumToInt(index)); + return ip.allocated_unions.at(@intFromEnum(index)); } pub fn unionPtrConst(ip: *const InternPool, index: Module.Union.Index) *const Module.Union { - return ip.allocated_unions.at(@enumToInt(index)); + return ip.allocated_unions.at(@intFromEnum(index)); } pub fn funcPtr(ip: *InternPool, index: Module.Fn.Index) *Module.Fn { - return ip.allocated_funcs.at(@enumToInt(index)); + return ip.allocated_funcs.at(@intFromEnum(index)); } pub fn funcPtrConst(ip: *const InternPool, index: Module.Fn.Index) *const Module.Fn { - return ip.allocated_funcs.at(@enumToInt(index)); + return ip.allocated_funcs.at(@intFromEnum(index)); } pub fn inferredErrorSetPtr(ip: *InternPool, index: Module.Fn.InferredErrorSet.Index) *Module.Fn.InferredErrorSet { - return ip.allocated_inferred_error_sets.at(@enumToInt(index)); + return ip.allocated_inferred_error_sets.at(@intFromEnum(index)); } pub fn inferredErrorSetPtrConst(ip: *const InternPool, index: Module.Fn.InferredErrorSet.Index) *const Module.Fn.InferredErrorSet { - return ip.allocated_inferred_error_sets.at(@enumToInt(index)); + return ip.allocated_inferred_error_sets.at(@intFromEnum(index)); } pub fn createStruct( @@ -5287,12 +5287,12 @@ pub fn createStruct( initialization: Module.Struct, ) Allocator.Error!Module.Struct.Index { if (ip.structs_free_list.popOrNull()) |index| { - ip.allocated_structs.at(@enumToInt(index)).* = initialization; + ip.allocated_structs.at(@intFromEnum(index)).* = initialization; return index; } const ptr = try ip.allocated_structs.addOne(gpa); ptr.* = initialization; - return @intToEnum(Module.Struct.Index, ip.allocated_structs.len - 1); + return @enumFromInt(Module.Struct.Index, ip.allocated_structs.len - 1); } pub fn destroyStruct(ip: *InternPool, gpa: Allocator, index: Module.Struct.Index) void { @@ -5309,12 +5309,12 @@ pub fn createUnion( initialization: Module.Union, ) Allocator.Error!Module.Union.Index { if (ip.unions_free_list.popOrNull()) |index| { - ip.allocated_unions.at(@enumToInt(index)).* = initialization; + ip.allocated_unions.at(@intFromEnum(index)).* = initialization; return index; } const ptr = try ip.allocated_unions.addOne(gpa); ptr.* = initialization; - return @intToEnum(Module.Union.Index, ip.allocated_unions.len - 1); + return @enumFromInt(Module.Union.Index, ip.allocated_unions.len - 1); } pub fn destroyUnion(ip: *InternPool, gpa: Allocator, index: Module.Union.Index) void { @@ -5331,12 +5331,12 @@ pub fn createFunc( initialization: Module.Fn, ) Allocator.Error!Module.Fn.Index { if (ip.funcs_free_list.popOrNull()) |index| { - ip.allocated_funcs.at(@enumToInt(index)).* = initialization; + ip.allocated_funcs.at(@intFromEnum(index)).* = initialization; return index; } const ptr = try ip.allocated_funcs.addOne(gpa); ptr.* = initialization; - return @intToEnum(Module.Fn.Index, ip.allocated_funcs.len - 1); + return @enumFromInt(Module.Fn.Index, ip.allocated_funcs.len - 1); } pub fn destroyFunc(ip: *InternPool, gpa: Allocator, index: Module.Fn.Index) void { @@ -5353,12 +5353,12 @@ pub fn createInferredErrorSet( initialization: Module.Fn.InferredErrorSet, ) Allocator.Error!Module.Fn.InferredErrorSet.Index { if (ip.inferred_error_sets_free_list.popOrNull()) |index| { - ip.allocated_inferred_error_sets.at(@enumToInt(index)).* = initialization; + ip.allocated_inferred_error_sets.at(@intFromEnum(index)).* = initialization; return index; } const ptr = try ip.allocated_inferred_error_sets.addOne(gpa); ptr.* = initialization; - return @intToEnum(Module.Fn.InferredErrorSet.Index, ip.allocated_inferred_error_sets.len - 1); + return @enumFromInt(Module.Fn.InferredErrorSet.Index, ip.allocated_inferred_error_sets.len - 1); } pub fn destroyInferredErrorSet(ip: *InternPool, gpa: Allocator, index: Module.Fn.InferredErrorSet.Index) void { @@ -5425,11 +5425,11 @@ pub fn getOrPutTrailingString( }); if (gop.found_existing) { string_bytes.shrinkRetainingCapacity(str_index); - return @intToEnum(NullTerminatedString, gop.key_ptr.*); + return @enumFromInt(NullTerminatedString, gop.key_ptr.*); } else { gop.key_ptr.* = str_index; string_bytes.appendAssumeCapacity(0); - return @intToEnum(NullTerminatedString, str_index); + return @enumFromInt(NullTerminatedString, str_index); } } @@ -5437,7 +5437,7 @@ pub fn getString(ip: *InternPool, s: []const u8) OptionalNullTerminatedString { if (ip.string_table.getKeyAdapted(s, std.hash_map.StringIndexAdapter{ .bytes = &ip.string_bytes, })) |index| { - return @intToEnum(NullTerminatedString, index).toOptional(); + return @enumFromInt(NullTerminatedString, index).toOptional(); } else { return .none; } @@ -5445,7 +5445,7 @@ pub fn getString(ip: *InternPool, s: []const u8) OptionalNullTerminatedString { pub fn stringToSlice(ip: *const InternPool, s: NullTerminatedString) [:0]const u8 { const string_bytes = ip.string_bytes.items; - const start = @enumToInt(s); + const start = @intFromEnum(s); var end: usize = start; while (string_bytes[end] != 0) end += 1; return string_bytes[start..end :0]; @@ -5543,7 +5543,7 @@ pub fn typeOf(ip: *const InternPool, index: Index) Index { // This optimization on tags is needed so that indexToKey can call // typeOf without being recursive. - _ => switch (ip.items.items(.tag)[@enumToInt(index)]) { + _ => switch (ip.items.items(.tag)[@intFromEnum(index)]) { .type_int_signed, .type_int_unsigned, .type_array_big, @@ -5574,7 +5574,7 @@ pub fn typeOf(ip: *const InternPool, index: Index) Index { .undef, .opt_null, .only_possible_value, - => @intToEnum(Index, ip.items.items(.data)[@enumToInt(index)]), + => @enumFromInt(Index, ip.items.items(.data)[@intFromEnum(index)]), .simple_value => unreachable, // handled via Index above @@ -5604,9 +5604,9 @@ pub fn typeOf(ip: *const InternPool, index: Index) Index { .aggregate, .repeated, => |t| { - const extra_index = ip.items.items(.data)[@enumToInt(index)]; + const extra_index = ip.items.items(.data)[@intFromEnum(index)]; const field_index = std.meta.fieldIndex(t.Payload(), "ty").?; - return @intToEnum(Index, ip.extra.items[extra_index + field_index]); + return @enumFromInt(Index, ip.extra.items[extra_index + field_index]); }, .int_u8 => .u8_type, @@ -5622,7 +5622,7 @@ pub fn typeOf(ip: *const InternPool, index: Index) Index { // Note these are stored in limbs data, not extra data. .int_positive, .int_negative, - => ip.limbData(Int, ip.items.items(.data)[@enumToInt(index)]).ty, + => ip.limbData(Int, ip.items.items(.data)[@intFromEnum(index)]).ty, .enum_literal => .enum_literal_type, .float_f16 => .f16_type, @@ -5648,7 +5648,7 @@ pub fn typeOf(ip: *const InternPool, index: Index) Index { /// Assumes that the enum's field indexes equal its value tags. pub fn toEnum(ip: *const InternPool, comptime E: type, i: Index) E { const int = ip.indexToKey(i).enum_tag.int; - return @intToEnum(E, ip.indexToKey(int).int.storage.u64); + return @enumFromInt(E, ip.indexToKey(int).int.storage.u64); } pub fn aggregateTypeLen(ip: *const InternPool, ty: Index) u64 { @@ -5665,7 +5665,7 @@ pub fn aggregateTypeLenIncludingSentinel(ip: *const InternPool, ty: Index) u64 { return switch (ip.indexToKey(ty)) { .struct_type => |struct_type| ip.structPtrConst(struct_type.index.unwrap() orelse return 0).fields.count(), .anon_struct_type => |anon_struct_type| anon_struct_type.types.len, - .array_type => |array_type| array_type.len + @boolToInt(array_type.sentinel != .none), + .array_type => |array_type| array_type.len + @intFromBool(array_type.sentinel != .none), .vector_type => |vector_type| vector_type.len, else => unreachable, }; @@ -5783,7 +5783,7 @@ pub fn zigTypeTagOrPoison(ip: *const InternPool, index: Index) error{GenericPois .var_args_param_type => unreachable, // special tag - _ => switch (ip.items.items(.tag)[@enumToInt(index)]) { + _ => switch (ip.items.items(.tag)[@intFromEnum(index)]) { .type_int_signed, .type_int_unsigned, => .Int, diff --git a/src/Liveness.zig b/src/Liveness.zig index ea922b1a8d..2ba0291364 100644 --- a/src/Liveness.zig +++ b/src/Liveness.zig @@ -1286,7 +1286,7 @@ fn analyzeOperands( break :blk true; }; - var tomb_bits: Bpi = @as(Bpi, @boolToInt(immediate_death)) << (bpi - 1); + var tomb_bits: Bpi = @as(Bpi, @intFromBool(immediate_death)) << (bpi - 1); // If our result is unused and the instruction doesn't need to be lowered, backends will // skip the lowering of this instruction, so we don't want to record uses of operands. diff --git a/src/Manifest.zig b/src/Manifest.zig index 068a14942f..0549287e60 100644 --- a/src/Manifest.zig +++ b/src/Manifest.zig @@ -39,7 +39,7 @@ pub const multihash_function: MultihashFunction = switch (Hash) { comptime { // We avoid unnecessary uleb128 code in hexDigest by asserting here the // values are small enough to be contained in the one-byte encoding. - assert(@enumToInt(multihash_function) < 127); + assert(@intFromEnum(multihash_function) < 127); assert(Hash.digest_length < 127); } pub const multihash_len = 1 + 1 + Hash.digest_length; @@ -117,8 +117,8 @@ test hex64 { pub fn hexDigest(digest: [Hash.digest_length]u8) [multihash_len * 2]u8 { var result: [multihash_len * 2]u8 = undefined; - result[0] = hex_charset[@enumToInt(multihash_function) >> 4]; - result[1] = hex_charset[@enumToInt(multihash_function) & 15]; + result[0] = hex_charset[@intFromEnum(multihash_function) >> 4]; + result[1] = hex_charset[@intFromEnum(multihash_function) & 15]; result[2] = hex_charset[Hash.digest_length >> 4]; result[3] = hex_charset[Hash.digest_length & 15]; @@ -284,7 +284,7 @@ const Parse = struct { @errorName(err), }); }; - if (@intToEnum(MultihashFunction, their_multihash_func) != multihash_function) { + if (@enumFromInt(MultihashFunction, their_multihash_func) != multihash_function) { return fail(p, tok, "unsupported hash function: only sha2-256 is supported", .{}); } } diff --git a/src/Module.zig b/src/Module.zig index 8d9f9593dd..28696b3271 100644 --- a/src/Module.zig +++ b/src/Module.zig @@ -223,7 +223,7 @@ pub const MonomorphedFuncsContext = struct { pub fn hash(ctx: @This(), key: MonomorphedFuncKey) u64 { const key_args = ctx.mod.monomorphed_func_keys.items[key.args_index..][0..key.args_len]; - return std.hash.Wyhash.hash(@enumToInt(key.func), std.mem.sliceAsBytes(key_args)); + return std.hash.Wyhash.hash(@intFromEnum(key.func), std.mem.sliceAsBytes(key_args)); } }; @@ -236,7 +236,7 @@ pub const MonomorphedFuncsAdaptedContext = struct { } pub fn hash(_: @This(), adapted_key: MonomorphedFuncAdaptedKey) u64 { - return std.hash.Wyhash.hash(@enumToInt(adapted_key.func), std.mem.sliceAsBytes(adapted_key.args)); + return std.hash.Wyhash.hash(@intFromEnum(adapted_key.func), std.mem.sliceAsBytes(adapted_key.args)); } }; @@ -263,7 +263,7 @@ pub const GlobalEmitH = struct { allocated_emit_h: std.SegmentedList(EmitH, 0) = .{}, pub fn declPtr(global_emit_h: *GlobalEmitH, decl_index: Decl.Index) *EmitH { - return global_emit_h.allocated_emit_h.at(@enumToInt(decl_index)); + return global_emit_h.allocated_emit_h.at(@intFromEnum(decl_index)); } }; @@ -553,7 +553,7 @@ pub const Decl = struct { _, pub fn toOptional(i: Index) OptionalIndex { - return @intToEnum(OptionalIndex, @enumToInt(i)); + return @enumFromInt(OptionalIndex, @intFromEnum(i)); } }; @@ -562,12 +562,12 @@ pub const Decl = struct { _, pub fn init(oi: ?Index) OptionalIndex { - return @intToEnum(OptionalIndex, @enumToInt(oi orelse return .none)); + return @enumFromInt(OptionalIndex, @intFromEnum(oi orelse return .none)); } pub fn unwrap(oi: OptionalIndex) ?Index { if (oi == .none) return null; - return @intToEnum(Index, @enumToInt(oi)); + return @enumFromInt(Index, @intFromEnum(oi)); } }; @@ -632,23 +632,23 @@ pub const Decl = struct { if (!decl.has_align) return .none; assert(decl.zir_decl_index != 0); const zir = decl.getFileScope(mod).zir; - return @intToEnum(Zir.Inst.Ref, zir.extra[decl.zir_decl_index + 8]); + return @enumFromInt(Zir.Inst.Ref, zir.extra[decl.zir_decl_index + 8]); } pub fn zirLinksectionRef(decl: Decl, mod: *Module) Zir.Inst.Ref { if (!decl.has_linksection_or_addrspace) return .none; assert(decl.zir_decl_index != 0); const zir = decl.getFileScope(mod).zir; - const extra_index = decl.zir_decl_index + 8 + @boolToInt(decl.has_align); - return @intToEnum(Zir.Inst.Ref, zir.extra[extra_index]); + const extra_index = decl.zir_decl_index + 8 + @intFromBool(decl.has_align); + return @enumFromInt(Zir.Inst.Ref, zir.extra[extra_index]); } pub fn zirAddrspaceRef(decl: Decl, mod: *Module) Zir.Inst.Ref { if (!decl.has_linksection_or_addrspace) return .none; assert(decl.zir_decl_index != 0); const zir = decl.getFileScope(mod).zir; - const extra_index = decl.zir_decl_index + 8 + @boolToInt(decl.has_align) + 1; - return @intToEnum(Zir.Inst.Ref, zir.extra[extra_index]); + const extra_index = decl.zir_decl_index + 8 + @intFromBool(decl.has_align) + 1; + return @enumFromInt(Zir.Inst.Ref, zir.extra[extra_index]); } pub fn relativeToLine(decl: Decl, offset: u32) u32 { @@ -831,7 +831,7 @@ pub const Decl = struct { decl.scope.sub_file_path, loc.line + 1, loc.column + 1, - @enumToInt(decl.name), + @intFromEnum(decl.name), @tagName(decl.analysis), }); if (decl.has_tv) { @@ -927,7 +927,7 @@ pub const Struct = struct { _, pub fn toOptional(i: Index) OptionalIndex { - return @intToEnum(OptionalIndex, @enumToInt(i)); + return @enumFromInt(OptionalIndex, @intFromEnum(i)); } }; @@ -936,12 +936,12 @@ pub const Struct = struct { _, pub fn init(oi: ?Index) OptionalIndex { - return @intToEnum(OptionalIndex, @enumToInt(oi orelse return .none)); + return @enumFromInt(OptionalIndex, @intFromEnum(oi orelse return .none)); } pub fn unwrap(oi: OptionalIndex) ?Index { if (oi == .none) return null; - return @intToEnum(Index, @enumToInt(oi)); + return @enumFromInt(Index, @intFromEnum(oi)); } }; @@ -1128,7 +1128,7 @@ pub const Union = struct { _, pub fn toOptional(i: Index) OptionalIndex { - return @intToEnum(OptionalIndex, @enumToInt(i)); + return @enumFromInt(OptionalIndex, @intFromEnum(i)); } }; @@ -1137,12 +1137,12 @@ pub const Union = struct { _, pub fn init(oi: ?Index) OptionalIndex { - return @intToEnum(OptionalIndex, @enumToInt(oi orelse return .none)); + return @enumFromInt(OptionalIndex, @intFromEnum(oi orelse return .none)); } pub fn unwrap(oi: OptionalIndex) ?Index { if (oi == .none) return null; - return @intToEnum(Index, @enumToInt(oi)); + return @enumFromInt(Index, @intFromEnum(oi)); } }; @@ -1424,7 +1424,7 @@ pub const Fn = struct { _, pub fn toOptional(i: Index) OptionalIndex { - return @intToEnum(OptionalIndex, @enumToInt(i)); + return @enumFromInt(OptionalIndex, @intFromEnum(i)); } }; @@ -1433,12 +1433,12 @@ pub const Fn = struct { _, pub fn init(oi: ?Index) OptionalIndex { - return @intToEnum(OptionalIndex, @enumToInt(oi orelse return .none)); + return @enumFromInt(OptionalIndex, @intFromEnum(oi orelse return .none)); } pub fn unwrap(oi: OptionalIndex) ?Index { if (oi == .none) return null; - return @intToEnum(Index, @enumToInt(oi)); + return @enumFromInt(Index, @intFromEnum(oi)); } }; @@ -1492,7 +1492,7 @@ pub const Fn = struct { _, pub fn toOptional(i: InferredErrorSet.Index) InferredErrorSet.OptionalIndex { - return @intToEnum(InferredErrorSet.OptionalIndex, @enumToInt(i)); + return @enumFromInt(InferredErrorSet.OptionalIndex, @intFromEnum(i)); } }; @@ -1501,12 +1501,12 @@ pub const Fn = struct { _, pub fn init(oi: ?InferredErrorSet.Index) InferredErrorSet.OptionalIndex { - return @intToEnum(InferredErrorSet.OptionalIndex, @enumToInt(oi orelse return .none)); + return @enumFromInt(InferredErrorSet.OptionalIndex, @intFromEnum(oi orelse return .none)); } pub fn unwrap(oi: InferredErrorSet.OptionalIndex) ?InferredErrorSet.Index { if (oi == .none) return null; - return @intToEnum(InferredErrorSet.Index, @enumToInt(oi)); + return @enumFromInt(InferredErrorSet.Index, @intFromEnum(oi)); } }; @@ -1594,7 +1594,7 @@ pub const DeclAdapter = struct { pub fn hash(self: @This(), s: InternPool.NullTerminatedString) u32 { _ = self; - return std.hash.uint32(@enumToInt(s)); + return std.hash.uint32(@intFromEnum(s)); } pub fn eql(self: @This(), a: InternPool.NullTerminatedString, b_decl_index: Decl.Index, b_index: usize) bool { @@ -1628,7 +1628,7 @@ pub const Namespace = struct { _, pub fn toOptional(i: Index) OptionalIndex { - return @intToEnum(OptionalIndex, @enumToInt(i)); + return @enumFromInt(OptionalIndex, @intFromEnum(i)); } }; @@ -1637,12 +1637,12 @@ pub const Namespace = struct { _, pub fn init(oi: ?Index) OptionalIndex { - return @intToEnum(OptionalIndex, @enumToInt(oi orelse return .none)); + return @enumFromInt(OptionalIndex, @intFromEnum(oi orelse return .none)); } pub fn unwrap(oi: OptionalIndex) ?Index { if (oi == .none) return null; - return @intToEnum(Index, @enumToInt(oi)); + return @enumFromInt(Index, @intFromEnum(oi)); } }; @@ -1651,7 +1651,7 @@ pub const Namespace = struct { pub fn hash(ctx: @This(), decl_index: Decl.Index) u32 { const decl = ctx.module.declPtr(decl_index); - return std.hash.uint32(@enumToInt(decl.name)); + return std.hash.uint32(@intFromEnum(decl.name)); } pub fn eql(ctx: @This(), a_decl_index: Decl.Index, b_decl_index: Decl.Index, b_index: usize) bool { @@ -2006,7 +2006,7 @@ pub const File = struct { // be the case if there were other astgen failures in this file if (!file.zir_loaded) return; - const imports_index = file.zir.extra[@enumToInt(Zir.ExtraIndex.imports)]; + const imports_index = file.zir.extra[@intFromEnum(Zir.ExtraIndex.imports)]; if (imports_index == 0) return; const extra = file.zir.extraData(Zir.Inst.Imports, imports_index); @@ -3360,11 +3360,11 @@ pub fn destroyDecl(mod: *Module, decl_index: Decl.Index) void { } pub fn declPtr(mod: *Module, index: Decl.Index) *Decl { - return mod.allocated_decls.at(@enumToInt(index)); + return mod.allocated_decls.at(@intFromEnum(index)); } pub fn namespacePtr(mod: *Module, index: Namespace.Index) *Namespace { - return mod.allocated_namespaces.at(@enumToInt(index)); + return mod.allocated_namespaces.at(@intFromEnum(index)); } pub fn unionPtr(mod: *Module, index: Union.Index) *Union { @@ -3767,10 +3767,10 @@ fn loadZirCacheBody(gpa: Allocator, header: Zir.Header, cache_file: std.fs.File) if (data_has_safety_tag) { const tags = zir.instructions.items(.tag); for (zir.instructions.items(.data), 0..) |*data, i| { - const union_tag = Zir.Inst.Tag.data_tags[@enumToInt(tags[i])]; + const union_tag = Zir.Inst.Tag.data_tags[@intFromEnum(tags[i])]; const as_struct = @ptrCast(*HackDataLayout, data); as_struct.* = .{ - .safety_tag = @enumToInt(union_tag), + .safety_tag = @intFromEnum(union_tag), .data = safety_buffer[i], }; } @@ -4101,7 +4101,7 @@ pub fn ensureDeclAnalyzed(mod: *Module, decl_index: Decl.Index) SemaError!void { const update_level: Decl.DepType = if (!type_changed and decl.ty.zigTypeTag(mod) == .Fn) .function_body else .normal; for (decl.dependants.keys(), decl.dependants.values()) |dep_index, dep_type| { - if (@enumToInt(dep_type) < @enumToInt(update_level)) continue; + if (@intFromEnum(dep_type) < @intFromEnum(update_level)) continue; const dep = mod.declPtr(dep_index); switch (dep.analysis) { @@ -4621,7 +4621,7 @@ fn semaDecl(mod: *Module, decl_index: Decl.Index) !bool { const is_inline = decl.ty.fnCallingConvention(mod) == .Inline; if (decl.is_exported) { - const export_src: LazySrcLoc = .{ .token_offset = @boolToInt(decl.is_pub) }; + const export_src: LazySrcLoc = .{ .token_offset = @intFromBool(decl.is_pub) }; if (is_inline) { return sema.fail(&block_scope, export_src, "export of inline function", .{}); } @@ -4721,7 +4721,7 @@ fn semaDecl(mod: *Module, decl_index: Decl.Index) !bool { } if (decl.is_exported) { - const export_src: LazySrcLoc = .{ .token_offset = @boolToInt(decl.is_pub) }; + const export_src: LazySrcLoc = .{ .token_offset = @intFromBool(decl.is_pub) }; // The scope needs to have the decl in it. try sema.analyzeExport(&block_scope, export_src, .{ .name = decl.name }, decl_index); } @@ -4742,7 +4742,7 @@ pub fn declareDeclDependencyType(mod: *Module, depender_index: Decl.Index, depen const dependee = mod.declPtr(dependee_index); if (depender.dependencies.get(dependee_index)) |cur_type| { - if (@enumToInt(cur_type) >= @enumToInt(dep_type)) { + if (@intFromEnum(cur_type) >= @intFromEnum(dep_type)) { // We already have this dependency (or stricter) marked return; } @@ -5611,7 +5611,7 @@ pub fn analyzeFnBody(mod: *Module, func_index: Fn.Index, arena: Allocator) SemaE .body_len = @intCast(u32, inner_block.instructions.items.len), }); sema.air_extra.appendSliceAssumeCapacity(inner_block.instructions.items); - sema.air_extra.items[@enumToInt(Air.ExtraIndex.main_block)] = main_block_index; + sema.air_extra.items[@intFromEnum(Air.ExtraIndex.main_block)] = main_block_index; func.state = .success; @@ -5681,12 +5681,12 @@ fn markOutdatedDecl(mod: *Module, decl_index: Decl.Index) !void { pub fn createNamespace(mod: *Module, initialization: Namespace) !Namespace.Index { if (mod.namespaces_free_list.popOrNull()) |index| { - mod.allocated_namespaces.at(@enumToInt(index)).* = initialization; + mod.allocated_namespaces.at(@intFromEnum(index)).* = initialization; return index; } const ptr = try mod.allocated_namespaces.addOne(mod.gpa); ptr.* = initialization; - return @intToEnum(Namespace.Index, mod.allocated_namespaces.len - 1); + return @enumFromInt(Namespace.Index, mod.allocated_namespaces.len - 1); } pub fn destroyNamespace(mod: *Module, index: Namespace.Index) void { @@ -5744,7 +5744,7 @@ pub fn allocateNewDecl( } break :d .{ .new_decl = decl, - .decl_index = @intToEnum(Decl.Index, mod.allocated_decls.len - 1), + .decl_index = @enumFromInt(Decl.Index, mod.allocated_decls.len - 1), }; }; @@ -5808,7 +5808,7 @@ pub fn createAnonymousDeclFromDecl( const new_decl_index = try mod.allocateNewDecl(namespace, src_decl.src_node, src_scope); errdefer mod.destroyDecl(new_decl_index); const name = try mod.intern_pool.getOrPutStringFmt(mod.gpa, "{}__anon_{d}", .{ - src_decl.name.fmt(&mod.intern_pool), @enumToInt(new_decl_index), + src_decl.name.fmt(&mod.intern_pool), @intFromEnum(new_decl_index), }); try mod.initNewAnonDecl(new_decl_index, src_decl.src_line, namespace, tv, name); return new_decl_index; @@ -6172,7 +6172,7 @@ pub fn argSrc( @setCold(true); const gpa = mod.gpa; if (start_arg_i == 0 and bound_arg_src != null) return bound_arg_src.?; - const arg_i = start_arg_i - @boolToInt(bound_arg_src != null); + const arg_i = start_arg_i - @intFromBool(bound_arg_src != null); const tree = decl.getFileScope(mod).getTree(gpa) catch |err| { // In this case we emit a warning + a less precise source location. log.warn("unable to load {s}: {s}", .{ @@ -6741,7 +6741,7 @@ pub fn ptrType(mod: *Module, info: InternPool.Key.PtrType) Allocator.Error!Type } }, .runtime => {}, - _ => assert(@enumToInt(info.flags.vector_index) < info.packed_offset.host_size), + _ => assert(@intFromEnum(info.flags.vector_index) < info.packed_offset.host_size), } return (try intern(mod, .{ .ptr_type = canon_info })).toType(); @@ -6969,17 +6969,17 @@ pub fn intBitsForValue(mod: *Module, val: Value, sign: bool) u16 { const key = mod.intern_pool.indexToKey(val.toIntern()); switch (key.int.storage) { .i64 => |x| { - if (std.math.cast(u64, x)) |casted| return Type.smallestUnsignedBits(casted) + @boolToInt(sign); + if (std.math.cast(u64, x)) |casted| return Type.smallestUnsignedBits(casted) + @intFromBool(sign); assert(sign); // Protect against overflow in the following negation. if (x == std.math.minInt(i64)) return 64; return Type.smallestUnsignedBits(@intCast(u64, -(x + 1))) + 1; }, .u64 => |x| { - return Type.smallestUnsignedBits(x) + @boolToInt(sign); + return Type.smallestUnsignedBits(x) + @intFromBool(sign); }, .big_int => |big| { - if (big.positive) return @intCast(u16, big.bitCountAbs() + @boolToInt(sign)); + if (big.positive) return @intCast(u16, big.bitCountAbs() + @intFromBool(sign)); // Zero is still a possibility, in which case unsigned is fine if (big.eqZero()) return 0; @@ -6987,10 +6987,10 @@ pub fn intBitsForValue(mod: *Module, val: Value, sign: bool) u16 { return @intCast(u16, big.bitCountTwosComp()); }, .lazy_align => |lazy_ty| { - return Type.smallestUnsignedBits(lazy_ty.toType().abiAlignment(mod)) + @boolToInt(sign); + return Type.smallestUnsignedBits(lazy_ty.toType().abiAlignment(mod)) + @intFromBool(sign); }, .lazy_size => |lazy_ty| { - return Type.smallestUnsignedBits(lazy_ty.toType().abiSize(mod)) + @boolToInt(sign); + return Type.smallestUnsignedBits(lazy_ty.toType().abiSize(mod)) + @intFromBool(sign); }, } } diff --git a/src/Package.zig b/src/Package.zig index e8431927b1..dd8f3c8a7e 100644 --- a/src/Package.zig +++ b/src/Package.zig @@ -502,7 +502,7 @@ fn fetchAndUnpack( if (req.response.status != .ok) { return report.fail(dep.url_tok, "Expected response status '200 OK' got '{} {s}'", .{ - @enumToInt(req.response.status), + @intFromEnum(req.response.status), req.response.status.phrase() orelse "", }); } @@ -568,7 +568,7 @@ fn fetchAndUnpack( .msg = "url field is missing corresponding hash field", }); const notes_start = try eb.reserveNotes(notes_len); - eb.extra.items[notes_start] = @enumToInt(try eb.addErrorMessage(.{ + eb.extra.items[notes_start] = @intFromEnum(try eb.addErrorMessage(.{ .msg = try eb.printString("expected .hash = \"{s}\",", .{&actual_hex}), })); return error.PackageFetchFailed; @@ -715,7 +715,7 @@ fn hashFileFallible(dir: fs.Dir, hashed_file: *HashedFile) HashedFile.Error!void defer file.close(); var hasher = Manifest.Hash.init(.{}); hasher.update(hashed_file.normalized_path); - hasher.update(&.{ 0, @boolToInt(try isExecutable(file)) }); + hasher.update(&.{ 0, @intFromBool(try isExecutable(file)) }); while (true) { const bytes_read = try file.read(&buf); if (bytes_read == 0) break; diff --git a/src/Sema.zig b/src/Sema.zig index c7115409e6..69326a1704 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -1387,7 +1387,7 @@ fn analyzeBodyInner( check_block = check_block.parent.?; }; - if (@enumToInt(target_runtime_index) < @enumToInt(block.runtime_index)) { + if (@intFromEnum(target_runtime_index) < @intFromEnum(block.runtime_index)) { const runtime_src = block.runtime_cond orelse block.runtime_loop.?; const msg = msg: { const msg = try sema.errMsg(block, src, "comptime control flow inside runtime block", .{}); @@ -1761,10 +1761,10 @@ pub fn resolveInstAllowNone(sema: *Sema, zir_ref: Zir.Inst.Ref) !Air.Inst.Ref { pub fn resolveInst(sema: *Sema, zir_ref: Zir.Inst.Ref) !Air.Inst.Ref { assert(zir_ref != .none); - const i = @enumToInt(zir_ref); + const i = @intFromEnum(zir_ref); // First section of indexes correspond to a set number of constant values. // We intentionally map the same indexes to the same values between ZIR and AIR. - if (i < InternPool.static_len) return @intToEnum(Air.Inst.Ref, i); + if (i < InternPool.static_len) return @enumFromInt(Air.Inst.Ref, i); // The last section of indexes refers to the map of ZIR => AIR. const inst = sema.inst_map.get(i - InternPool.static_len).?; if (inst == .generic_poison) return error.GenericPoison; @@ -2038,9 +2038,9 @@ fn resolveMaybeUndefValAllowVariablesMaybeRuntime( ) CompileError!?Value { assert(inst != .none); // First section of indexes correspond to a set number of constant values. - const int = @enumToInt(inst); + const int = @intFromEnum(inst); if (int < InternPool.static_len) { - return @intToEnum(InternPool.Index, int).toValue(); + return @enumFromInt(InternPool.Index, int).toValue(); } const i = int - InternPool.static_len; @@ -2745,8 +2745,8 @@ pub fn analyzeStructDecl( } var extra_index: usize = extended.operand; - extra_index += @boolToInt(small.has_src_node); - extra_index += @boolToInt(small.has_fields_len); + extra_index += @intFromBool(small.has_src_node); + extra_index += @intFromBool(small.has_fields_len); const decls_len = if (small.has_decls_len) blk: { const decls_len = sema.code.extra[extra_index]; extra_index += 1; @@ -2857,7 +2857,7 @@ fn createAnonymousDeclTypeNamed( // renamed. const name = mod.intern_pool.getOrPutStringFmt(gpa, "{}__{s}_{d}", .{ - src_decl.name.fmt(&mod.intern_pool), anon_prefix, @enumToInt(new_decl_index), + src_decl.name.fmt(&mod.intern_pool), anon_prefix, @intFromEnum(new_decl_index), }) catch unreachable; try mod.initNewAnonDecl(new_decl_index, src_decl.src_line, namespace, typed_value, name); return new_decl_index; @@ -2948,7 +2948,7 @@ fn zirEnumDecl( const tag_ty_src: LazySrcLoc = .{ .node_offset_container_tag = src.node_offset.x }; const tag_type_ref = if (small.has_tag_type) blk: { - const tag_type_ref = @intToEnum(Zir.Inst.Ref, sema.code.extra[extra_index]); + const tag_type_ref = @enumFromInt(Zir.Inst.Ref, sema.code.extra[extra_index]); extra_index += 1; break :blk tag_type_ref; } else .none; @@ -3131,7 +3131,7 @@ fn zirEnumDecl( } const tag_overflow = if (has_tag_value) overflow: { - const tag_val_ref = @intToEnum(Zir.Inst.Ref, sema.code.extra[extra_index]); + const tag_val_ref = @enumFromInt(Zir.Inst.Ref, sema.code.extra[extra_index]); extra_index += 1; const tag_inst = try sema.resolveInst(tag_val_ref); last_tag_val = sema.resolveConstValue(block, .unneeded, tag_inst, "") catch |err| switch (err) { @@ -3222,9 +3222,9 @@ fn zirUnionDecl( break :blk LazySrcLoc.nodeOffset(node_offset); } else sema.src; - extra_index += @boolToInt(small.has_tag_type); - extra_index += @boolToInt(small.has_body_len); - extra_index += @boolToInt(small.has_fields_len); + extra_index += @intFromBool(small.has_tag_type); + extra_index += @intFromBool(small.has_body_len); + extra_index += @intFromBool(small.has_fields_len); const decls_len = if (small.has_decls_len) blk: { const decls_len = sema.code.extra[extra_index]; @@ -3574,13 +3574,13 @@ fn zirAllocExtended( var extra_index: usize = extra.end; const var_ty: Type = if (small.has_type) blk: { - const type_ref = @intToEnum(Zir.Inst.Ref, sema.code.extra[extra_index]); + const type_ref = @enumFromInt(Zir.Inst.Ref, sema.code.extra[extra_index]); extra_index += 1; break :blk try sema.resolveType(block, ty_src, type_ref); } else undefined; const alignment: u32 = if (small.has_align) blk: { - const align_ref = @intToEnum(Zir.Inst.Ref, sema.code.extra[extra_index]); + const align_ref = @enumFromInt(Zir.Inst.Ref, sema.code.extra[extra_index]); extra_index += 1; const alignment = try sema.resolveAlign(block, align_src, align_ref); break :blk alignment; @@ -6006,7 +6006,7 @@ fn zirFence(sema: *Sema, block: *Block, extended: Zir.Inst.Extended.InstData) Co const order_src: LazySrcLoc = .{ .node_offset_builtin_call_arg0 = extra.node }; const order = try sema.resolveAtomicOrder(block, order_src, extra.operand, "atomic order of @fence must be comptime-known"); - if (@enumToInt(order) < @enumToInt(std.builtin.AtomicOrder.Acquire)) { + if (@intFromEnum(order) < @intFromEnum(std.builtin.AtomicOrder.Acquire)) { return sema.fail(block, order_src, "atomic ordering must be Acquire or stricter", .{}); } @@ -6441,7 +6441,7 @@ fn zirCall( const extra = sema.code.extraData(ExtraType, inst_data.payload_index); const args_len = extra.data.flags.args_len; - const modifier = @intToEnum(std.builtin.CallModifier, extra.data.flags.packed_modifier); + const modifier = @enumFromInt(std.builtin.CallModifier, extra.data.flags.packed_modifier); const ensure_result_used = extra.data.flags.ensure_result_used; const pop_error_return_trace = extra.data.flags.pop_error_return_trace; @@ -6473,7 +6473,7 @@ fn zirCall( } const callee_ty = sema.typeOf(func); - const total_args = args_len + @boolToInt(bound_arg_src != null); + const total_args = args_len + @intFromBool(bound_arg_src != null); const func_ty = try sema.checkCallArgumentCount(block, func, callee_src, callee_ty, total_args, bound_arg_src != null); const args_body = sema.code.extra[extra.end..]; @@ -6612,7 +6612,7 @@ fn checkCallArgumentCount( const func_ty_info = mod.typeToFunc(func_ty).?; const fn_params_len = func_ty_info.param_types.len; - const args_len = total_args - @boolToInt(member_fn); + const args_len = total_args - @intFromBool(member_fn); if (func_ty_info.is_var_args) { assert(func_ty_info.cc == .C); if (total_args >= fn_params_len) return func_ty; @@ -6631,7 +6631,7 @@ fn checkCallArgumentCount( .{ member_str, variadic_str, - fn_params_len - @boolToInt(member_fn), + fn_params_len - @intFromBool(member_fn), args_len, }, ); @@ -7538,7 +7538,7 @@ fn instantiateGenericCall( const new_decl = mod.declPtr(new_decl_index); // TODO better names for generic function instantiations const decl_name = try mod.intern_pool.getOrPutStringFmt(gpa, "{}__anon_{d}", .{ - fn_owner_decl.name.fmt(&mod.intern_pool), @enumToInt(new_decl_index), + fn_owner_decl.name.fmt(&mod.intern_pool), @intFromEnum(new_decl_index), }); new_decl.name = decl_name; new_decl.src_line = fn_owner_decl.src_line; @@ -7982,7 +7982,7 @@ fn zirElemTypeIndex(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileErr const indexable_ty = try sema.resolveType(block, .unneeded, bin.lhs); assert(indexable_ty.isIndexable(mod)); // validated by a previous instruction if (indexable_ty.zigTypeTag(mod) == .Struct) { - const elem_type = indexable_ty.structFieldType(@enumToInt(bin.rhs), mod); + const elem_type = indexable_ty.structFieldType(@intFromEnum(bin.rhs), mod); return sema.addType(elem_type); } else { const elem_type = indexable_ty.elemType2(mod); @@ -8295,7 +8295,7 @@ fn zirIntFromEnum(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError } if (try sema.resolveMaybeUndefVal(enum_tag)) |enum_tag_val| { - const val = try enum_tag_val.enumToInt(enum_tag_ty, mod); + const val = try enum_tag_val.intFromEnum(enum_tag_ty, mod); return sema.addConstant(int_tag_ty, try val.copy(sema.arena)); } @@ -8729,7 +8729,7 @@ fn zirFunc( const ret_ty: Type = switch (extra.data.ret_body_len) { 0 => Type.void, 1 => blk: { - const ret_ty_ref = @intToEnum(Zir.Inst.Ref, sema.code.extra[extra_index]); + const ret_ty_ref = @enumFromInt(Zir.Inst.Ref, sema.code.extra[extra_index]); extra_index += 1; if (sema.resolveType(block, ret_ty_src, ret_ty_ref)) |ret_ty| { break :blk ret_ty; @@ -9668,8 +9668,8 @@ fn intCast( const wanted_info = dest_scalar_ty.intInfo(mod); const actual_bits = actual_info.bits; const wanted_bits = wanted_info.bits; - const actual_value_bits = actual_bits - @boolToInt(actual_info.signedness == .signed); - const wanted_value_bits = wanted_bits - @boolToInt(wanted_info.signedness == .signed); + const actual_value_bits = actual_bits - @intFromBool(actual_info.signedness == .signed); + const wanted_value_bits = wanted_bits - @intFromBool(wanted_info.signedness == .signed); // range shrinkage // requirement: int value fits into target type @@ -9790,7 +9790,7 @@ fn zirBitcast(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air const msg = try sema.errMsg(block, dest_ty_src, "cannot @bitCast to '{}'", .{dest_ty.fmt(mod)}); errdefer msg.destroy(sema.gpa); switch (operand_ty.zigTypeTag(mod)) { - .Int, .ComptimeInt => try sema.errNote(block, dest_ty_src, msg, "use @intToEnum to cast from '{}'", .{operand_ty.fmt(mod)}), + .Int, .ComptimeInt => try sema.errNote(block, dest_ty_src, msg, "use @enumFromInt to cast from '{}'", .{operand_ty.fmt(mod)}), else => {}, } @@ -9804,7 +9804,7 @@ fn zirBitcast(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air const msg = try sema.errMsg(block, dest_ty_src, "cannot @bitCast to '{}'", .{dest_ty.fmt(mod)}); errdefer msg.destroy(sema.gpa); switch (operand_ty.zigTypeTag(mod)) { - .Int, .ComptimeInt => try sema.errNote(block, dest_ty_src, msg, "use @intToPtr to cast from '{}'", .{operand_ty.fmt(mod)}), + .Int, .ComptimeInt => try sema.errNote(block, dest_ty_src, msg, "use @ptrFromInt to cast from '{}'", .{operand_ty.fmt(mod)}), .Pointer => try sema.errNote(block, dest_ty_src, msg, "use @ptrCast to cast from '{}'", .{operand_ty.fmt(mod)}), else => {}, } @@ -9854,7 +9854,7 @@ fn zirBitcast(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air const msg = try sema.errMsg(block, operand_src, "cannot @bitCast from '{}'", .{operand_ty.fmt(mod)}); errdefer msg.destroy(sema.gpa); switch (dest_ty.zigTypeTag(mod)) { - .Int, .ComptimeInt => try sema.errNote(block, operand_src, msg, "use @enumToInt to cast to '{}'", .{dest_ty.fmt(mod)}), + .Int, .ComptimeInt => try sema.errNote(block, operand_src, msg, "use @intFromEnum to cast to '{}'", .{dest_ty.fmt(mod)}), else => {}, } @@ -9867,7 +9867,7 @@ fn zirBitcast(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air const msg = try sema.errMsg(block, operand_src, "cannot @bitCast from '{}'", .{operand_ty.fmt(mod)}); errdefer msg.destroy(sema.gpa); switch (dest_ty.zigTypeTag(mod)) { - .Int, .ComptimeInt => try sema.errNote(block, operand_src, msg, "use @ptrToInt to cast to '{}'", .{dest_ty.fmt(mod)}), + .Int, .ComptimeInt => try sema.errNote(block, operand_src, msg, "use @intFromPtr to cast to '{}'", .{dest_ty.fmt(mod)}), .Pointer => try sema.errNote(block, operand_src, msg, "use @ptrCast to cast to '{}'", .{dest_ty.fmt(mod)}), else => {}, } @@ -10547,7 +10547,7 @@ const SwitchProngAnalysis = struct { try cases_extra.ensureUnusedCapacity(3 + coerce_block.instructions.items.len); cases_extra.appendAssumeCapacity(1); // items_len cases_extra.appendAssumeCapacity(@intCast(u32, coerce_block.instructions.items.len)); // body_len - cases_extra.appendAssumeCapacity(@enumToInt(case_vals[idx])); // item + cases_extra.appendAssumeCapacity(@intFromEnum(case_vals[idx])); // item cases_extra.appendSliceAssumeCapacity(coerce_block.instructions.items); // body } } @@ -10834,7 +10834,7 @@ fn zirSwitchBlock(sema: *Sema, block: *Block, inst: Zir.Inst.Index, operand_is_r { var scalar_i: u32 = 0; while (scalar_i < scalar_cases_len) : (scalar_i += 1) { - const item_ref = @intToEnum(Zir.Inst.Ref, sema.code.extra[extra_index]); + const item_ref = @enumFromInt(Zir.Inst.Ref, sema.code.extra[extra_index]); extra_index += 1; const info = @bitCast(Zir.Inst.SwitchBlock.ProngInfo, sema.code.extra[extra_index]); extra_index += 1 + info.body_len; @@ -10933,7 +10933,7 @@ fn zirSwitchBlock(sema: *Sema, block: *Block, inst: Zir.Inst.Index, operand_is_r { var scalar_i: u32 = 0; while (scalar_i < scalar_cases_len) : (scalar_i += 1) { - const item_ref = @intToEnum(Zir.Inst.Ref, sema.code.extra[extra_index]); + const item_ref = @enumFromInt(Zir.Inst.Ref, sema.code.extra[extra_index]); extra_index += 1; const info = @bitCast(Zir.Inst.SwitchBlock.ProngInfo, sema.code.extra[extra_index]); extra_index += 1 + info.body_len; @@ -11074,7 +11074,7 @@ fn zirSwitchBlock(sema: *Sema, block: *Block, inst: Zir.Inst.Index, operand_is_r { var scalar_i: u32 = 0; while (scalar_i < scalar_cases_len) : (scalar_i += 1) { - const item_ref = @intToEnum(Zir.Inst.Ref, sema.code.extra[extra_index]); + const item_ref = @enumFromInt(Zir.Inst.Ref, sema.code.extra[extra_index]); extra_index += 1; const info = @bitCast(Zir.Inst.SwitchBlock.ProngInfo, sema.code.extra[extra_index]); extra_index += 1 + info.body_len; @@ -11116,9 +11116,9 @@ fn zirSwitchBlock(sema: *Sema, block: *Block, inst: Zir.Inst.Index, operand_is_r try case_vals.ensureUnusedCapacity(gpa, 2 * ranges_len); var range_i: u32 = 0; while (range_i < ranges_len) : (range_i += 1) { - const item_first = @intToEnum(Zir.Inst.Ref, sema.code.extra[extra_index]); + const item_first = @enumFromInt(Zir.Inst.Ref, sema.code.extra[extra_index]); extra_index += 1; - const item_last = @intToEnum(Zir.Inst.Ref, sema.code.extra[extra_index]); + const item_last = @enumFromInt(Zir.Inst.Ref, sema.code.extra[extra_index]); extra_index += 1; const vals = try sema.validateSwitchRange( @@ -11169,7 +11169,7 @@ fn zirSwitchBlock(sema: *Sema, block: *Block, inst: Zir.Inst.Index, operand_is_r { var scalar_i: u32 = 0; while (scalar_i < scalar_cases_len) : (scalar_i += 1) { - const item_ref = @intToEnum(Zir.Inst.Ref, sema.code.extra[extra_index]); + const item_ref = @enumFromInt(Zir.Inst.Ref, sema.code.extra[extra_index]); extra_index += 1; const info = @bitCast(Zir.Inst.SwitchBlock.ProngInfo, sema.code.extra[extra_index]); extra_index += 1 + info.body_len; @@ -11251,7 +11251,7 @@ fn zirSwitchBlock(sema: *Sema, block: *Block, inst: Zir.Inst.Index, operand_is_r { var scalar_i: u32 = 0; while (scalar_i < scalar_cases_len) : (scalar_i += 1) { - const item_ref = @intToEnum(Zir.Inst.Ref, sema.code.extra[extra_index]); + const item_ref = @enumFromInt(Zir.Inst.Ref, sema.code.extra[extra_index]); extra_index += 1; const info = @bitCast(Zir.Inst.SwitchBlock.ProngInfo, sema.code.extra[extra_index]); extra_index += 1; @@ -11571,7 +11571,7 @@ fn zirSwitchBlock(sema: *Sema, block: *Block, inst: Zir.Inst.Index, operand_is_r try cases_extra.ensureUnusedCapacity(gpa, 3 + case_block.instructions.items.len); cases_extra.appendAssumeCapacity(1); // items_len cases_extra.appendAssumeCapacity(@intCast(u32, case_block.instructions.items.len)); - cases_extra.appendAssumeCapacity(@enumToInt(item)); + cases_extra.appendAssumeCapacity(@intFromEnum(item)); cases_extra.appendSliceAssumeCapacity(case_block.instructions.items); } @@ -11656,7 +11656,7 @@ fn zirSwitchBlock(sema: *Sema, block: *Block, inst: Zir.Inst.Index, operand_is_r try cases_extra.ensureUnusedCapacity(gpa, 3 + case_block.instructions.items.len); cases_extra.appendAssumeCapacity(1); // items_len cases_extra.appendAssumeCapacity(@intCast(u32, case_block.instructions.items.len)); - cases_extra.appendAssumeCapacity(@enumToInt(item_ref)); + cases_extra.appendAssumeCapacity(@intFromEnum(item_ref)); cases_extra.appendSliceAssumeCapacity(case_block.instructions.items); } } @@ -11702,7 +11702,7 @@ fn zirSwitchBlock(sema: *Sema, block: *Block, inst: Zir.Inst.Index, operand_is_r try cases_extra.ensureUnusedCapacity(gpa, 3 + case_block.instructions.items.len); cases_extra.appendAssumeCapacity(1); // items_len cases_extra.appendAssumeCapacity(@intCast(u32, case_block.instructions.items.len)); - cases_extra.appendAssumeCapacity(@enumToInt(item)); + cases_extra.appendAssumeCapacity(@intFromEnum(item)); cases_extra.appendSliceAssumeCapacity(case_block.instructions.items); } @@ -11753,7 +11753,7 @@ fn zirSwitchBlock(sema: *Sema, block: *Block, inst: Zir.Inst.Index, operand_is_r cases_extra.appendAssumeCapacity(@intCast(u32, case_block.instructions.items.len)); for (items) |item| { - cases_extra.appendAssumeCapacity(@enumToInt(item)); + cases_extra.appendAssumeCapacity(@intFromEnum(item)); } cases_extra.appendSliceAssumeCapacity(case_block.instructions.items); @@ -11903,7 +11903,7 @@ fn zirSwitchBlock(sema: *Sema, block: *Block, inst: Zir.Inst.Index, operand_is_r try cases_extra.ensureUnusedCapacity(gpa, 3 + case_block.instructions.items.len); cases_extra.appendAssumeCapacity(1); // items_len cases_extra.appendAssumeCapacity(@intCast(u32, case_block.instructions.items.len)); - cases_extra.appendAssumeCapacity(@enumToInt(item_ref)); + cases_extra.appendAssumeCapacity(@intFromEnum(item_ref)); cases_extra.appendSliceAssumeCapacity(case_block.instructions.items); } }, @@ -11944,7 +11944,7 @@ fn zirSwitchBlock(sema: *Sema, block: *Block, inst: Zir.Inst.Index, operand_is_r try cases_extra.ensureUnusedCapacity(gpa, 3 + case_block.instructions.items.len); cases_extra.appendAssumeCapacity(1); // items_len cases_extra.appendAssumeCapacity(@intCast(u32, case_block.instructions.items.len)); - cases_extra.appendAssumeCapacity(@enumToInt(item_ref)); + cases_extra.appendAssumeCapacity(@intFromEnum(item_ref)); cases_extra.appendSliceAssumeCapacity(case_block.instructions.items); } }, @@ -11975,7 +11975,7 @@ fn zirSwitchBlock(sema: *Sema, block: *Block, inst: Zir.Inst.Index, operand_is_r try cases_extra.ensureUnusedCapacity(gpa, 3 + case_block.instructions.items.len); cases_extra.appendAssumeCapacity(1); // items_len cases_extra.appendAssumeCapacity(@intCast(u32, case_block.instructions.items.len)); - cases_extra.appendAssumeCapacity(@enumToInt(item_ref)); + cases_extra.appendAssumeCapacity(@intFromEnum(item_ref)); cases_extra.appendSliceAssumeCapacity(case_block.instructions.items); } }, @@ -12003,7 +12003,7 @@ fn zirSwitchBlock(sema: *Sema, block: *Block, inst: Zir.Inst.Index, operand_is_r try cases_extra.ensureUnusedCapacity(gpa, 3 + case_block.instructions.items.len); cases_extra.appendAssumeCapacity(1); // items_len cases_extra.appendAssumeCapacity(@intCast(u32, case_block.instructions.items.len)); - cases_extra.appendAssumeCapacity(@enumToInt(Air.Inst.Ref.bool_true)); + cases_extra.appendAssumeCapacity(@intFromEnum(Air.Inst.Ref.bool_true)); cases_extra.appendSliceAssumeCapacity(case_block.instructions.items); } if (false_count == 0) { @@ -12029,7 +12029,7 @@ fn zirSwitchBlock(sema: *Sema, block: *Block, inst: Zir.Inst.Index, operand_is_r try cases_extra.ensureUnusedCapacity(gpa, 3 + case_block.instructions.items.len); cases_extra.appendAssumeCapacity(1); // items_len cases_extra.appendAssumeCapacity(@intCast(u32, case_block.instructions.items.len)); - cases_extra.appendAssumeCapacity(@enumToInt(Air.Inst.Ref.bool_false)); + cases_extra.appendAssumeCapacity(@intFromEnum(Air.Inst.Ref.bool_false)); cases_extra.appendSliceAssumeCapacity(case_block.instructions.items); } }, @@ -15685,7 +15685,7 @@ fn zirAsm( const is_global_assembly = sema.func_index == .none; const asm_source: []const u8 = if (tmpl_is_expr) blk: { - const tmpl = @intToEnum(Zir.Inst.Ref, extra.data.asm_source); + const tmpl = @enumFromInt(Zir.Inst.Ref, extra.data.asm_source); const s: []const u8 = try sema.resolveConstString(block, src, tmpl, "assembly code must be comptime-known"); break :blk s; } else sema.code.nullTerminatedString(extra.data.asm_source); @@ -15789,7 +15789,7 @@ fn zirAsm( .source_len = @intCast(u32, asm_source.len), .outputs_len = outputs_len, .inputs_len = @intCast(u32, args.len), - .flags = (@as(u32, @boolToInt(is_volatile)) << 31) | @intCast(u32, clobbers.len), + .flags = (@as(u32, @intFromBool(is_volatile)) << 31) | @intCast(u32, clobbers.len), }), } }, }); @@ -16448,7 +16448,7 @@ fn zirTypeInfo(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai .EnumLiteral, => |type_info_tag| return sema.addConstant(type_info_ty, (try mod.intern(.{ .un = .{ .ty = type_info_ty.toIntern(), - .tag = (try mod.enumValueFieldIndex(type_info_tag_ty, @enumToInt(type_info_tag))).toIntern(), + .tag = (try mod.enumValueFieldIndex(type_info_tag_ty, @intFromEnum(type_info_tag))).toIntern(), .val = .void_value, } })).toValue()), .Fn => { @@ -16543,7 +16543,7 @@ fn zirTypeInfo(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai const field_values = .{ // calling_convention: CallingConvention, - (try mod.enumValueFieldIndex(callconv_ty, @enumToInt(info.cc))).toIntern(), + (try mod.enumValueFieldIndex(callconv_ty, @intFromEnum(info.cc))).toIntern(), // alignment: comptime_int, (try mod.intValue(Type.comptime_int, ty.abiAlignment(mod))).toIntern(), // is_generic: bool, @@ -16557,7 +16557,7 @@ fn zirTypeInfo(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai }; return sema.addConstant(type_info_ty, (try mod.intern(.{ .un = .{ .ty = type_info_ty.toIntern(), - .tag = (try mod.enumValueFieldIndex(type_info_tag_ty, @enumToInt(std.builtin.TypeId.Fn))).toIntern(), + .tag = (try mod.enumValueFieldIndex(type_info_tag_ty, @intFromEnum(std.builtin.TypeId.Fn))).toIntern(), .val = try mod.intern(.{ .aggregate = .{ .ty = fn_info_ty.toIntern(), .storage = .{ .elems = &field_values }, @@ -16580,13 +16580,13 @@ fn zirTypeInfo(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai const info = ty.intInfo(mod); const field_values = .{ // signedness: Signedness, - try (try mod.enumValueFieldIndex(signedness_ty, @enumToInt(info.signedness))).intern(signedness_ty, mod), + try (try mod.enumValueFieldIndex(signedness_ty, @intFromEnum(info.signedness))).intern(signedness_ty, mod), // bits: u16, (try mod.intValue(Type.u16, info.bits)).toIntern(), }; return sema.addConstant(type_info_ty, (try mod.intern(.{ .un = .{ .ty = type_info_ty.toIntern(), - .tag = (try mod.enumValueFieldIndex(type_info_tag_ty, @enumToInt(std.builtin.TypeId.Int))).toIntern(), + .tag = (try mod.enumValueFieldIndex(type_info_tag_ty, @intFromEnum(std.builtin.TypeId.Int))).toIntern(), .val = try mod.intern(.{ .aggregate = .{ .ty = int_info_ty.toIntern(), .storage = .{ .elems = &field_values }, @@ -16611,7 +16611,7 @@ fn zirTypeInfo(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai }; return sema.addConstant(type_info_ty, (try mod.intern(.{ .un = .{ .ty = type_info_ty.toIntern(), - .tag = (try mod.enumValueFieldIndex(type_info_tag_ty, @enumToInt(std.builtin.TypeId.Float))).toIntern(), + .tag = (try mod.enumValueFieldIndex(type_info_tag_ty, @intFromEnum(std.builtin.TypeId.Float))).toIntern(), .val = try mod.intern(.{ .aggregate = .{ .ty = float_info_ty.toIntern(), .storage = .{ .elems = &field_vals }, @@ -16653,7 +16653,7 @@ fn zirTypeInfo(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai const field_values = .{ // size: Size, - try (try mod.enumValueFieldIndex(ptr_size_ty, @enumToInt(info.size))).intern(ptr_size_ty, mod), + try (try mod.enumValueFieldIndex(ptr_size_ty, @intFromEnum(info.size))).intern(ptr_size_ty, mod), // is_const: bool, Value.makeBool(!info.mutable).toIntern(), // is_volatile: bool, @@ -16661,7 +16661,7 @@ fn zirTypeInfo(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai // alignment: comptime_int, alignment.toIntern(), // address_space: AddressSpace - try (try mod.enumValueFieldIndex(addrspace_ty, @enumToInt(info.@"addrspace"))).intern(addrspace_ty, mod), + try (try mod.enumValueFieldIndex(addrspace_ty, @intFromEnum(info.@"addrspace"))).intern(addrspace_ty, mod), // child: type, info.pointee_type.toIntern(), // is_allowzero: bool, @@ -16671,7 +16671,7 @@ fn zirTypeInfo(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai }; return sema.addConstant(type_info_ty, (try mod.intern(.{ .un = .{ .ty = type_info_ty.toIntern(), - .tag = (try mod.enumValueFieldIndex(type_info_tag_ty, @enumToInt(std.builtin.TypeId.Pointer))).toIntern(), + .tag = (try mod.enumValueFieldIndex(type_info_tag_ty, @intFromEnum(std.builtin.TypeId.Pointer))).toIntern(), .val = try mod.intern(.{ .aggregate = .{ .ty = pointer_ty.toIntern(), .storage = .{ .elems = &field_values }, @@ -16703,7 +16703,7 @@ fn zirTypeInfo(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai }; return sema.addConstant(type_info_ty, (try mod.intern(.{ .un = .{ .ty = type_info_ty.toIntern(), - .tag = (try mod.enumValueFieldIndex(type_info_tag_ty, @enumToInt(std.builtin.TypeId.Array))).toIntern(), + .tag = (try mod.enumValueFieldIndex(type_info_tag_ty, @intFromEnum(std.builtin.TypeId.Array))).toIntern(), .val = try mod.intern(.{ .aggregate = .{ .ty = array_field_ty.toIntern(), .storage = .{ .elems = &field_values }, @@ -16733,7 +16733,7 @@ fn zirTypeInfo(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai }; return sema.addConstant(type_info_ty, (try mod.intern(.{ .un = .{ .ty = type_info_ty.toIntern(), - .tag = (try mod.enumValueFieldIndex(type_info_tag_ty, @enumToInt(std.builtin.TypeId.Vector))).toIntern(), + .tag = (try mod.enumValueFieldIndex(type_info_tag_ty, @intFromEnum(std.builtin.TypeId.Vector))).toIntern(), .val = try mod.intern(.{ .aggregate = .{ .ty = vector_field_ty.toIntern(), .storage = .{ .elems = &field_values }, @@ -16760,7 +16760,7 @@ fn zirTypeInfo(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai }; return sema.addConstant(type_info_ty, (try mod.intern(.{ .un = .{ .ty = type_info_ty.toIntern(), - .tag = (try mod.enumValueFieldIndex(type_info_tag_ty, @enumToInt(std.builtin.TypeId.Optional))).toIntern(), + .tag = (try mod.enumValueFieldIndex(type_info_tag_ty, @intFromEnum(std.builtin.TypeId.Optional))).toIntern(), .val = try mod.intern(.{ .aggregate = .{ .ty = optional_field_ty.toIntern(), .storage = .{ .elems = &field_values }, @@ -16870,7 +16870,7 @@ fn zirTypeInfo(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai // Construct Type{ .ErrorSet = errors_val } return sema.addConstant(type_info_ty, (try mod.intern(.{ .un = .{ .ty = type_info_ty.toIntern(), - .tag = (try mod.enumValueFieldIndex(type_info_tag_ty, @enumToInt(std.builtin.TypeId.ErrorSet))).toIntern(), + .tag = (try mod.enumValueFieldIndex(type_info_tag_ty, @intFromEnum(std.builtin.TypeId.ErrorSet))).toIntern(), .val = errors_val, } })).toValue()); }, @@ -16896,7 +16896,7 @@ fn zirTypeInfo(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai }; return sema.addConstant(type_info_ty, (try mod.intern(.{ .un = .{ .ty = type_info_ty.toIntern(), - .tag = (try mod.enumValueFieldIndex(type_info_tag_ty, @enumToInt(std.builtin.TypeId.ErrorUnion))).toIntern(), + .tag = (try mod.enumValueFieldIndex(type_info_tag_ty, @intFromEnum(std.builtin.TypeId.ErrorUnion))).toIntern(), .val = try mod.intern(.{ .aggregate = .{ .ty = error_union_field_ty.toIntern(), .storage = .{ .elems = &field_values }, @@ -17023,7 +17023,7 @@ fn zirTypeInfo(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai }; return sema.addConstant(type_info_ty, (try mod.intern(.{ .un = .{ .ty = type_info_ty.toIntern(), - .tag = (try mod.enumValueFieldIndex(type_info_tag_ty, @enumToInt(std.builtin.TypeId.Enum))).toIntern(), + .tag = (try mod.enumValueFieldIndex(type_info_tag_ty, @intFromEnum(std.builtin.TypeId.Enum))).toIntern(), .val = try mod.intern(.{ .aggregate = .{ .ty = type_enum_ty.toIntern(), .storage = .{ .elems = &field_values }, @@ -17164,7 +17164,7 @@ fn zirTypeInfo(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai const field_values = .{ // layout: ContainerLayout, - (try mod.enumValueFieldIndex(container_layout_ty, @enumToInt(layout))).toIntern(), + (try mod.enumValueFieldIndex(container_layout_ty, @intFromEnum(layout))).toIntern(), // tag_type: ?type, enum_tag_ty_val, @@ -17175,7 +17175,7 @@ fn zirTypeInfo(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai }; return sema.addConstant(type_info_ty, (try mod.intern(.{ .un = .{ .ty = type_info_ty.toIntern(), - .tag = (try mod.enumValueFieldIndex(type_info_tag_ty, @enumToInt(std.builtin.TypeId.Union))).toIntern(), + .tag = (try mod.enumValueFieldIndex(type_info_tag_ty, @intFromEnum(std.builtin.TypeId.Union))).toIntern(), .val = try mod.intern(.{ .aggregate = .{ .ty = type_union_ty.toIntern(), .storage = .{ .elems = &field_values }, @@ -17393,7 +17393,7 @@ fn zirTypeInfo(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai const field_values = [_]InternPool.Index{ // layout: ContainerLayout, - (try mod.enumValueFieldIndex(container_layout_ty, @enumToInt(layout))).toIntern(), + (try mod.enumValueFieldIndex(container_layout_ty, @intFromEnum(layout))).toIntern(), // backing_integer: ?type, backing_integer_val, // fields: []const StructField, @@ -17405,7 +17405,7 @@ fn zirTypeInfo(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai }; return sema.addConstant(type_info_ty, (try mod.intern(.{ .un = .{ .ty = type_info_ty.toIntern(), - .tag = (try mod.enumValueFieldIndex(type_info_tag_ty, @enumToInt(std.builtin.TypeId.Struct))).toIntern(), + .tag = (try mod.enumValueFieldIndex(type_info_tag_ty, @intFromEnum(std.builtin.TypeId.Struct))).toIntern(), .val = try mod.intern(.{ .aggregate = .{ .ty = type_struct_ty.toIntern(), .storage = .{ .elems = &field_values }, @@ -17437,7 +17437,7 @@ fn zirTypeInfo(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai }; return sema.addConstant(type_info_ty, (try mod.intern(.{ .un = .{ .ty = type_info_ty.toIntern(), - .tag = (try mod.enumValueFieldIndex(type_info_tag_ty, @enumToInt(std.builtin.TypeId.Opaque))).toIntern(), + .tag = (try mod.enumValueFieldIndex(type_info_tag_ty, @intFromEnum(std.builtin.TypeId.Opaque))).toIntern(), .val = try mod.intern(.{ .aggregate = .{ .ty = type_opaque_ty.toIntern(), .storage = .{ .elems = &field_values }, @@ -18494,7 +18494,7 @@ fn zirPtrType(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air var extra_i = extra.end; const sentinel = if (inst_data.flags.has_sentinel) blk: { - const ref = @intToEnum(Zir.Inst.Ref, sema.code.extra[extra_i]); + const ref = @enumFromInt(Zir.Inst.Ref, sema.code.extra[extra_i]); extra_i += 1; const coerced = try sema.coerce(block, elem_ty, try sema.resolveInst(ref), sentinel_src); const val = try sema.resolveConstValue(block, sentinel_src, coerced, "pointer sentinel value must be comptime-known"); @@ -18502,7 +18502,7 @@ fn zirPtrType(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air } else .none; const abi_align: InternPool.Alignment = if (inst_data.flags.has_align) blk: { - const ref = @intToEnum(Zir.Inst.Ref, sema.code.extra[extra_i]); + const ref = @enumFromInt(Zir.Inst.Ref, sema.code.extra[extra_i]); extra_i += 1; const coerced = try sema.coerce(block, Type.u32, try sema.resolveInst(ref), align_src); const val = try sema.resolveConstValue(block, align_src, coerced, "pointer alignment must be comptime-known"); @@ -18521,20 +18521,20 @@ fn zirPtrType(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air } else .none; const address_space: std.builtin.AddressSpace = if (inst_data.flags.has_addrspace) blk: { - const ref = @intToEnum(Zir.Inst.Ref, sema.code.extra[extra_i]); + const ref = @enumFromInt(Zir.Inst.Ref, sema.code.extra[extra_i]); extra_i += 1; break :blk try sema.analyzeAddressSpace(block, addrspace_src, ref, .pointer); } else if (elem_ty.zigTypeTag(mod) == .Fn and target.cpu.arch == .avr) .flash else .generic; const bit_offset = if (inst_data.flags.has_bit_range) blk: { - const ref = @intToEnum(Zir.Inst.Ref, sema.code.extra[extra_i]); + const ref = @enumFromInt(Zir.Inst.Ref, sema.code.extra[extra_i]); extra_i += 1; const bit_offset = try sema.resolveInt(block, bitoffset_src, ref, Type.u16, "pointer bit-offset must be comptime-known"); break :blk @intCast(u16, bit_offset); } else 0; const host_size: u16 = if (inst_data.flags.has_bit_range) blk: { - const ref = @intToEnum(Zir.Inst.Ref, sema.code.extra[extra_i]); + const ref = @enumFromInt(Zir.Inst.Ref, sema.code.extra[extra_i]); extra_i += 1; const host_size = try sema.resolveInt(block, hostsize_src, ref, Type.u16, "pointer host size must be comptime-known"); break :blk @intCast(u16, host_size); @@ -19093,7 +19093,7 @@ fn zirArrayInit( const array_ty = try sema.resolveType(block, src, args[0]); const sentinel_val = array_ty.sentinel(mod); - const resolved_args = try gpa.alloc(Air.Inst.Ref, args.len - 1 + @boolToInt(sentinel_val != null)); + const resolved_args = try gpa.alloc(Air.Inst.Ref, args.len - 1 + @intFromBool(sentinel_val != null)); defer gpa.free(resolved_args); for (args[1..], 0..) |arg, i| { const resolved_arg = try sema.resolveInst(arg); @@ -19600,7 +19600,7 @@ fn zirReify( const mod = sema.mod; const gpa = sema.gpa; const ip = &mod.intern_pool; - const name_strategy = @intToEnum(Zir.Inst.NameStrategy, extended.small); + const name_strategy = @enumFromInt(Zir.Inst.NameStrategy, extended.small); const extra = sema.code.extraData(Zir.Inst.UnNode, extended.operand).data; const src = LazySrcLoc.nodeOffset(extra.node); const type_info_ty = try sema.getBuiltinType("Type"); @@ -19612,7 +19612,7 @@ fn zirReify( const target = mod.getTarget(); if (try union_val.val.toValue().anyUndef(mod)) return sema.failWithUseOfUndef(block, src); const tag_index = type_info_ty.unionTagFieldIndex(union_val.tag.toValue(), mod).?; - switch (@intToEnum(std.builtin.TypeId, tag_index)) { + switch (@enumFromInt(std.builtin.TypeId, tag_index)) { .Type => return Air.Inst.Ref.type_type, .Void => return Air.Inst.Ref.void_type, .Bool => return Air.Inst.Ref.bool_type, @@ -20762,7 +20762,7 @@ fn zirIntFromFloat(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileErro try sema.checkFloatType(block, operand_src, operand_ty); if (try sema.resolveMaybeUndefVal(operand)) |val| { - const result_val = try sema.floatToInt(block, operand_src, val, operand_ty, dest_ty); + const result_val = try sema.intFromFloat(block, operand_src, val, operand_ty, dest_ty); return sema.addConstant(dest_ty, result_val); } else if (dest_ty.zigTypeTag(mod) == .ComptimeInt) { return sema.failWithNeededComptime(block, operand_src, "value being casted to 'comptime_int' must be comptime-known"); @@ -20802,7 +20802,7 @@ fn zirFloatFromInt(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileErro _ = try sema.checkIntType(block, operand_src, operand_ty); if (try sema.resolveMaybeUndefVal(operand)) |val| { - const result_val = try val.intToFloatAdvanced(sema.arena, operand_ty, dest_ty, sema.mod, sema); + const result_val = try val.floatFromIntAdvanced(sema.arena, operand_ty, dest_ty, sema.mod, sema); return sema.addConstant(dest_ty, result_val); } else if (dest_ty.zigTypeTag(mod) == .ComptimeFloat) { return sema.failWithNeededComptime(block, operand_src, "value being casted to 'comptime_float' must be comptime-known"); @@ -21750,7 +21750,7 @@ fn checkComptimeVarStore( src: LazySrcLoc, decl_ref_mut: InternPool.Key.Ptr.Addr.MutDecl, ) CompileError!void { - if (@enumToInt(decl_ref_mut.runtime_index) < @enumToInt(block.runtime_index)) { + if (@intFromEnum(decl_ref_mut.runtime_index) < @intFromEnum(block.runtime_index)) { if (block.runtime_cond) |cond_src| { const msg = msg: { const msg = try sema.errMsg(block, src, "store to comptime variable depends on runtime condition", .{}); @@ -22065,13 +22065,13 @@ fn zirCmpxchg( const success_order = try sema.resolveAtomicOrder(block, success_order_src, extra.success_order, "atomic order of cmpxchg success must be comptime-known"); const failure_order = try sema.resolveAtomicOrder(block, failure_order_src, extra.failure_order, "atomic order of cmpxchg failure must be comptime-known"); - if (@enumToInt(success_order) < @enumToInt(std.builtin.AtomicOrder.Monotonic)) { + if (@intFromEnum(success_order) < @intFromEnum(std.builtin.AtomicOrder.Monotonic)) { return sema.fail(block, success_order_src, "success atomic ordering must be Monotonic or stricter", .{}); } - if (@enumToInt(failure_order) < @enumToInt(std.builtin.AtomicOrder.Monotonic)) { + if (@intFromEnum(failure_order) < @intFromEnum(std.builtin.AtomicOrder.Monotonic)) { return sema.fail(block, failure_order_src, "failure atomic ordering must be Monotonic or stricter", .{}); } - if (@enumToInt(failure_order) > @enumToInt(success_order)) { + if (@intFromEnum(failure_order) > @intFromEnum(success_order)) { return sema.fail(block, failure_order_src, "failure atomic ordering must be no stricter than success", .{}); } if (failure_order == .Release or failure_order == .AcqRel) { @@ -22110,8 +22110,8 @@ fn zirCmpxchg( } else break :rs expected_src; } else ptr_src; - const flags: u32 = @as(u32, @enumToInt(success_order)) | - (@as(u32, @enumToInt(failure_order)) << 3); + const flags: u32 = @as(u32, @intFromEnum(success_order)) | + (@as(u32, @intFromEnum(failure_order)) << 3); try sema.requireRuntimeBlock(block, src, runtime_src); return block.addInst(.{ @@ -22610,7 +22610,7 @@ fn zirAtomicRmw(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!A } else break :rs ptr_src; } else ptr_src; - const flags: u32 = @as(u32, @enumToInt(order)) | (@as(u32, @enumToInt(op)) << 3); + const flags: u32 = @as(u32, @intFromEnum(order)) | (@as(u32, @intFromEnum(op)) << 3); try sema.requireRuntimeBlock(block, src, runtime_src); return block.addInst(.{ @@ -23556,7 +23556,7 @@ fn zirVarExtended( assert(!small.has_align); const uncasted_init: Air.Inst.Ref = if (small.has_init) blk: { - const init_ref = @intToEnum(Zir.Inst.Ref, sema.code.extra[extra_index]); + const init_ref = @enumFromInt(Zir.Inst.Ref, sema.code.extra[extra_index]); extra_index += 1; break :blk try sema.resolveInst(init_ref); } else .none; @@ -23641,7 +23641,7 @@ fn zirFuncFancy(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!A break :blk alignment; } } else if (extra.data.bits.has_align_ref) blk: { - const align_ref = @intToEnum(Zir.Inst.Ref, sema.code.extra[extra_index]); + const align_ref = @enumFromInt(Zir.Inst.Ref, sema.code.extra[extra_index]); extra_index += 1; const align_tv = sema.resolveInstConst(block, align_src, align_ref, "alignment must be comptime-known") catch |err| switch (err) { error.GenericPoison => { @@ -23671,7 +23671,7 @@ fn zirFuncFancy(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!A } break :blk mod.toEnum(std.builtin.AddressSpace, val); } else if (extra.data.bits.has_addrspace_ref) blk: { - const addrspace_ref = @intToEnum(Zir.Inst.Ref, sema.code.extra[extra_index]); + const addrspace_ref = @enumFromInt(Zir.Inst.Ref, sema.code.extra[extra_index]); extra_index += 1; const addrspace_tv = sema.resolveInstConst(block, addrspace_src, addrspace_ref, "addrespace must be comptime-known") catch |err| switch (err) { error.GenericPoison => { @@ -23695,7 +23695,7 @@ fn zirFuncFancy(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!A } break :blk FuncLinkSection{ .explicit = try val.toIpString(ty, mod) }; } else if (extra.data.bits.has_section_ref) blk: { - const section_ref = @intToEnum(Zir.Inst.Ref, sema.code.extra[extra_index]); + const section_ref = @enumFromInt(Zir.Inst.Ref, sema.code.extra[extra_index]); extra_index += 1; const section_name = sema.resolveConstStringIntern(block, section_src, section_ref, "linksection must be comptime-known") catch |err| switch (err) { error.GenericPoison => { @@ -23719,7 +23719,7 @@ fn zirFuncFancy(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!A } break :blk mod.toEnum(std.builtin.CallingConvention, val); } else if (extra.data.bits.has_cc_ref) blk: { - const cc_ref = @intToEnum(Zir.Inst.Ref, sema.code.extra[extra_index]); + const cc_ref = @enumFromInt(Zir.Inst.Ref, sema.code.extra[extra_index]); extra_index += 1; const cc_tv = sema.resolveInstConst(block, cc_src, cc_ref, "calling convention must be comptime-known") catch |err| switch (err) { error.GenericPoison => { @@ -23743,7 +23743,7 @@ fn zirFuncFancy(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!A const ty = val.toType(); break :blk ty; } else if (extra.data.bits.has_ret_ty_ref) blk: { - const ret_ty_ref = @intToEnum(Zir.Inst.Ref, sema.code.extra[extra_index]); + const ret_ty_ref = @enumFromInt(Zir.Inst.Ref, sema.code.extra[extra_index]); extra_index += 1; const ret_ty_tv = sema.resolveInstConst(block, ret_src, ret_ty_ref, "return type must be comptime-known") catch |err| switch (err) { error.GenericPoison => { @@ -26354,7 +26354,7 @@ fn elemValArray( const array_ty = sema.typeOf(array); const array_sent = array_ty.sentinel(mod); const array_len = array_ty.arrayLen(mod); - const array_len_s = array_len + @boolToInt(array_sent != null); + const array_len_s = array_len + @intFromBool(array_sent != null); const elem_ty = array_ty.childType(mod); if (array_len_s == 0) { @@ -26419,7 +26419,7 @@ fn elemPtrArray( const array_ty = array_ptr_ty.childType(mod); const array_sent = array_ty.sentinel(mod) != null; const array_len = array_ty.arrayLen(mod); - const array_len_s = array_len + @boolToInt(array_sent); + const array_len_s = array_len + @intFromBool(array_sent); if (array_len_s == 0) { return sema.fail(block, array_ptr_src, "indexing into empty array is not allowed", .{}); @@ -26489,7 +26489,7 @@ fn elemValSlice( if (maybe_slice_val) |slice_val| { runtime_src = elem_index_src; const slice_len = slice_val.sliceLen(mod); - const slice_len_s = slice_len + @boolToInt(slice_sent); + const slice_len_s = slice_len + @intFromBool(slice_sent); if (slice_len_s == 0) { return sema.fail(block, slice_src, "indexing into empty slice is not allowed", .{}); } @@ -26551,7 +26551,7 @@ fn elemPtrSlice( return sema.addConstUndef(elem_ptr_ty); } const slice_len = slice_val.sliceLen(mod); - const slice_len_s = slice_len + @boolToInt(slice_sent); + const slice_len_s = slice_len + @intFromBool(slice_sent); if (slice_len_s == 0) { return sema.fail(block, slice_src, "indexing into empty slice is not allowed", .{}); } @@ -27020,7 +27020,7 @@ fn coerceExtra( .{ val.fmtValue(inst_ty, mod), dest_ty.fmt(mod) }, ); } - const result_val = try sema.floatToInt(block, inst_src, val, inst_ty, dest_ty); + const result_val = try sema.intFromFloat(block, inst_src, val, inst_ty, dest_ty); return try sema.addConstant(dest_ty, result_val); }, .Int, .ComptimeInt => { @@ -27102,9 +27102,9 @@ fn coerceExtra( } break :int; }; - const result_val = try val.intToFloatAdvanced(sema.arena, inst_ty, dest_ty, mod, sema); + const result_val = try val.floatFromIntAdvanced(sema.arena, inst_ty, dest_ty, mod, sema); // TODO implement this compile error - //const int_again_val = try result_val.floatToInt(sema.arena, inst_ty); + //const int_again_val = try result_val.intFromFloat(sema.arena, inst_ty); //if (!int_again_val.eql(val, inst_ty, mod)) { // return sema.fail( // block, @@ -30773,7 +30773,7 @@ fn analyzeSlice( } const has_sentinel = slice_ty.sentinel(mod) != null; const slice_len = slice_val.sliceLen(mod); - const len_plus_sent = slice_len + @boolToInt(has_sentinel); + const len_plus_sent = slice_len + @intFromBool(has_sentinel); const slice_len_val_with_sentinel = try mod.intValue(Type.usize, len_plus_sent); if (!(try sema.compareAll(end_val, .lte, slice_len_val_with_sentinel, Type.usize))) { const sentinel_label: []const u8 = if (has_sentinel) @@ -31234,12 +31234,12 @@ fn cmpNumeric( } else { lhs_bits = lhs_val.intBitCountTwosComp(mod); } - lhs_bits += @boolToInt(!lhs_is_signed and dest_int_is_signed); + lhs_bits += @intFromBool(!lhs_is_signed and dest_int_is_signed); } else if (lhs_is_float) { dest_float_type = lhs_ty; } else { const int_info = lhs_ty.intInfo(mod); - lhs_bits = int_info.bits + @boolToInt(int_info.signedness == .unsigned and dest_int_is_signed); + lhs_bits = int_info.bits + @intFromBool(int_info.signedness == .unsigned and dest_int_is_signed); } var rhs_bits: usize = undefined; @@ -31292,12 +31292,12 @@ fn cmpNumeric( } else { rhs_bits = rhs_val.intBitCountTwosComp(mod); } - rhs_bits += @boolToInt(!rhs_is_signed and dest_int_is_signed); + rhs_bits += @intFromBool(!rhs_is_signed and dest_int_is_signed); } else if (rhs_is_float) { dest_float_type = rhs_ty; } else { const int_info = rhs_ty.intInfo(mod); - rhs_bits = int_info.bits + @boolToInt(int_info.signedness == .unsigned and dest_int_is_signed); + rhs_bits = int_info.bits + @intFromBool(int_info.signedness == .unsigned and dest_int_is_signed); } const dest_ty = if (dest_float_type) |ft| ft else blk: { @@ -31356,7 +31356,7 @@ fn compareIntsOnlyPossibleResult( .neq, .lt, .lte => true, }; - const sign_adj = @boolToInt(!is_negative and rhs_info.signedness == .signed); + const sign_adj = @intFromBool(!is_negative and rhs_info.signedness == .signed); const req_bits = lhs_val.intBitCountTwosComp(mod) + sign_adj; // No sized type can have more than 65535 bits. @@ -31628,7 +31628,7 @@ const PeerResolveStrategy = enum { // Our merging should be order-independent. Thus, even though the union order is arbitrary, // by sorting the tags and switching first on the smaller, we have half as many cases to // worry about (since we avoid the duplicates). - const s0_is_a = @enumToInt(a) <= @enumToInt(b); + const s0_is_a = @intFromEnum(a) <= @intFromEnum(b); const s0 = if (s0_is_a) a else b; const s1 = if (s0_is_a) b else a; @@ -33288,9 +33288,9 @@ fn semaBackingIntType(mod: *Module, struct_obj: *Module.Struct) CompileError!voi if (small.has_backing_int) { var extra_index: usize = extended.operand; - extra_index += @boolToInt(small.has_src_node); - extra_index += @boolToInt(small.has_fields_len); - extra_index += @boolToInt(small.has_decls_len); + extra_index += @intFromBool(small.has_src_node); + extra_index += @intFromBool(small.has_fields_len); + extra_index += @intFromBool(small.has_decls_len); const backing_int_body_len = zir.extra[extra_index]; extra_index += 1; @@ -33338,7 +33338,7 @@ fn semaBackingIntType(mod: *Module, struct_obj: *Module.Struct) CompileError!voi const backing_int_src: LazySrcLoc = .{ .node_offset_container_tag = 0 }; const backing_int_ty = blk: { if (backing_int_body_len == 0) { - const backing_int_ref = @intToEnum(Zir.Inst.Ref, zir.extra[extra_index]); + const backing_int_ref = @enumFromInt(Zir.Inst.Ref, zir.extra[extra_index]); break :blk try sema.resolveType(&block, backing_int_src, backing_int_ref); } else { const body = zir.extra[extra_index..][0..backing_int_body_len]; @@ -34013,7 +34013,7 @@ fn semaStructFields(mod: *Module, struct_obj: *Module.Struct) CompileError!void var extra_index: usize = extended.operand; const src = LazySrcLoc.nodeOffset(0); - extra_index += @boolToInt(small.has_src_node); + extra_index += @intFromBool(small.has_src_node); const fields_len = if (small.has_fields_len) blk: { const fields_len = zir.extra[extra_index]; @@ -34140,7 +34140,7 @@ fn semaStructFields(mod: *Module, struct_obj: *Module.Struct) CompileError!void if (has_type_body) { fields[field_i].type_body_len = zir.extra[extra_index]; } else { - fields[field_i].type_ref = @intToEnum(Zir.Inst.Ref, zir.extra[extra_index]); + fields[field_i].type_ref = @enumFromInt(Zir.Inst.Ref, zir.extra[extra_index]); } extra_index += 1; @@ -34364,10 +34364,10 @@ fn semaUnionFields(mod: *Module, union_obj: *Module.Union) CompileError!void { var extra_index: usize = extended.operand; const src = LazySrcLoc.nodeOffset(0); - extra_index += @boolToInt(small.has_src_node); + extra_index += @intFromBool(small.has_src_node); const tag_type_ref: Zir.Inst.Ref = if (small.has_tag_type) blk: { - const ty_ref = @intToEnum(Zir.Inst.Ref, zir.extra[extra_index]); + const ty_ref = @enumFromInt(Zir.Inst.Ref, zir.extra[extra_index]); extra_index += 1; break :blk ty_ref; } else .none; @@ -34532,19 +34532,19 @@ fn semaUnionFields(mod: *Module, union_obj: *Module.Union) CompileError!void { extra_index += 1; const field_type_ref: Zir.Inst.Ref = if (has_type) blk: { - const field_type_ref = @intToEnum(Zir.Inst.Ref, zir.extra[extra_index]); + const field_type_ref = @enumFromInt(Zir.Inst.Ref, zir.extra[extra_index]); extra_index += 1; break :blk field_type_ref; } else .none; const align_ref: Zir.Inst.Ref = if (has_align) blk: { - const align_ref = @intToEnum(Zir.Inst.Ref, zir.extra[extra_index]); + const align_ref = @enumFromInt(Zir.Inst.Ref, zir.extra[extra_index]); extra_index += 1; break :blk align_ref; } else .none; const tag_ref: Air.Inst.Ref = if (has_tag) blk: { - const tag_ref = @intToEnum(Zir.Inst.Ref, zir.extra[extra_index]); + const tag_ref = @enumFromInt(Zir.Inst.Ref, zir.extra[extra_index]); extra_index += 1; break :blk try sema.resolveInst(tag_ref); } else .none; @@ -34955,7 +34955,7 @@ pub fn typeHasOnePossibleValue(sema: *Sema, ty: Type) CompileError!?Value { inline .array_type, .vector_type => |seq_type, seq_tag| { const has_sentinel = seq_tag == .array_type and seq_type.sentinel != .none; - if (seq_type.len + @boolToInt(has_sentinel) == 0) return (try mod.intern(.{ .aggregate = .{ + if (seq_type.len + @intFromBool(has_sentinel) == 0) return (try mod.intern(.{ .aggregate = .{ .ty = ty.toIntern(), .storage = .{ .elems = &.{} }, } })).toValue(); @@ -35177,8 +35177,8 @@ pub fn getTmpAir(sema: Sema) Air { } pub fn addType(sema: *Sema, ty: Type) !Air.Inst.Ref { - if (@enumToInt(ty.toIntern()) < Air.ref_start_index) - return @intToEnum(Air.Inst.Ref, @enumToInt(ty.toIntern())); + if (@intFromEnum(ty.toIntern()) < Air.ref_start_index) + return @enumFromInt(Air.Inst.Ref, @intFromEnum(ty.toIntern())); try sema.air_instructions.append(sema.gpa, .{ .tag = .interned, .data = .{ .interned = ty.toIntern() }, @@ -35209,8 +35209,8 @@ pub fn addConstant(sema: *Sema, ty: Type, val: Value) SemaError!Air.Inst.Ref { }); } } - if (@enumToInt(val.toIntern()) < Air.ref_start_index) - return @intToEnum(Air.Inst.Ref, @enumToInt(val.toIntern())); + if (@intFromEnum(val.toIntern()) < Air.ref_start_index) + return @enumFromInt(Air.Inst.Ref, @intFromEnum(val.toIntern())); try sema.air_instructions.append(gpa, .{ .tag = .interned, .data = .{ .interned = val.toIntern() }, @@ -35230,9 +35230,9 @@ pub fn addExtraAssumeCapacity(sema: *Sema, extra: anytype) u32 { inline for (fields) |field| { sema.air_extra.appendAssumeCapacity(switch (field.type) { u32 => @field(extra, field.name), - Air.Inst.Ref => @enumToInt(@field(extra, field.name)), + Air.Inst.Ref => @intFromEnum(@field(extra, field.name)), i32 => @bitCast(u32, @field(extra, field.name)), - InternPool.Index => @enumToInt(@field(extra, field.name)), + InternPool.Index => @intFromEnum(@field(extra, field.name)), else => @compileError("bad field type: " ++ @typeName(field.type)), }); } @@ -36001,12 +36001,12 @@ fn intSubWithOverflowScalar( const overflowed = result_bigint.subWrap(lhs_bigint, rhs_bigint, info.signedness, info.bits); const wrapped_result = try mod.intValue_big(ty, result_bigint.toConst()); return Value.OverflowArithmeticResult{ - .overflow_bit = try mod.intValue(Type.u1, @boolToInt(overflowed)), + .overflow_bit = try mod.intValue(Type.u1, @intFromBool(overflowed)), .wrapped_result = wrapped_result, }; } -fn floatToInt( +fn intFromFloat( sema: *Sema, block: *Block, src: LazySrcLoc, @@ -36021,14 +36021,14 @@ fn floatToInt( const scalar_ty = int_ty.scalarType(mod); for (result_data, 0..) |*scalar, i| { const elem_val = try val.elemValue(sema.mod, i); - scalar.* = try (try sema.floatToIntScalar(block, src, elem_val, elem_ty, int_ty.scalarType(mod))).intern(scalar_ty, mod); + scalar.* = try (try sema.intFromFloatScalar(block, src, elem_val, elem_ty, int_ty.scalarType(mod))).intern(scalar_ty, mod); } return (try mod.intern(.{ .aggregate = .{ .ty = int_ty.toIntern(), .storage = .{ .elems = result_data }, } })).toValue(); } - return sema.floatToIntScalar(block, src, val, float_ty, int_ty); + return sema.intFromFloatScalar(block, src, val, float_ty, int_ty); } // float is expected to be finite and non-NaN @@ -36056,7 +36056,7 @@ fn float128IntPartToBigInt( return rational.p; } -fn floatToIntScalar( +fn intFromFloatScalar( sema: *Sema, block: *Block, src: LazySrcLoc, @@ -36123,21 +36123,21 @@ fn intFitsInType( return big_int.fitsInTwosComp(info.signedness, info.bits); }, .lazy_align => |lazy_ty| { - const max_needed_bits = @as(u16, 16) + @boolToInt(info.signedness == .signed); + const max_needed_bits = @as(u16, 16) + @intFromBool(info.signedness == .signed); // If it is u16 or bigger we know the alignment fits without resolving it. if (info.bits >= max_needed_bits) return true; const x = try sema.typeAbiAlignment(lazy_ty.toType()); if (x == 0) return true; - const actual_needed_bits = std.math.log2(x) + 1 + @boolToInt(info.signedness == .signed); + const actual_needed_bits = std.math.log2(x) + 1 + @intFromBool(info.signedness == .signed); return info.bits >= actual_needed_bits; }, .lazy_size => |lazy_ty| { - const max_needed_bits = @as(u16, 64) + @boolToInt(info.signedness == .signed); + const max_needed_bits = @as(u16, 64) + @intFromBool(info.signedness == .signed); // If it is u64 or bigger we know the size fits without resolving it. if (info.bits >= max_needed_bits) return true; const x = try sema.typeAbiSize(lazy_ty.toType()); if (x == 0) return true; - const actual_needed_bits = std.math.log2(x) + 1 + @boolToInt(info.signedness == .signed); + const actual_needed_bits = std.math.log2(x) + 1 + @intFromBool(info.signedness == .signed); return info.bits >= actual_needed_bits; }, }, @@ -36146,7 +36146,7 @@ fn intFitsInType( return switch (aggregate.storage) { .bytes => |bytes| for (bytes, 0..) |byte, i| { if (byte == 0) continue; - const actual_needed_bits = std.math.log2(byte) + 1 + @boolToInt(info.signedness == .signed); + const actual_needed_bits = std.math.log2(byte) + 1 + @intFromBool(info.signedness == .signed); if (info.bits >= actual_needed_bits) continue; if (vector_index) |vi| vi.* = i; break false; @@ -36242,7 +36242,7 @@ fn intAddWithOverflowScalar( const overflowed = result_bigint.addWrap(lhs_bigint, rhs_bigint, info.signedness, info.bits); const result = try mod.intValue_big(ty, result_bigint.toConst()); return Value.OverflowArithmeticResult{ - .overflow_bit = try mod.intValue(Type.u1, @boolToInt(overflowed)), + .overflow_bit = try mod.intValue(Type.u1, @intFromBool(overflowed)), .wrapped_result = result, }; } @@ -36352,7 +36352,7 @@ fn elemPtrType(sema: *Sema, ptr_ty: Type, offset: ?usize) !Type { break :blk .{ .host_size = @intCast(u16, parent_ty.arrayLen(mod)), .alignment = @intCast(u16, parent_ty.abiAlignment(mod)), - .vector_index = if (offset) |some| @intToEnum(VI, some) else .runtime, + .vector_index = if (offset) |some| @enumFromInt(VI, some) else .runtime, }; } else .{}; diff --git a/src/TypedValue.zig b/src/TypedValue.zig index 93454710dc..159297a4e8 100644 --- a/src/TypedValue.zig +++ b/src/TypedValue.zig @@ -41,8 +41,8 @@ pub fn hash(tv: TypedValue, hasher: *std.hash.Wyhash, mod: *Module) void { return tv.val.hash(tv.ty, hasher, mod); } -pub fn enumToInt(tv: TypedValue, mod: *Module) Allocator.Error!Value { - return tv.val.enumToInt(tv.ty, mod); +pub fn intFromEnum(tv: TypedValue, mod: *Module) Allocator.Error!Value { + return tv.val.intFromEnum(tv.ty, mod); } const max_aggregate_items = 100; @@ -240,7 +240,7 @@ pub fn print( try writer.print(".{i}", .{enum_type.names[tag_index].fmt(ip)}); return; } - try writer.writeAll("@intToEnum("); + try writer.writeAll("@enumFromInt("); try print(.{ .ty = Type.type, .val = enum_tag.ty.toValue(), diff --git a/src/Zir.zig b/src/Zir.zig index 5b00dc22aa..4a0fdde24f 100644 --- a/src/Zir.zig +++ b/src/Zir.zig @@ -74,7 +74,7 @@ pub fn extraData(code: Zir, comptime T: type, index: usize) struct { data: T, en inline for (fields) |field| { @field(result, field.name) = switch (field.type) { u32 => code.extra[i], - Inst.Ref => @intToEnum(Inst.Ref, code.extra[i]), + Inst.Ref => @enumFromInt(Inst.Ref, code.extra[i]), i32 => @bitCast(i32, code.extra[i]), Inst.Call.Flags => @bitCast(Inst.Call.Flags, code.extra[i]), Inst.BuiltinCall.Flags => @bitCast(Inst.BuiltinCall.Flags, code.extra[i]), @@ -105,7 +105,7 @@ pub fn refSlice(code: Zir, start: usize, len: usize) []Inst.Ref { } pub fn hasCompileErrors(code: Zir) bool { - return code.extra[@enumToInt(ExtraIndex.compile_errors)] != 0; + return code.extra[@intFromEnum(ExtraIndex.compile_errors)] != 0; } pub fn deinit(code: *Zir, gpa: Allocator) void { @@ -1934,7 +1934,7 @@ pub const Inst = struct { /// Implement builtin `@errToInt`. /// `operand` is payload index to `UnNode`. int_from_error, - /// Implement builtin `@intToError`. + /// Implement builtin `@errorFromInt`. /// `operand` is payload index to `UnNode`. error_from_int, /// Implement builtin `@Type`. @@ -2005,93 +2005,93 @@ pub const Inst = struct { /// The tag type is specified so that it is safe to bitcast between `[]u32` /// and `[]Ref`. pub const Ref = enum(u32) { - u1_type = @enumToInt(InternPool.Index.u1_type), - u8_type = @enumToInt(InternPool.Index.u8_type), - i8_type = @enumToInt(InternPool.Index.i8_type), - u16_type = @enumToInt(InternPool.Index.u16_type), - i16_type = @enumToInt(InternPool.Index.i16_type), - u29_type = @enumToInt(InternPool.Index.u29_type), - u32_type = @enumToInt(InternPool.Index.u32_type), - i32_type = @enumToInt(InternPool.Index.i32_type), - u64_type = @enumToInt(InternPool.Index.u64_type), - i64_type = @enumToInt(InternPool.Index.i64_type), - u80_type = @enumToInt(InternPool.Index.u80_type), - u128_type = @enumToInt(InternPool.Index.u128_type), - i128_type = @enumToInt(InternPool.Index.i128_type), - usize_type = @enumToInt(InternPool.Index.usize_type), - isize_type = @enumToInt(InternPool.Index.isize_type), - c_char_type = @enumToInt(InternPool.Index.c_char_type), - c_short_type = @enumToInt(InternPool.Index.c_short_type), - c_ushort_type = @enumToInt(InternPool.Index.c_ushort_type), - c_int_type = @enumToInt(InternPool.Index.c_int_type), - c_uint_type = @enumToInt(InternPool.Index.c_uint_type), - c_long_type = @enumToInt(InternPool.Index.c_long_type), - c_ulong_type = @enumToInt(InternPool.Index.c_ulong_type), - c_longlong_type = @enumToInt(InternPool.Index.c_longlong_type), - c_ulonglong_type = @enumToInt(InternPool.Index.c_ulonglong_type), - c_longdouble_type = @enumToInt(InternPool.Index.c_longdouble_type), - f16_type = @enumToInt(InternPool.Index.f16_type), - f32_type = @enumToInt(InternPool.Index.f32_type), - f64_type = @enumToInt(InternPool.Index.f64_type), - f80_type = @enumToInt(InternPool.Index.f80_type), - f128_type = @enumToInt(InternPool.Index.f128_type), - anyopaque_type = @enumToInt(InternPool.Index.anyopaque_type), - bool_type = @enumToInt(InternPool.Index.bool_type), - void_type = @enumToInt(InternPool.Index.void_type), - type_type = @enumToInt(InternPool.Index.type_type), - anyerror_type = @enumToInt(InternPool.Index.anyerror_type), - comptime_int_type = @enumToInt(InternPool.Index.comptime_int_type), - comptime_float_type = @enumToInt(InternPool.Index.comptime_float_type), - noreturn_type = @enumToInt(InternPool.Index.noreturn_type), - anyframe_type = @enumToInt(InternPool.Index.anyframe_type), - null_type = @enumToInt(InternPool.Index.null_type), - undefined_type = @enumToInt(InternPool.Index.undefined_type), - enum_literal_type = @enumToInt(InternPool.Index.enum_literal_type), - atomic_order_type = @enumToInt(InternPool.Index.atomic_order_type), - atomic_rmw_op_type = @enumToInt(InternPool.Index.atomic_rmw_op_type), - calling_convention_type = @enumToInt(InternPool.Index.calling_convention_type), - address_space_type = @enumToInt(InternPool.Index.address_space_type), - float_mode_type = @enumToInt(InternPool.Index.float_mode_type), - reduce_op_type = @enumToInt(InternPool.Index.reduce_op_type), - call_modifier_type = @enumToInt(InternPool.Index.call_modifier_type), - prefetch_options_type = @enumToInt(InternPool.Index.prefetch_options_type), - export_options_type = @enumToInt(InternPool.Index.export_options_type), - extern_options_type = @enumToInt(InternPool.Index.extern_options_type), - type_info_type = @enumToInt(InternPool.Index.type_info_type), - manyptr_u8_type = @enumToInt(InternPool.Index.manyptr_u8_type), - manyptr_const_u8_type = @enumToInt(InternPool.Index.manyptr_const_u8_type), - manyptr_const_u8_sentinel_0_type = @enumToInt(InternPool.Index.manyptr_const_u8_sentinel_0_type), - single_const_pointer_to_comptime_int_type = @enumToInt(InternPool.Index.single_const_pointer_to_comptime_int_type), - slice_const_u8_type = @enumToInt(InternPool.Index.slice_const_u8_type), - slice_const_u8_sentinel_0_type = @enumToInt(InternPool.Index.slice_const_u8_sentinel_0_type), - anyerror_void_error_union_type = @enumToInt(InternPool.Index.anyerror_void_error_union_type), - generic_poison_type = @enumToInt(InternPool.Index.generic_poison_type), - empty_struct_type = @enumToInt(InternPool.Index.empty_struct_type), - undef = @enumToInt(InternPool.Index.undef), - zero = @enumToInt(InternPool.Index.zero), - zero_usize = @enumToInt(InternPool.Index.zero_usize), - zero_u8 = @enumToInt(InternPool.Index.zero_u8), - one = @enumToInt(InternPool.Index.one), - one_usize = @enumToInt(InternPool.Index.one_usize), - one_u8 = @enumToInt(InternPool.Index.one_u8), - four_u8 = @enumToInt(InternPool.Index.four_u8), - negative_one = @enumToInt(InternPool.Index.negative_one), - calling_convention_c = @enumToInt(InternPool.Index.calling_convention_c), - calling_convention_inline = @enumToInt(InternPool.Index.calling_convention_inline), - void_value = @enumToInt(InternPool.Index.void_value), - unreachable_value = @enumToInt(InternPool.Index.unreachable_value), - null_value = @enumToInt(InternPool.Index.null_value), - bool_true = @enumToInt(InternPool.Index.bool_true), - bool_false = @enumToInt(InternPool.Index.bool_false), - empty_struct = @enumToInt(InternPool.Index.empty_struct), - generic_poison = @enumToInt(InternPool.Index.generic_poison), + u1_type = @intFromEnum(InternPool.Index.u1_type), + u8_type = @intFromEnum(InternPool.Index.u8_type), + i8_type = @intFromEnum(InternPool.Index.i8_type), + u16_type = @intFromEnum(InternPool.Index.u16_type), + i16_type = @intFromEnum(InternPool.Index.i16_type), + u29_type = @intFromEnum(InternPool.Index.u29_type), + u32_type = @intFromEnum(InternPool.Index.u32_type), + i32_type = @intFromEnum(InternPool.Index.i32_type), + u64_type = @intFromEnum(InternPool.Index.u64_type), + i64_type = @intFromEnum(InternPool.Index.i64_type), + u80_type = @intFromEnum(InternPool.Index.u80_type), + u128_type = @intFromEnum(InternPool.Index.u128_type), + i128_type = @intFromEnum(InternPool.Index.i128_type), + usize_type = @intFromEnum(InternPool.Index.usize_type), + isize_type = @intFromEnum(InternPool.Index.isize_type), + c_char_type = @intFromEnum(InternPool.Index.c_char_type), + c_short_type = @intFromEnum(InternPool.Index.c_short_type), + c_ushort_type = @intFromEnum(InternPool.Index.c_ushort_type), + c_int_type = @intFromEnum(InternPool.Index.c_int_type), + c_uint_type = @intFromEnum(InternPool.Index.c_uint_type), + c_long_type = @intFromEnum(InternPool.Index.c_long_type), + c_ulong_type = @intFromEnum(InternPool.Index.c_ulong_type), + c_longlong_type = @intFromEnum(InternPool.Index.c_longlong_type), + c_ulonglong_type = @intFromEnum(InternPool.Index.c_ulonglong_type), + c_longdouble_type = @intFromEnum(InternPool.Index.c_longdouble_type), + f16_type = @intFromEnum(InternPool.Index.f16_type), + f32_type = @intFromEnum(InternPool.Index.f32_type), + f64_type = @intFromEnum(InternPool.Index.f64_type), + f80_type = @intFromEnum(InternPool.Index.f80_type), + f128_type = @intFromEnum(InternPool.Index.f128_type), + anyopaque_type = @intFromEnum(InternPool.Index.anyopaque_type), + bool_type = @intFromEnum(InternPool.Index.bool_type), + void_type = @intFromEnum(InternPool.Index.void_type), + type_type = @intFromEnum(InternPool.Index.type_type), + anyerror_type = @intFromEnum(InternPool.Index.anyerror_type), + comptime_int_type = @intFromEnum(InternPool.Index.comptime_int_type), + comptime_float_type = @intFromEnum(InternPool.Index.comptime_float_type), + noreturn_type = @intFromEnum(InternPool.Index.noreturn_type), + anyframe_type = @intFromEnum(InternPool.Index.anyframe_type), + null_type = @intFromEnum(InternPool.Index.null_type), + undefined_type = @intFromEnum(InternPool.Index.undefined_type), + enum_literal_type = @intFromEnum(InternPool.Index.enum_literal_type), + atomic_order_type = @intFromEnum(InternPool.Index.atomic_order_type), + atomic_rmw_op_type = @intFromEnum(InternPool.Index.atomic_rmw_op_type), + calling_convention_type = @intFromEnum(InternPool.Index.calling_convention_type), + address_space_type = @intFromEnum(InternPool.Index.address_space_type), + float_mode_type = @intFromEnum(InternPool.Index.float_mode_type), + reduce_op_type = @intFromEnum(InternPool.Index.reduce_op_type), + call_modifier_type = @intFromEnum(InternPool.Index.call_modifier_type), + prefetch_options_type = @intFromEnum(InternPool.Index.prefetch_options_type), + export_options_type = @intFromEnum(InternPool.Index.export_options_type), + extern_options_type = @intFromEnum(InternPool.Index.extern_options_type), + type_info_type = @intFromEnum(InternPool.Index.type_info_type), + manyptr_u8_type = @intFromEnum(InternPool.Index.manyptr_u8_type), + manyptr_const_u8_type = @intFromEnum(InternPool.Index.manyptr_const_u8_type), + manyptr_const_u8_sentinel_0_type = @intFromEnum(InternPool.Index.manyptr_const_u8_sentinel_0_type), + single_const_pointer_to_comptime_int_type = @intFromEnum(InternPool.Index.single_const_pointer_to_comptime_int_type), + slice_const_u8_type = @intFromEnum(InternPool.Index.slice_const_u8_type), + slice_const_u8_sentinel_0_type = @intFromEnum(InternPool.Index.slice_const_u8_sentinel_0_type), + anyerror_void_error_union_type = @intFromEnum(InternPool.Index.anyerror_void_error_union_type), + generic_poison_type = @intFromEnum(InternPool.Index.generic_poison_type), + empty_struct_type = @intFromEnum(InternPool.Index.empty_struct_type), + undef = @intFromEnum(InternPool.Index.undef), + zero = @intFromEnum(InternPool.Index.zero), + zero_usize = @intFromEnum(InternPool.Index.zero_usize), + zero_u8 = @intFromEnum(InternPool.Index.zero_u8), + one = @intFromEnum(InternPool.Index.one), + one_usize = @intFromEnum(InternPool.Index.one_usize), + one_u8 = @intFromEnum(InternPool.Index.one_u8), + four_u8 = @intFromEnum(InternPool.Index.four_u8), + negative_one = @intFromEnum(InternPool.Index.negative_one), + calling_convention_c = @intFromEnum(InternPool.Index.calling_convention_c), + calling_convention_inline = @intFromEnum(InternPool.Index.calling_convention_inline), + void_value = @intFromEnum(InternPool.Index.void_value), + unreachable_value = @intFromEnum(InternPool.Index.unreachable_value), + null_value = @intFromEnum(InternPool.Index.null_value), + bool_true = @intFromEnum(InternPool.Index.bool_true), + bool_false = @intFromEnum(InternPool.Index.bool_false), + empty_struct = @intFromEnum(InternPool.Index.empty_struct), + generic_poison = @intFromEnum(InternPool.Index.generic_poison), /// This tag is here to match Air and InternPool, however it is unused /// for ZIR purposes. - var_args_param_type = @enumToInt(InternPool.Index.var_args_param_type), + var_args_param_type = @intFromEnum(InternPool.Index.var_args_param_type), /// This Ref does not correspond to any ZIR instruction or constant /// value and may instead be used as a sentinel to indicate null. - none = @enumToInt(InternPool.Index.none), + none = @intFromEnum(InternPool.Index.none), _, }; @@ -2691,8 +2691,8 @@ pub const Inst = struct { pub const ScalarCasesLen = u28; pub fn specialProng(bits: Bits) SpecialProng { - const has_else: u2 = @boolToInt(bits.has_else); - const has_under: u2 = @boolToInt(bits.has_under); + const has_else: u2 = @intFromBool(bits.has_else); + const has_under: u2 = @intFromBool(bits.has_under); return switch ((has_else << 1) | has_under) { 0b00 => .none, 0b01 => .under, @@ -3241,8 +3241,8 @@ pub fn declIterator(zir: Zir, decl_inst: u32) DeclIterator { .struct_decl => { const small = @bitCast(Inst.StructDecl.Small, extended.small); var extra_index: usize = extended.operand; - extra_index += @boolToInt(small.has_src_node); - extra_index += @boolToInt(small.has_fields_len); + extra_index += @intFromBool(small.has_src_node); + extra_index += @intFromBool(small.has_fields_len); const decls_len = if (small.has_decls_len) decls_len: { const decls_len = zir.extra[extra_index]; extra_index += 1; @@ -3264,10 +3264,10 @@ pub fn declIterator(zir: Zir, decl_inst: u32) DeclIterator { .enum_decl => { const small = @bitCast(Inst.EnumDecl.Small, extended.small); var extra_index: usize = extended.operand; - extra_index += @boolToInt(small.has_src_node); - extra_index += @boolToInt(small.has_tag_type); - extra_index += @boolToInt(small.has_body_len); - extra_index += @boolToInt(small.has_fields_len); + extra_index += @intFromBool(small.has_src_node); + extra_index += @intFromBool(small.has_tag_type); + extra_index += @intFromBool(small.has_body_len); + extra_index += @intFromBool(small.has_fields_len); const decls_len = if (small.has_decls_len) decls_len: { const decls_len = zir.extra[extra_index]; extra_index += 1; @@ -3279,10 +3279,10 @@ pub fn declIterator(zir: Zir, decl_inst: u32) DeclIterator { .union_decl => { const small = @bitCast(Inst.UnionDecl.Small, extended.small); var extra_index: usize = extended.operand; - extra_index += @boolToInt(small.has_src_node); - extra_index += @boolToInt(small.has_tag_type); - extra_index += @boolToInt(small.has_body_len); - extra_index += @boolToInt(small.has_fields_len); + extra_index += @intFromBool(small.has_src_node); + extra_index += @intFromBool(small.has_tag_type); + extra_index += @intFromBool(small.has_body_len); + extra_index += @intFromBool(small.has_fields_len); const decls_len = if (small.has_decls_len) decls_len: { const decls_len = zir.extra[extra_index]; extra_index += 1; @@ -3294,7 +3294,7 @@ pub fn declIterator(zir: Zir, decl_inst: u32) DeclIterator { .opaque_decl => { const small = @bitCast(Inst.OpaqueDecl.Small, extended.small); var extra_index: usize = extended.operand; - extra_index += @boolToInt(small.has_src_node); + extra_index += @intFromBool(small.has_src_node); const decls_len = if (small.has_decls_len) decls_len: { const decls_len = zir.extra[extra_index]; extra_index += 1; @@ -3367,7 +3367,7 @@ fn findDeclsInner( const inst_data = datas[inst].pl_node; const extra = zir.extraData(Inst.FuncFancy, inst_data.payload_index); var extra_index: usize = extra.end; - extra_index += @boolToInt(extra.data.bits.has_lib_name); + extra_index += @intFromBool(extra.data.bits.has_lib_name); if (extra.data.bits.has_align_body) { const body_len = zir.extra[extra_index]; @@ -3419,7 +3419,7 @@ fn findDeclsInner( extra_index += 1; } - extra_index += @boolToInt(extra.data.bits.has_any_noalias); + extra_index += @intFromBool(extra.data.bits.has_any_noalias); const body = zir.extra[extra_index..][0..extra.data.body_len]; return zir.findDeclsBody(list, body); @@ -3598,7 +3598,7 @@ pub fn getFnInfo(zir: Zir, fn_inst: Inst.Index) FnInfo { ret_ty_ref = .void_type; }, 1 => { - ret_ty_ref = @intToEnum(Inst.Ref, zir.extra[extra_index]); + ret_ty_ref = @enumFromInt(Inst.Ref, zir.extra[extra_index]); extra_index += 1; }, else => { @@ -3625,7 +3625,7 @@ pub fn getFnInfo(zir: Zir, fn_inst: Inst.Index) FnInfo { var ret_ty_ref: Inst.Ref = .void_type; var ret_ty_body: []const Inst.Index = &.{}; - extra_index += @boolToInt(extra.data.bits.has_lib_name); + extra_index += @intFromBool(extra.data.bits.has_lib_name); if (extra.data.bits.has_align_body) { extra_index += zir.extra[extra_index] + 1; } else if (extra.data.bits.has_align_ref) { @@ -3652,11 +3652,11 @@ pub fn getFnInfo(zir: Zir, fn_inst: Inst.Index) FnInfo { ret_ty_body = zir.extra[extra_index..][0..body_len]; extra_index += ret_ty_body.len; } else if (extra.data.bits.has_ret_ty_ref) { - ret_ty_ref = @intToEnum(Inst.Ref, zir.extra[extra_index]); + ret_ty_ref = @enumFromInt(Inst.Ref, zir.extra[extra_index]); extra_index += 1; } - extra_index += @boolToInt(extra.data.bits.has_any_noalias); + extra_index += @intFromBool(extra.data.bits.has_any_noalias); const body = zir.extra[extra_index..][0..extra.data.body_len]; extra_index += body.len; @@ -3696,12 +3696,12 @@ pub fn getFnInfo(zir: Zir, fn_inst: Inst.Index) FnInfo { pub const ref_start_index: u32 = InternPool.static_len; pub fn indexToRef(inst: Inst.Index) Inst.Ref { - return @intToEnum(Inst.Ref, ref_start_index + inst); + return @enumFromInt(Inst.Ref, ref_start_index + inst); } pub fn refToIndex(inst: Inst.Ref) ?Inst.Index { assert(inst != .none); - const ref_int = @enumToInt(inst); + const ref_int = @intFromEnum(inst); if (ref_int >= ref_start_index) { return ref_int - ref_start_index; } else { diff --git a/src/arch/aarch64/CodeGen.zig b/src/arch/aarch64/CodeGen.zig index b93b9b212a..5080a0451a 100644 --- a/src/arch/aarch64/CodeGen.zig +++ b/src/arch/aarch64/CodeGen.zig @@ -951,7 +951,7 @@ fn finishAir(self: *Self, inst: Air.Inst.Index, result: MCValue, operands: [Live const dies = @truncate(u1, tomb_bits) != 0; tomb_bits >>= 1; if (!dies) continue; - const op_int = @enumToInt(op); + const op_int = @intFromEnum(op); if (op_int < Air.ref_start_index) continue; const op_index = @intCast(Air.Inst.Index, op_int - Air.ref_start_index); self.processDeath(op_index); @@ -4026,7 +4026,7 @@ fn store(self: *Self, ptr: MCValue, value: MCValue, ptr_ty: Type, value_ty: Type .tag = tag, .data = .{ .payload = try self.addExtra(Mir.LoadMemoryPie{ - .register = @enumToInt(src_reg), + .register = @intFromEnum(src_reg), .atom_index = atom_index, .sym_index = load_struct.sym_index, }), @@ -4694,7 +4694,7 @@ fn airCondBr(self: *Self, inst: Air.Inst.Index) !void { // that death now instead of later as this has an effect on // whether it needs to be spilled in the branches if (self.liveness.operandDies(inst, 0)) { - const op_int = @enumToInt(pl_op.operand); + const op_int = @intFromEnum(pl_op.operand); if (op_int >= Air.ref_start_index) { const op_index = @intCast(Air.Inst.Index, op_int - Air.ref_start_index); self.processDeath(op_index); @@ -5546,7 +5546,7 @@ fn genSetStack(self: *Self, ty: Type, stack_offset: u32, mcv: MCValue) InnerErro .tag = tag, .data = .{ .payload = try self.addExtra(Mir.LoadMemoryPie{ - .register = @enumToInt(src_reg), + .register = @intFromEnum(src_reg), .atom_index = atom_index, .sym_index = load_struct.sym_index, }), @@ -5667,7 +5667,7 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void .tag = tag, .data = .{ .payload = try self.addExtra(Mir.LoadMemoryPie{ - .register = @enumToInt(reg), + .register = @intFromEnum(reg), .atom_index = atom_index, .sym_index = load_struct.sym_index, }), @@ -5864,7 +5864,7 @@ fn genSetStackArgument(self: *Self, ty: Type, stack_offset: u32, mcv: MCValue) I .tag = tag, .data = .{ .payload = try self.addExtra(Mir.LoadMemoryPie{ - .register = @enumToInt(src_reg), + .register = @intFromEnum(src_reg), .atom_index = atom_index, .sym_index = load_struct.sym_index, }), diff --git a/src/arch/aarch64/Emit.zig b/src/arch/aarch64/Emit.zig index 3903229a21..238a63c921 100644 --- a/src/arch/aarch64/Emit.zig +++ b/src/arch/aarch64/Emit.zig @@ -837,7 +837,7 @@ fn mirLoadMemoryPie(emit: *Emit, inst: Mir.Inst.Index) !void { const tag = emit.mir.instructions.items(.tag)[inst]; const payload = emit.mir.instructions.items(.data)[inst].payload; const data = emit.mir.extraData(Mir.LoadMemoryPie, payload).data; - const reg = @intToEnum(Register, data.register); + const reg = @enumFromInt(Register, data.register); // PC-relative displacement to the entry in memory. // adrp @@ -1245,7 +1245,7 @@ fn mirPushPopRegs(emit: *Emit, inst: Mir.Inst.Index) !void { var count: u6 = 0; var other_reg: ?Register = null; while (i > 0) : (i -= 1) { - const reg = @intToEnum(Register, i - 1); + const reg = @enumFromInt(Register, i - 1); if (regListIsSet(reg_list, reg)) { if (count == 0 and odd_number_of_regs) { try emit.writeInstruction(Instruction.ldr( @@ -1274,7 +1274,7 @@ fn mirPushPopRegs(emit: *Emit, inst: Mir.Inst.Index) !void { var count: u6 = 0; var other_reg: ?Register = null; while (i < 32) : (i += 1) { - const reg = @intToEnum(Register, i); + const reg = @enumFromInt(Register, i); if (regListIsSet(reg_list, reg)) { if (count == number_of_regs - 1 and odd_number_of_regs) { try emit.writeInstruction(Instruction.str( diff --git a/src/arch/aarch64/bits.zig b/src/arch/aarch64/bits.zig index 0baa7e65ce..3446d69950 100644 --- a/src/arch/aarch64/bits.zig +++ b/src/arch/aarch64/bits.zig @@ -62,84 +62,84 @@ pub const Register = enum(u8) { // zig fmt: on pub fn class(self: Register) RegisterClass { - return switch (@enumToInt(self)) { - @enumToInt(Register.x0)...@enumToInt(Register.xzr) => .general_purpose, - @enumToInt(Register.w0)...@enumToInt(Register.wzr) => .general_purpose, + return switch (@intFromEnum(self)) { + @intFromEnum(Register.x0)...@intFromEnum(Register.xzr) => .general_purpose, + @intFromEnum(Register.w0)...@intFromEnum(Register.wzr) => .general_purpose, - @enumToInt(Register.sp) => .stack_pointer, - @enumToInt(Register.wsp) => .stack_pointer, + @intFromEnum(Register.sp) => .stack_pointer, + @intFromEnum(Register.wsp) => .stack_pointer, - @enumToInt(Register.q0)...@enumToInt(Register.q31) => .floating_point, - @enumToInt(Register.d0)...@enumToInt(Register.d31) => .floating_point, - @enumToInt(Register.s0)...@enumToInt(Register.s31) => .floating_point, - @enumToInt(Register.h0)...@enumToInt(Register.h31) => .floating_point, - @enumToInt(Register.b0)...@enumToInt(Register.b31) => .floating_point, + @intFromEnum(Register.q0)...@intFromEnum(Register.q31) => .floating_point, + @intFromEnum(Register.d0)...@intFromEnum(Register.d31) => .floating_point, + @intFromEnum(Register.s0)...@intFromEnum(Register.s31) => .floating_point, + @intFromEnum(Register.h0)...@intFromEnum(Register.h31) => .floating_point, + @intFromEnum(Register.b0)...@intFromEnum(Register.b31) => .floating_point, else => unreachable, }; } pub fn id(self: Register) u6 { - return switch (@enumToInt(self)) { - @enumToInt(Register.x0)...@enumToInt(Register.xzr) => @intCast(u6, @enumToInt(self) - @enumToInt(Register.x0)), - @enumToInt(Register.w0)...@enumToInt(Register.wzr) => @intCast(u6, @enumToInt(self) - @enumToInt(Register.w0)), + return switch (@intFromEnum(self)) { + @intFromEnum(Register.x0)...@intFromEnum(Register.xzr) => @intCast(u6, @intFromEnum(self) - @intFromEnum(Register.x0)), + @intFromEnum(Register.w0)...@intFromEnum(Register.wzr) => @intCast(u6, @intFromEnum(self) - @intFromEnum(Register.w0)), - @enumToInt(Register.sp) => 32, - @enumToInt(Register.wsp) => 32, + @intFromEnum(Register.sp) => 32, + @intFromEnum(Register.wsp) => 32, - @enumToInt(Register.q0)...@enumToInt(Register.q31) => @intCast(u6, @enumToInt(self) - @enumToInt(Register.q0) + 33), - @enumToInt(Register.d0)...@enumToInt(Register.d31) => @intCast(u6, @enumToInt(self) - @enumToInt(Register.d0) + 33), - @enumToInt(Register.s0)...@enumToInt(Register.s31) => @intCast(u6, @enumToInt(self) - @enumToInt(Register.s0) + 33), - @enumToInt(Register.h0)...@enumToInt(Register.h31) => @intCast(u6, @enumToInt(self) - @enumToInt(Register.h0) + 33), - @enumToInt(Register.b0)...@enumToInt(Register.b31) => @intCast(u6, @enumToInt(self) - @enumToInt(Register.b0) + 33), + @intFromEnum(Register.q0)...@intFromEnum(Register.q31) => @intCast(u6, @intFromEnum(self) - @intFromEnum(Register.q0) + 33), + @intFromEnum(Register.d0)...@intFromEnum(Register.d31) => @intCast(u6, @intFromEnum(self) - @intFromEnum(Register.d0) + 33), + @intFromEnum(Register.s0)...@intFromEnum(Register.s31) => @intCast(u6, @intFromEnum(self) - @intFromEnum(Register.s0) + 33), + @intFromEnum(Register.h0)...@intFromEnum(Register.h31) => @intCast(u6, @intFromEnum(self) - @intFromEnum(Register.h0) + 33), + @intFromEnum(Register.b0)...@intFromEnum(Register.b31) => @intCast(u6, @intFromEnum(self) - @intFromEnum(Register.b0) + 33), else => unreachable, }; } pub fn enc(self: Register) u5 { - return switch (@enumToInt(self)) { - @enumToInt(Register.x0)...@enumToInt(Register.xzr) => @intCast(u5, @enumToInt(self) - @enumToInt(Register.x0)), - @enumToInt(Register.w0)...@enumToInt(Register.wzr) => @intCast(u5, @enumToInt(self) - @enumToInt(Register.w0)), + return switch (@intFromEnum(self)) { + @intFromEnum(Register.x0)...@intFromEnum(Register.xzr) => @intCast(u5, @intFromEnum(self) - @intFromEnum(Register.x0)), + @intFromEnum(Register.w0)...@intFromEnum(Register.wzr) => @intCast(u5, @intFromEnum(self) - @intFromEnum(Register.w0)), - @enumToInt(Register.sp) => 31, - @enumToInt(Register.wsp) => 31, + @intFromEnum(Register.sp) => 31, + @intFromEnum(Register.wsp) => 31, - @enumToInt(Register.q0)...@enumToInt(Register.q31) => @intCast(u5, @enumToInt(self) - @enumToInt(Register.q0)), - @enumToInt(Register.d0)...@enumToInt(Register.d31) => @intCast(u5, @enumToInt(self) - @enumToInt(Register.d0)), - @enumToInt(Register.s0)...@enumToInt(Register.s31) => @intCast(u5, @enumToInt(self) - @enumToInt(Register.s0)), - @enumToInt(Register.h0)...@enumToInt(Register.h31) => @intCast(u5, @enumToInt(self) - @enumToInt(Register.h0)), - @enumToInt(Register.b0)...@enumToInt(Register.b31) => @intCast(u5, @enumToInt(self) - @enumToInt(Register.b0)), + @intFromEnum(Register.q0)...@intFromEnum(Register.q31) => @intCast(u5, @intFromEnum(self) - @intFromEnum(Register.q0)), + @intFromEnum(Register.d0)...@intFromEnum(Register.d31) => @intCast(u5, @intFromEnum(self) - @intFromEnum(Register.d0)), + @intFromEnum(Register.s0)...@intFromEnum(Register.s31) => @intCast(u5, @intFromEnum(self) - @intFromEnum(Register.s0)), + @intFromEnum(Register.h0)...@intFromEnum(Register.h31) => @intCast(u5, @intFromEnum(self) - @intFromEnum(Register.h0)), + @intFromEnum(Register.b0)...@intFromEnum(Register.b31) => @intCast(u5, @intFromEnum(self) - @intFromEnum(Register.b0)), else => unreachable, }; } /// Returns the bit-width of the register. pub fn size(self: Register) u8 { - return switch (@enumToInt(self)) { - @enumToInt(Register.x0)...@enumToInt(Register.xzr) => 64, - @enumToInt(Register.w0)...@enumToInt(Register.wzr) => 32, + return switch (@intFromEnum(self)) { + @intFromEnum(Register.x0)...@intFromEnum(Register.xzr) => 64, + @intFromEnum(Register.w0)...@intFromEnum(Register.wzr) => 32, - @enumToInt(Register.sp) => 64, - @enumToInt(Register.wsp) => 32, + @intFromEnum(Register.sp) => 64, + @intFromEnum(Register.wsp) => 32, - @enumToInt(Register.q0)...@enumToInt(Register.q31) => 128, - @enumToInt(Register.d0)...@enumToInt(Register.d31) => 64, - @enumToInt(Register.s0)...@enumToInt(Register.s31) => 32, - @enumToInt(Register.h0)...@enumToInt(Register.h31) => 16, - @enumToInt(Register.b0)...@enumToInt(Register.b31) => 8, + @intFromEnum(Register.q0)...@intFromEnum(Register.q31) => 128, + @intFromEnum(Register.d0)...@intFromEnum(Register.d31) => 64, + @intFromEnum(Register.s0)...@intFromEnum(Register.s31) => 32, + @intFromEnum(Register.h0)...@intFromEnum(Register.h31) => 16, + @intFromEnum(Register.b0)...@intFromEnum(Register.b31) => 8, else => unreachable, }; } /// Convert from a general-purpose register to its 64 bit alias. pub fn toX(self: Register) Register { - return switch (@enumToInt(self)) { - @enumToInt(Register.x0)...@enumToInt(Register.xzr) => @intToEnum( + return switch (@intFromEnum(self)) { + @intFromEnum(Register.x0)...@intFromEnum(Register.xzr) => @enumFromInt( Register, - @enumToInt(self) - @enumToInt(Register.x0) + @enumToInt(Register.x0), + @intFromEnum(self) - @intFromEnum(Register.x0) + @intFromEnum(Register.x0), ), - @enumToInt(Register.w0)...@enumToInt(Register.wzr) => @intToEnum( + @intFromEnum(Register.w0)...@intFromEnum(Register.wzr) => @enumFromInt( Register, - @enumToInt(self) - @enumToInt(Register.w0) + @enumToInt(Register.x0), + @intFromEnum(self) - @intFromEnum(Register.w0) + @intFromEnum(Register.x0), ), else => unreachable, }; @@ -147,14 +147,14 @@ pub const Register = enum(u8) { /// Convert from a general-purpose register to its 32 bit alias. pub fn toW(self: Register) Register { - return switch (@enumToInt(self)) { - @enumToInt(Register.x0)...@enumToInt(Register.xzr) => @intToEnum( + return switch (@intFromEnum(self)) { + @intFromEnum(Register.x0)...@intFromEnum(Register.xzr) => @enumFromInt( Register, - @enumToInt(self) - @enumToInt(Register.x0) + @enumToInt(Register.w0), + @intFromEnum(self) - @intFromEnum(Register.x0) + @intFromEnum(Register.w0), ), - @enumToInt(Register.w0)...@enumToInt(Register.wzr) => @intToEnum( + @intFromEnum(Register.w0)...@intFromEnum(Register.wzr) => @enumFromInt( Register, - @enumToInt(self) - @enumToInt(Register.w0) + @enumToInt(Register.w0), + @intFromEnum(self) - @intFromEnum(Register.w0) + @intFromEnum(Register.w0), ), else => unreachable, }; @@ -162,26 +162,26 @@ pub const Register = enum(u8) { /// Convert from a floating-point register to its 128 bit alias. pub fn toQ(self: Register) Register { - return switch (@enumToInt(self)) { - @enumToInt(Register.q0)...@enumToInt(Register.q31) => @intToEnum( + return switch (@intFromEnum(self)) { + @intFromEnum(Register.q0)...@intFromEnum(Register.q31) => @enumFromInt( Register, - @enumToInt(self) - @enumToInt(Register.q0) + @enumToInt(Register.q0), + @intFromEnum(self) - @intFromEnum(Register.q0) + @intFromEnum(Register.q0), ), - @enumToInt(Register.d0)...@enumToInt(Register.d31) => @intToEnum( + @intFromEnum(Register.d0)...@intFromEnum(Register.d31) => @enumFromInt( Register, - @enumToInt(self) - @enumToInt(Register.d0) + @enumToInt(Register.q0), + @intFromEnum(self) - @intFromEnum(Register.d0) + @intFromEnum(Register.q0), ), - @enumToInt(Register.s0)...@enumToInt(Register.s31) => @intToEnum( + @intFromEnum(Register.s0)...@intFromEnum(Register.s31) => @enumFromInt( Register, - @enumToInt(self) - @enumToInt(Register.s0) + @enumToInt(Register.q0), + @intFromEnum(self) - @intFromEnum(Register.s0) + @intFromEnum(Register.q0), ), - @enumToInt(Register.h0)...@enumToInt(Register.h31) => @intToEnum( + @intFromEnum(Register.h0)...@intFromEnum(Register.h31) => @enumFromInt( Register, - @enumToInt(self) - @enumToInt(Register.h0) + @enumToInt(Register.q0), + @intFromEnum(self) - @intFromEnum(Register.h0) + @intFromEnum(Register.q0), ), - @enumToInt(Register.b0)...@enumToInt(Register.b31) => @intToEnum( + @intFromEnum(Register.b0)...@intFromEnum(Register.b31) => @enumFromInt( Register, - @enumToInt(self) - @enumToInt(Register.b0) + @enumToInt(Register.q0), + @intFromEnum(self) - @intFromEnum(Register.b0) + @intFromEnum(Register.q0), ), else => unreachable, }; @@ -189,26 +189,26 @@ pub const Register = enum(u8) { /// Convert from a floating-point register to its 64 bit alias. pub fn toD(self: Register) Register { - return switch (@enumToInt(self)) { - @enumToInt(Register.q0)...@enumToInt(Register.q31) => @intToEnum( + return switch (@intFromEnum(self)) { + @intFromEnum(Register.q0)...@intFromEnum(Register.q31) => @enumFromInt( Register, - @enumToInt(self) - @enumToInt(Register.q0) + @enumToInt(Register.d0), + @intFromEnum(self) - @intFromEnum(Register.q0) + @intFromEnum(Register.d0), ), - @enumToInt(Register.d0)...@enumToInt(Register.d31) => @intToEnum( + @intFromEnum(Register.d0)...@intFromEnum(Register.d31) => @enumFromInt( Register, - @enumToInt(self) - @enumToInt(Register.d0) + @enumToInt(Register.d0), + @intFromEnum(self) - @intFromEnum(Register.d0) + @intFromEnum(Register.d0), ), - @enumToInt(Register.s0)...@enumToInt(Register.s31) => @intToEnum( + @intFromEnum(Register.s0)...@intFromEnum(Register.s31) => @enumFromInt( Register, - @enumToInt(self) - @enumToInt(Register.s0) + @enumToInt(Register.d0), + @intFromEnum(self) - @intFromEnum(Register.s0) + @intFromEnum(Register.d0), ), - @enumToInt(Register.h0)...@enumToInt(Register.h31) => @intToEnum( + @intFromEnum(Register.h0)...@intFromEnum(Register.h31) => @enumFromInt( Register, - @enumToInt(self) - @enumToInt(Register.h0) + @enumToInt(Register.d0), + @intFromEnum(self) - @intFromEnum(Register.h0) + @intFromEnum(Register.d0), ), - @enumToInt(Register.b0)...@enumToInt(Register.b31) => @intToEnum( + @intFromEnum(Register.b0)...@intFromEnum(Register.b31) => @enumFromInt( Register, - @enumToInt(self) - @enumToInt(Register.b0) + @enumToInt(Register.d0), + @intFromEnum(self) - @intFromEnum(Register.b0) + @intFromEnum(Register.d0), ), else => unreachable, }; @@ -216,26 +216,26 @@ pub const Register = enum(u8) { /// Convert from a floating-point register to its 32 bit alias. pub fn toS(self: Register) Register { - return switch (@enumToInt(self)) { - @enumToInt(Register.q0)...@enumToInt(Register.q31) => @intToEnum( + return switch (@intFromEnum(self)) { + @intFromEnum(Register.q0)...@intFromEnum(Register.q31) => @enumFromInt( Register, - @enumToInt(self) - @enumToInt(Register.q0) + @enumToInt(Register.s0), + @intFromEnum(self) - @intFromEnum(Register.q0) + @intFromEnum(Register.s0), ), - @enumToInt(Register.d0)...@enumToInt(Register.d31) => @intToEnum( + @intFromEnum(Register.d0)...@intFromEnum(Register.d31) => @enumFromInt( Register, - @enumToInt(self) - @enumToInt(Register.d0) + @enumToInt(Register.s0), + @intFromEnum(self) - @intFromEnum(Register.d0) + @intFromEnum(Register.s0), ), - @enumToInt(Register.s0)...@enumToInt(Register.s31) => @intToEnum( + @intFromEnum(Register.s0)...@intFromEnum(Register.s31) => @enumFromInt( Register, - @enumToInt(self) - @enumToInt(Register.s0) + @enumToInt(Register.s0), + @intFromEnum(self) - @intFromEnum(Register.s0) + @intFromEnum(Register.s0), ), - @enumToInt(Register.h0)...@enumToInt(Register.h31) => @intToEnum( + @intFromEnum(Register.h0)...@intFromEnum(Register.h31) => @enumFromInt( Register, - @enumToInt(self) - @enumToInt(Register.h0) + @enumToInt(Register.s0), + @intFromEnum(self) - @intFromEnum(Register.h0) + @intFromEnum(Register.s0), ), - @enumToInt(Register.b0)...@enumToInt(Register.b31) => @intToEnum( + @intFromEnum(Register.b0)...@intFromEnum(Register.b31) => @enumFromInt( Register, - @enumToInt(self) - @enumToInt(Register.b0) + @enumToInt(Register.s0), + @intFromEnum(self) - @intFromEnum(Register.b0) + @intFromEnum(Register.s0), ), else => unreachable, }; @@ -243,26 +243,26 @@ pub const Register = enum(u8) { /// Convert from a floating-point register to its 16 bit alias. pub fn toH(self: Register) Register { - return switch (@enumToInt(self)) { - @enumToInt(Register.q0)...@enumToInt(Register.q31) => @intToEnum( + return switch (@intFromEnum(self)) { + @intFromEnum(Register.q0)...@intFromEnum(Register.q31) => @enumFromInt( Register, - @enumToInt(self) - @enumToInt(Register.q0) + @enumToInt(Register.h0), + @intFromEnum(self) - @intFromEnum(Register.q0) + @intFromEnum(Register.h0), ), - @enumToInt(Register.d0)...@enumToInt(Register.d31) => @intToEnum( + @intFromEnum(Register.d0)...@intFromEnum(Register.d31) => @enumFromInt( Register, - @enumToInt(self) - @enumToInt(Register.d0) + @enumToInt(Register.h0), + @intFromEnum(self) - @intFromEnum(Register.d0) + @intFromEnum(Register.h0), ), - @enumToInt(Register.s0)...@enumToInt(Register.s31) => @intToEnum( + @intFromEnum(Register.s0)...@intFromEnum(Register.s31) => @enumFromInt( Register, - @enumToInt(self) - @enumToInt(Register.s0) + @enumToInt(Register.h0), + @intFromEnum(self) - @intFromEnum(Register.s0) + @intFromEnum(Register.h0), ), - @enumToInt(Register.h0)...@enumToInt(Register.h31) => @intToEnum( + @intFromEnum(Register.h0)...@intFromEnum(Register.h31) => @enumFromInt( Register, - @enumToInt(self) - @enumToInt(Register.h0) + @enumToInt(Register.h0), + @intFromEnum(self) - @intFromEnum(Register.h0) + @intFromEnum(Register.h0), ), - @enumToInt(Register.b0)...@enumToInt(Register.b31) => @intToEnum( + @intFromEnum(Register.b0)...@intFromEnum(Register.b31) => @enumFromInt( Register, - @enumToInt(self) - @enumToInt(Register.b0) + @enumToInt(Register.h0), + @intFromEnum(self) - @intFromEnum(Register.b0) + @intFromEnum(Register.h0), ), else => unreachable, }; @@ -270,26 +270,26 @@ pub const Register = enum(u8) { /// Convert from a floating-point register to its 8 bit alias. pub fn toB(self: Register) Register { - return switch (@enumToInt(self)) { - @enumToInt(Register.q0)...@enumToInt(Register.q31) => @intToEnum( + return switch (@intFromEnum(self)) { + @intFromEnum(Register.q0)...@intFromEnum(Register.q31) => @enumFromInt( Register, - @enumToInt(self) - @enumToInt(Register.q0) + @enumToInt(Register.b0), + @intFromEnum(self) - @intFromEnum(Register.q0) + @intFromEnum(Register.b0), ), - @enumToInt(Register.d0)...@enumToInt(Register.d31) => @intToEnum( + @intFromEnum(Register.d0)...@intFromEnum(Register.d31) => @enumFromInt( Register, - @enumToInt(self) - @enumToInt(Register.d0) + @enumToInt(Register.b0), + @intFromEnum(self) - @intFromEnum(Register.d0) + @intFromEnum(Register.b0), ), - @enumToInt(Register.s0)...@enumToInt(Register.s31) => @intToEnum( + @intFromEnum(Register.s0)...@intFromEnum(Register.s31) => @enumFromInt( Register, - @enumToInt(self) - @enumToInt(Register.s0) + @enumToInt(Register.b0), + @intFromEnum(self) - @intFromEnum(Register.s0) + @intFromEnum(Register.b0), ), - @enumToInt(Register.h0)...@enumToInt(Register.h31) => @intToEnum( + @intFromEnum(Register.h0)...@intFromEnum(Register.h31) => @enumFromInt( Register, - @enumToInt(self) - @enumToInt(Register.h0) + @enumToInt(Register.b0), + @intFromEnum(self) - @intFromEnum(Register.h0) + @intFromEnum(Register.b0), ), - @enumToInt(Register.b0)...@enumToInt(Register.b31) => @intToEnum( + @intFromEnum(Register.b0)...@intFromEnum(Register.b31) => @enumFromInt( Register, - @enumToInt(self) - @enumToInt(Register.b0) + @enumToInt(Register.b0), + @intFromEnum(self) - @intFromEnum(Register.b0) + @intFromEnum(Register.b0), ), else => unreachable, }; @@ -901,7 +901,7 @@ pub const Instruction = union(enum) { .rn = rn.enc(), .rt2 = rt2.enc(), .imm7 = imm7, - .load = @boolToInt(load), + .load = @intFromBool(load), .encoding = encoding, .opc = 0b00, }, @@ -916,7 +916,7 @@ pub const Instruction = union(enum) { .rn = rn.enc(), .rt2 = rt2.enc(), .imm7 = imm7, - .load = @boolToInt(load), + .load = @intFromBool(load), .encoding = encoding, .opc = 0b10, }, @@ -1010,7 +1010,7 @@ pub const Instruction = union(enum) { .imm6 = amount, .rm = rm.enc(), .n = n, - .shift = @enumToInt(shift), + .shift = @intFromEnum(shift), .opc = opc, .sf = switch (rd.size()) { 32 => 0b0, @@ -1037,7 +1037,7 @@ pub const Instruction = union(enum) { .rd = rd.enc(), .rn = rn.enc(), .imm12 = imm12, - .sh = @boolToInt(shift), + .sh = @intFromBool(shift), .s = s, .op = op, .sf = switch (rd.size()) { @@ -1126,7 +1126,7 @@ pub const Instruction = union(enum) { .rn = rn.enc(), .imm6 = imm6, .rm = rm.enc(), - .shift = @enumToInt(shift), + .shift = @intFromEnum(shift), .s = s, .op = op, .sf = switch (rd.size()) { @@ -1163,7 +1163,7 @@ pub const Instruction = union(enum) { .rd = rd.enc(), .rn = rn.enc(), .imm3 = imm3, - .option = @enumToInt(extend), + .option = @intFromEnum(extend), .rm = rm.enc(), .s = s, .op = op, @@ -1186,7 +1186,7 @@ pub const Instruction = union(enum) { return Instruction{ .conditional_branch = .{ - .cond = @enumToInt(cond), + .cond = @intFromEnum(cond), .o0 = o0, .imm19 = @bitCast(u19, @intCast(i19, offset >> 2)), .o1 = o1, @@ -1232,7 +1232,7 @@ pub const Instruction = union(enum) { .rd = rd.enc(), .rn = rn.enc(), .op2 = op2, - .cond = @enumToInt(cond), + .cond = @intFromEnum(cond), .rm = rm.enc(), .s = s, .op = op, @@ -1394,7 +1394,7 @@ pub const Instruction = union(enum) { }; pub fn ldp(rt1: Register, rt2: Register, rn: Register, offset: LoadStorePairOffset) Instruction { - return loadStoreRegisterPair(rt1, rt2, rn, offset.offset, @enumToInt(offset.encoding), true); + return loadStoreRegisterPair(rt1, rt2, rn, offset.offset, @intFromEnum(offset.encoding), true); } pub fn ldnp(rt1: Register, rt2: Register, rn: Register, offset: i9) Instruction { @@ -1402,7 +1402,7 @@ pub const Instruction = union(enum) { } pub fn stp(rt1: Register, rt2: Register, rn: Register, offset: LoadStorePairOffset) Instruction { - return loadStoreRegisterPair(rt1, rt2, rn, offset.offset, @enumToInt(offset.encoding), false); + return loadStoreRegisterPair(rt1, rt2, rn, offset.offset, @intFromEnum(offset.encoding), false); } pub fn stnp(rt1: Register, rt2: Register, rn: Register, offset: i9) Instruction { diff --git a/src/arch/arm/CodeGen.zig b/src/arch/arm/CodeGen.zig index 2ad9a8775c..7ece4ba2e3 100644 --- a/src/arch/arm/CodeGen.zig +++ b/src/arch/arm/CodeGen.zig @@ -937,7 +937,7 @@ fn finishAir(self: *Self, inst: Air.Inst.Index, result: MCValue, operands: [Live const dies = @truncate(u1, tomb_bits) != 0; tomb_bits >>= 1; if (!dies) continue; - const op_int = @enumToInt(op); + const op_int = @intFromEnum(op); if (op_int < Air.ref_start_index) continue; const op_index = @intCast(Air.Inst.Index, op_int - Air.ref_start_index); self.processDeath(op_index); @@ -4649,7 +4649,7 @@ fn airCondBr(self: *Self, inst: Air.Inst.Index) !void { // that death now instead of later as this has an effect on // whether it needs to be spilled in the branches if (self.liveness.operandDies(inst, 0)) { - const op_int = @enumToInt(pl_op.operand); + const op_int = @intFromEnum(pl_op.operand); if (op_int >= Air.ref_start_index) { const op_index = @intCast(Air.Inst.Index, op_int - Air.ref_start_index); self.processDeath(op_index); diff --git a/src/arch/arm/bits.zig b/src/arch/arm/bits.zig index 185c4ed921..1de40a7059 100644 --- a/src/arch/arm/bits.zig +++ b/src/arch/arm/bits.zig @@ -159,7 +159,7 @@ pub const Register = enum(u5) { /// Returns the unique 4-bit ID of this register which is used in /// the machine code pub fn id(self: Register) u4 { - return @truncate(u4, @enumToInt(self)); + return @truncate(u4, @intFromEnum(self)); } pub fn dwarfLocOp(self: Register) u8 { @@ -408,7 +408,7 @@ pub const Instruction = union(enum) { return Shift{ .register = .{ .rs = rs.id(), - .typ = @enumToInt(typ), + .typ = @intFromEnum(typ), }, }; } @@ -417,7 +417,7 @@ pub const Instruction = union(enum) { return Shift{ .immediate = .{ .amount = amount, - .typ = @enumToInt(typ), + .typ = @intFromEnum(typ), }, }; } @@ -633,9 +633,9 @@ pub const Instruction = union(enum) { ) Instruction { return Instruction{ .data_processing = .{ - .cond = @enumToInt(cond), - .i = @boolToInt(op2 == .immediate), - .opcode = @enumToInt(opcode), + .cond = @intFromEnum(cond), + .i = @intFromBool(op2 == .immediate), + .opcode = @intFromEnum(opcode), .s = s, .rn = rn.id(), .rd = rd.id(), @@ -652,7 +652,7 @@ pub const Instruction = union(enum) { ) Instruction { return Instruction{ .data_processing = .{ - .cond = @enumToInt(cond), + .cond = @intFromEnum(cond), .i = 1, .opcode = if (top) 0b1010 else 0b1000, .s = 0, @@ -673,8 +673,8 @@ pub const Instruction = union(enum) { ) Instruction { return Instruction{ .multiply = .{ - .cond = @enumToInt(cond), - .accumulate = @boolToInt(ra != null), + .cond = @intFromEnum(cond), + .accumulate = @intFromBool(ra != null), .set_cond = set_cond, .rd = rd.id(), .rn = rn.id(), @@ -696,7 +696,7 @@ pub const Instruction = union(enum) { ) Instruction { return Instruction{ .multiply_long = .{ - .cond = @enumToInt(cond), + .cond = @intFromEnum(cond), .unsigned = signed, .accumulate = accumulate, .set_cond = set_cond, @@ -723,7 +723,7 @@ pub const Instruction = union(enum) { .m = m, .rm = rm.id(), .rd = rd.id(), - .cond = @enumToInt(cond), + .cond = @intFromEnum(cond), }, }; } @@ -741,7 +741,7 @@ pub const Instruction = union(enum) { .rd = rd.id(), .rn = rn.id(), .opc = opc, - .cond = @enumToInt(cond), + .cond = @intFromEnum(cond), }, }; } @@ -762,7 +762,7 @@ pub const Instruction = union(enum) { .rd = rd.id(), .widthm1 = @intCast(u5, width - 1), .unsigned = unsigned, - .cond = @enumToInt(cond), + .cond = @intFromEnum(cond), }, }; } @@ -779,7 +779,7 @@ pub const Instruction = union(enum) { ) Instruction { return Instruction{ .single_data_transfer = .{ - .cond = @enumToInt(cond), + .cond = @intFromEnum(cond), .rn = rn.id(), .rd = rd.id(), .offset = offset.toU12(), @@ -789,12 +789,12 @@ pub const Instruction = union(enum) { .pre_index, .post_index => 0b1, }, .byte_word = byte_word, - .up_down = @boolToInt(positive), + .up_down = @intFromBool(positive), .pre_post = switch (mode) { .offset, .pre_index => 0b1, .post_index => 0b0, }, - .imm = @boolToInt(offset != .immediate), + .imm = @intFromBool(offset != .immediate), }, }; } @@ -830,13 +830,13 @@ pub const Instruction = union(enum) { .offset => 0b0, .pre_index, .post_index => 0b1, }, - .imm = @boolToInt(offset == .immediate), - .up_down = @boolToInt(positive), + .imm = @intFromBool(offset == .immediate), + .up_down = @intFromBool(positive), .pre_index = switch (mode) { .offset, .pre_index => 0b1, .post_index => 0b0, }, - .cond = @enumToInt(cond), + .cond = @intFromEnum(cond), }, }; } @@ -856,11 +856,11 @@ pub const Instruction = union(enum) { .register_list = @bitCast(u16, reg_list), .rn = rn.id(), .load_store = load_store, - .write_back = @boolToInt(write_back), + .write_back = @intFromBool(write_back), .psr_or_user = psr_or_user, .up_down = up_down, .pre_post = pre_post, - .cond = @enumToInt(cond), + .cond = @intFromEnum(cond), }, }; } @@ -868,7 +868,7 @@ pub const Instruction = union(enum) { fn branch(cond: Condition, offset: i26, link: u1) Instruction { return Instruction{ .branch = .{ - .cond = @enumToInt(cond), + .cond = @intFromEnum(cond), .link = link, .offset = @bitCast(u24, @intCast(i24, offset >> 2)), }, @@ -878,7 +878,7 @@ pub const Instruction = union(enum) { fn branchExchange(cond: Condition, rn: Register, link: u1) Instruction { return Instruction{ .branch_exchange = .{ - .cond = @enumToInt(cond), + .cond = @intFromEnum(cond), .link = link, .rn = rn.id(), }, @@ -888,7 +888,7 @@ pub const Instruction = union(enum) { fn supervisorCall(cond: Condition, comment: u24) Instruction { return Instruction{ .supervisor_call = .{ - .cond = @enumToInt(cond), + .cond = @intFromEnum(cond), .comment = comment, }, }; @@ -1060,7 +1060,7 @@ pub const Instruction = union(enum) { pub fn mrs(cond: Condition, rd: Register, psr: Psr) Instruction { return Instruction{ .data_processing = .{ - .cond = @enumToInt(cond), + .cond = @intFromEnum(cond), .i = 0, .opcode = if (psr == .spsr) 0b1010 else 0b1000, .s = 0, @@ -1074,7 +1074,7 @@ pub const Instruction = union(enum) { pub fn msr(cond: Condition, psr: Psr, op: Operand) Instruction { return Instruction{ .data_processing = .{ - .cond = @enumToInt(cond), + .cond = @intFromEnum(cond), .i = 0, .opcode = if (psr == .spsr) 0b1011 else 0b1001, .s = 0, diff --git a/src/arch/riscv64/CodeGen.zig b/src/arch/riscv64/CodeGen.zig index 57383b3043..cba1de92c1 100644 --- a/src/arch/riscv64/CodeGen.zig +++ b/src/arch/riscv64/CodeGen.zig @@ -755,7 +755,7 @@ fn finishAir(self: *Self, inst: Air.Inst.Index, result: MCValue, operands: [Live const dies = @truncate(u1, tomb_bits) != 0; tomb_bits >>= 1; if (!dies) continue; - const op_int = @enumToInt(op); + const op_int = @intFromEnum(op); if (op_int < Air.ref_start_index) continue; const op_index = @intCast(Air.Inst.Index, op_int - Air.ref_start_index); self.processDeath(op_index); diff --git a/src/arch/riscv64/bits.zig b/src/arch/riscv64/bits.zig index 7b3ff0bfe9..5db3bf4f05 100644 --- a/src/arch/riscv64/bits.zig +++ b/src/arch/riscv64/bits.zig @@ -407,7 +407,7 @@ pub const Register = enum(u6) { /// Returns the unique 4-bit ID of this register which is used in /// the machine code pub fn id(self: Register) u5 { - return @truncate(u5, @enumToInt(self)); + return @truncate(u5, @intFromEnum(self)); } pub fn dwarfLocOp(reg: Register) u8 { diff --git a/src/arch/sparc64/CodeGen.zig b/src/arch/sparc64/CodeGen.zig index 97bb2f8ab1..f210f8e144 100644 --- a/src/arch/sparc64/CodeGen.zig +++ b/src/arch/sparc64/CodeGen.zig @@ -1513,7 +1513,7 @@ fn airCondBr(self: *Self, inst: Air.Inst.Index) !void { // that death now instead of later as this has an effect on // whether it needs to be spilled in the branches if (self.liveness.operandDies(inst, 0)) { - const op_int = @enumToInt(pl_op.operand); + const op_int = @intFromEnum(pl_op.operand); if (op_int >= Air.ref_start_index) { const op_index = @intCast(Air.Inst.Index, op_int - Air.ref_start_index); self.processDeath(op_index); @@ -3568,7 +3568,7 @@ fn finishAir(self: *Self, inst: Air.Inst.Index, result: MCValue, operands: [Live const dies = @truncate(u1, tomb_bits) != 0; tomb_bits >>= 1; if (!dies) continue; - const op_int = @enumToInt(op); + const op_int = @intFromEnum(op); if (op_int < Air.ref_start_index) continue; const op_index = @intCast(Air.Inst.Index, op_int - Air.ref_start_index); self.processDeath(op_index); diff --git a/src/arch/sparc64/bits.zig b/src/arch/sparc64/bits.zig index 7c943626f9..81656b422b 100644 --- a/src/arch/sparc64/bits.zig +++ b/src/arch/sparc64/bits.zig @@ -16,7 +16,7 @@ pub const Register = enum(u6) { // zig fmt: on pub fn id(self: Register) u5 { - return @truncate(u5, @enumToInt(self)); + return @truncate(u5, @intFromEnum(self)); } pub fn enc(self: Register) u5 { @@ -96,9 +96,9 @@ pub const FloatingPointRegister = enum(u7) { pub fn id(self: FloatingPointRegister) u6 { return switch (self.size()) { - 32 => @truncate(u6, @enumToInt(self)), - 64 => @truncate(u6, (@enumToInt(self) - 32) * 2), - 128 => @truncate(u6, (@enumToInt(self) - 64) * 4), + 32 => @truncate(u6, @intFromEnum(self)), + 64 => @truncate(u6, (@intFromEnum(self) - 32) * 2), + 128 => @truncate(u6, (@intFromEnum(self) - 64) * 4), else => unreachable, }; } @@ -114,7 +114,7 @@ pub const FloatingPointRegister = enum(u7) { /// Returns the bit-width of the register. pub fn size(self: FloatingPointRegister) u8 { - return switch (@enumToInt(self)) { + return switch (@intFromEnum(self)) { 0...31 => 32, 32...63 => 64, 64...79 => 128, @@ -696,8 +696,8 @@ pub const Instruction = union(enum) { /// Encodes the condition into the instruction bit pattern. pub fn enc(cond: Condition) u4 { return switch (cond) { - .icond => |c| @enumToInt(c), - .fcond => |c| @enumToInt(c), + .icond => |c| @intFromEnum(c), + .fcond => |c| @intFromEnum(c), }; } @@ -786,7 +786,7 @@ pub const Instruction = union(enum) { const udisp_truncated = @truncate(u22, udisp >> 2); return Instruction{ .format_2b = .{ - .a = @boolToInt(annul), + .a = @intFromBool(annul), .cond = cond.enc(), .op2 = op2, .disp22 = udisp_truncated, @@ -803,16 +803,16 @@ pub const Instruction = union(enum) { // Discard the last two bits since those are implicitly zero. const udisp_truncated = @truncate(u19, udisp >> 2); - const ccr_cc1 = @truncate(u1, @enumToInt(ccr) >> 1); - const ccr_cc0 = @truncate(u1, @enumToInt(ccr)); + const ccr_cc1 = @truncate(u1, @intFromEnum(ccr) >> 1); + const ccr_cc0 = @truncate(u1, @intFromEnum(ccr)); return Instruction{ .format_2c = .{ - .a = @boolToInt(annul), + .a = @intFromBool(annul), .cond = cond.enc(), .op2 = op2, .cc1 = ccr_cc1, .cc0 = ccr_cc0, - .p = @boolToInt(pt), + .p = @intFromBool(pt), .disp19 = udisp_truncated, }, }; @@ -831,10 +831,10 @@ pub const Instruction = union(enum) { const udisp_lo = @truncate(u14, udisp_truncated & 0b0011_1111_1111_1111); return Instruction{ .format_2d = .{ - .a = @boolToInt(annul), - .rcond = @enumToInt(rcond), + .a = @intFromBool(annul), + .rcond = @intFromEnum(rcond), .op2 = op2, - .p = @boolToInt(pt), + .p = @intFromBool(pt), .rs1 = rs1.enc(), .d16hi = udisp_hi, .d16lo = udisp_lo, @@ -891,7 +891,7 @@ pub const Instruction = union(enum) { .rd = rd.enc(), .op3 = op3, .rs1 = rs1.enc(), - .rcond = @enumToInt(rcond), + .rcond = @intFromEnum(rcond), .rs2 = rs2.enc(), }, }; @@ -903,7 +903,7 @@ pub const Instruction = union(enum) { .rd = rd.enc(), .op3 = op3, .rs1 = rs1.enc(), - .rcond = @enumToInt(rcond), + .rcond = @intFromEnum(rcond), .simm10 = @bitCast(u10, imm), }, }; @@ -934,7 +934,7 @@ pub const Instruction = union(enum) { .rd = rd.enc(), .op3 = op3, .rs1 = rs1.enc(), - .imm_asi = @enumToInt(asi), + .imm_asi = @intFromEnum(asi), .rs2 = rs2.enc(), }, }; @@ -956,7 +956,7 @@ pub const Instruction = union(enum) { .rd = rd.enc(), .op3 = op3, .rs1 = rs1.enc(), - .x = @enumToInt(sw), + .x = @intFromEnum(sw), .rs2 = rs2.enc(), }, }; @@ -995,8 +995,8 @@ pub const Instruction = union(enum) { }; } fn format3o(op: u2, op3: u6, opf: u9, ccr: CCR, rs1: Register, rs2: Register) Instruction { - const ccr_cc1 = @truncate(u1, @enumToInt(ccr) >> 1); - const ccr_cc0 = @truncate(u1, @enumToInt(ccr)); + const ccr_cc1 = @truncate(u1, @intFromEnum(ccr) >> 1); + const ccr_cc0 = @truncate(u1, @intFromEnum(ccr)); return Instruction{ .format_3o = .{ .op = op, @@ -1051,8 +1051,8 @@ pub const Instruction = union(enum) { } fn format4a(op3: u6, ccr: CCR, rs1: Register, rs2: Register, rd: Register) Instruction { - const ccr_cc1 = @truncate(u1, @enumToInt(ccr) >> 1); - const ccr_cc0 = @truncate(u1, @enumToInt(ccr)); + const ccr_cc1 = @truncate(u1, @intFromEnum(ccr) >> 1); + const ccr_cc0 = @truncate(u1, @intFromEnum(ccr)); return Instruction{ .format_4a = .{ .rd = rd.enc(), @@ -1066,8 +1066,8 @@ pub const Instruction = union(enum) { } fn format4b(op3: u6, ccr: CCR, rs1: Register, imm: i11, rd: Register) Instruction { - const ccr_cc1 = @truncate(u1, @enumToInt(ccr) >> 1); - const ccr_cc0 = @truncate(u1, @enumToInt(ccr)); + const ccr_cc1 = @truncate(u1, @intFromEnum(ccr) >> 1); + const ccr_cc0 = @truncate(u1, @intFromEnum(ccr)); return Instruction{ .format_4b = .{ .rd = rd.enc(), @@ -1081,9 +1081,9 @@ pub const Instruction = union(enum) { } fn format4c(op3: u6, cond: Condition, ccr: CCR, rs2: Register, rd: Register) Instruction { - const ccr_cc2 = @truncate(u1, @enumToInt(ccr) >> 2); - const ccr_cc1 = @truncate(u1, @enumToInt(ccr) >> 1); - const ccr_cc0 = @truncate(u1, @enumToInt(ccr)); + const ccr_cc2 = @truncate(u1, @intFromEnum(ccr) >> 2); + const ccr_cc1 = @truncate(u1, @intFromEnum(ccr) >> 1); + const ccr_cc0 = @truncate(u1, @intFromEnum(ccr)); return Instruction{ .format_4c = .{ .rd = rd.enc(), @@ -1098,9 +1098,9 @@ pub const Instruction = union(enum) { } fn format4d(op3: u6, cond: Condition, ccr: CCR, imm: i11, rd: Register) Instruction { - const ccr_cc2 = @truncate(u1, @enumToInt(ccr) >> 2); - const ccr_cc1 = @truncate(u1, @enumToInt(ccr) >> 1); - const ccr_cc0 = @truncate(u1, @enumToInt(ccr)); + const ccr_cc2 = @truncate(u1, @intFromEnum(ccr) >> 2); + const ccr_cc1 = @truncate(u1, @intFromEnum(ccr) >> 1); + const ccr_cc0 = @truncate(u1, @intFromEnum(ccr)); return Instruction{ .format_4d = .{ .rd = rd.enc(), @@ -1115,8 +1115,8 @@ pub const Instruction = union(enum) { } fn format4e(op3: u6, ccr: CCR, rs1: Register, rd: Register, sw_trap: u7) Instruction { - const ccr_cc1 = @truncate(u1, @enumToInt(ccr) >> 1); - const ccr_cc0 = @truncate(u1, @enumToInt(ccr)); + const ccr_cc1 = @truncate(u1, @intFromEnum(ccr) >> 1); + const ccr_cc0 = @truncate(u1, @intFromEnum(ccr)); return Instruction{ .format_4e = .{ .rd = rd.enc(), @@ -1142,7 +1142,7 @@ pub const Instruction = union(enum) { .rd = rd.enc(), .op3 = op3, .rs1 = rs1.enc(), - .rcond = @enumToInt(rcond), + .rcond = @intFromEnum(rcond), .opf_low = opf_low, .rs2 = rs2.enc(), }, @@ -1468,8 +1468,8 @@ pub const Instruction = union(enum) { pub fn trap(comptime s2: type, cond: ICondition, ccr: CCR, rs1: Register, rs2: s2) Instruction { // Tcc instructions abuse the rd field to store the conditionals. return switch (s2) { - Register => format4a(0b11_1010, ccr, rs1, rs2, @intToEnum(Register, @enumToInt(cond))), - u7 => format4e(0b11_1010, ccr, rs1, @intToEnum(Register, @enumToInt(cond)), rs2), + Register => format4a(0b11_1010, ccr, rs1, rs2, @enumFromInt(Register, @intFromEnum(cond))), + u7 => format4e(0b11_1010, ccr, rs1, @enumFromInt(Register, @intFromEnum(cond)), rs2), else => unreachable, }; } diff --git a/src/arch/wasm/CodeGen.zig b/src/arch/wasm/CodeGen.zig index 4c92b093ae..efd5ea6642 100644 --- a/src/arch/wasm/CodeGen.zig +++ b/src/arch/wasm/CodeGen.zig @@ -116,11 +116,11 @@ const WValue = union(enum) { fn free(value: *WValue, gen: *CodeGen) void { if (value.* != .local) return; const local_value = value.local.value; - const reserved = gen.args.len + @boolToInt(gen.return_value != .none); + const reserved = gen.args.len + @intFromBool(gen.return_value != .none); if (local_value < reserved + 2) return; // reserved locals may never be re-used. Also accounts for 2 stack locals. const index = local_value - reserved; - const valtype = @intToEnum(wasm.Valtype, gen.locals.items[index]); + const valtype = @enumFromInt(wasm.Valtype, gen.locals.items[index]); switch (valtype) { .i32 => gen.free_locals_i32.append(gen.gpa, local_value) catch return, // It's ok to fail any of those, a new local can be allocated instead .i64 => gen.free_locals_i64.append(gen.gpa, local_value) catch return, @@ -889,7 +889,7 @@ fn processDeath(func: *CodeGen, ref: Air.Inst.Ref) void { // TODO: Upon branch consolidation free any locals if needed. const value = func.currentBranch().values.getPtr(ref) orelse return; if (value.* != .local) return; - const reserved_indexes = func.args.len + @boolToInt(func.return_value != .none); + const reserved_indexes = func.args.len + @intFromBool(func.return_value != .none); if (value.local.value < reserved_indexes) { return; // function arguments can never be re-used } @@ -911,7 +911,7 @@ fn addTag(func: *CodeGen, tag: Mir.Inst.Tag) error{OutOfMemory}!void { fn addExtended(func: *CodeGen, opcode: wasm.MiscOpcode) error{OutOfMemory}!void { const extra_index = @intCast(u32, func.mir_extra.items.len); - try func.mir_extra.append(func.gpa, @enumToInt(opcode)); + try func.mir_extra.append(func.gpa, @intFromEnum(opcode)); try func.addInst(.{ .tag = .misc_prefix, .data = .{ .payload = extra_index } }); } @@ -3218,7 +3218,7 @@ fn lowerConstant(func: *CodeGen, arg_val: Value, ty: Type) InnerError!WValue { return WValue{ .imm32 = 0 }; } } else { - return WValue{ .imm32 = @boolToInt(!val.isNull(mod)) }; + return WValue{ .imm32 = @intFromBool(!val.isNull(mod)) }; }, .aggregate => switch (mod.intern_pool.indexToKey(ty.ip_index)) { .array_type => return func.fail("Wasm TODO: LowerConstant for {}", .{ty.fmt(mod)}), @@ -3904,7 +3904,7 @@ fn airSwitchBr(func: *CodeGen, inst: Air.Inst.Index) InnerError!void { } // Account for default branch so always add '1' - const depth = @intCast(u32, highest - lowest + @boolToInt(has_else_body)) + 1; + const depth = @intCast(u32, highest - lowest + @intFromBool(has_else_body)) + 1; const jump_table: Mir.JumpTable = .{ .length = depth }; const table_extra_index = try func.addExtra(jump_table); try func.addInst(.{ .tag = .br_table, .data = .{ .payload = table_extra_index } }); @@ -3939,7 +3939,7 @@ fn airSwitchBr(func: *CodeGen, inst: Air.Inst.Index) InnerError!void { break :blk target_ty.intInfo(mod).signedness; }; - try func.branches.ensureUnusedCapacity(func.gpa, case_list.items.len + @boolToInt(has_else_body)); + try func.branches.ensureUnusedCapacity(func.gpa, case_list.items.len + @intFromBool(has_else_body)); for (case_list.items, 0..) |case, index| { // when sparse, we use if/else-chain, so emit conditional checks if (is_sparse) { @@ -4821,7 +4821,7 @@ fn airIntFromFloat(func: *CodeGen, inst: Air.Inst.Index) InnerError!void { const op_ty = func.typeOf(ty_op.operand); if (op_ty.abiSize(mod) > 8) { - return func.fail("TODO: floatToInt for integers/floats with bitsize larger than 64 bits", .{}); + return func.fail("TODO: intFromFloat for integers/floats with bitsize larger than 64 bits", .{}); } try func.emitWValue(operand); @@ -4846,7 +4846,7 @@ fn airFloatFromInt(func: *CodeGen, inst: Air.Inst.Index) InnerError!void { const op_ty = func.typeOf(ty_op.operand); if (op_ty.abiSize(mod) > 8) { - return func.fail("TODO: intToFloat for integers/floats with bitsize larger than 64 bits", .{}); + return func.fail("TODO: floatFromInt for integers/floats with bitsize larger than 64 bits", .{}); } try func.emitWValue(operand); diff --git a/src/arch/wasm/Emit.zig b/src/arch/wasm/Emit.zig index 45ad1d7eb3..3314f4d993 100644 --- a/src/arch/wasm/Emit.zig +++ b/src/arch/wasm/Emit.zig @@ -269,12 +269,12 @@ fn emitLocals(emit: *Emit) !void { } fn emitTag(emit: *Emit, tag: Mir.Inst.Tag) !void { - try emit.code.append(@enumToInt(tag)); + try emit.code.append(@intFromEnum(tag)); } fn emitBlock(emit: *Emit, tag: Mir.Inst.Tag, inst: Mir.Inst.Index) !void { const block_type = emit.mir.instructions.items(.data)[inst].block_type; - try emit.code.append(@enumToInt(tag)); + try emit.code.append(@intFromEnum(tag)); try emit.code.append(block_type); } @@ -293,13 +293,13 @@ fn emitBrTable(emit: *Emit, inst: Mir.Inst.Index) !void { fn emitLabel(emit: *Emit, tag: Mir.Inst.Tag, inst: Mir.Inst.Index) !void { const label = emit.mir.instructions.items(.data)[inst].label; - try emit.code.append(@enumToInt(tag)); + try emit.code.append(@intFromEnum(tag)); try leb128.writeULEB128(emit.code.writer(), label); } fn emitGlobal(emit: *Emit, tag: Mir.Inst.Tag, inst: Mir.Inst.Index) !void { const label = emit.mir.instructions.items(.data)[inst].label; - try emit.code.append(@enumToInt(tag)); + try emit.code.append(@intFromEnum(tag)); var buf: [5]u8 = undefined; leb128.writeUnsignedFixed(5, &buf, label); const global_offset = emit.offset(); @@ -343,7 +343,7 @@ fn emitFloat64(emit: *Emit, inst: Mir.Inst.Index) !void { fn emitMemArg(emit: *Emit, tag: Mir.Inst.Tag, inst: Mir.Inst.Index) !void { const extra_index = emit.mir.instructions.items(.data)[inst].payload; const mem_arg = emit.mir.extraData(Mir.MemArg, extra_index).data; - try emit.code.append(@enumToInt(tag)); + try emit.code.append(@intFromEnum(tag)); try encodeMemArg(mem_arg, emit.code.writer()); } @@ -436,7 +436,7 @@ fn emitExtended(emit: *Emit, inst: Mir.Inst.Index) !void { const writer = emit.code.writer(); try emit.code.append(std.wasm.opcode(.misc_prefix)); try leb128.writeULEB128(writer, opcode); - switch (@intToEnum(std.wasm.MiscOpcode, opcode)) { + switch (@enumFromInt(std.wasm.MiscOpcode, opcode)) { // bulk-memory opcodes .data_drop => { const segment = emit.mir.extra[extra_index + 1]; @@ -475,7 +475,7 @@ fn emitSimd(emit: *Emit, inst: Mir.Inst.Index) !void { const writer = emit.code.writer(); try emit.code.append(std.wasm.opcode(.simd_prefix)); try leb128.writeULEB128(writer, opcode); - switch (@intToEnum(std.wasm.SimdOpcode, opcode)) { + switch (@enumFromInt(std.wasm.SimdOpcode, opcode)) { .v128_store, .v128_load, .v128_load8_splat, @@ -526,7 +526,7 @@ fn emitAtomic(emit: *Emit, inst: Mir.Inst.Index) !void { const writer = emit.code.writer(); try emit.code.append(std.wasm.opcode(.atomics_prefix)); try leb128.writeULEB128(writer, opcode); - switch (@intToEnum(std.wasm.AtomicsOpcode, opcode)) { + switch (@enumFromInt(std.wasm.AtomicsOpcode, opcode)) { .i32_atomic_load, .i64_atomic_load, .i32_atomic_load8_u, diff --git a/src/arch/wasm/Mir.zig b/src/arch/wasm/Mir.zig index 4c550d8637..6e93f0fb88 100644 --- a/src/arch/wasm/Mir.zig +++ b/src/arch/wasm/Mir.zig @@ -544,12 +544,12 @@ pub const Inst = struct { /// From a given wasm opcode, returns a MIR tag. pub fn fromOpcode(opcode: std.wasm.Opcode) Tag { - return @intToEnum(Tag, @enumToInt(opcode)); // Given `Opcode` is not present as a tag for MIR yet + return @enumFromInt(Tag, @intFromEnum(opcode)); // Given `Opcode` is not present as a tag for MIR yet } /// Returns a wasm opcode from a given MIR tag. pub fn toOpcode(self: Tag) std.wasm.Opcode { - return @intToEnum(std.wasm.Opcode, @enumToInt(self)); + return @enumFromInt(std.wasm.Opcode, @intFromEnum(self)); } }; diff --git a/src/arch/x86/bits.zig b/src/arch/x86/bits.zig index 3f4ad26e26..0bb2cbea30 100644 --- a/src/arch/x86/bits.zig +++ b/src/arch/x86/bits.zig @@ -14,7 +14,7 @@ pub const Register = enum(u8) { /// Returns the bit-width of the register. pub fn size(self: Register) u7 { - return switch (@enumToInt(self)) { + return switch (@intFromEnum(self)) { 0...7 => 32, 8...15 => 16, 16...23 => 8, @@ -26,22 +26,22 @@ pub const Register = enum(u8) { /// x86 has. It is embedded in some instructions, such as the `B8 +rd` move /// instruction, and is used in the R/M byte. pub fn id(self: Register) u3 { - return @truncate(u3, @enumToInt(self)); + return @truncate(u3, @intFromEnum(self)); } /// Convert from any register to its 32 bit alias. pub fn to32(self: Register) Register { - return @intToEnum(Register, @as(u8, self.id())); + return @enumFromInt(Register, @as(u8, self.id())); } /// Convert from any register to its 16 bit alias. pub fn to16(self: Register) Register { - return @intToEnum(Register, @as(u8, self.id()) + 8); + return @enumFromInt(Register, @as(u8, self.id()) + 8); } /// Convert from any register to its 8 bit alias. pub fn to8(self: Register) Register { - return @intToEnum(Register, @as(u8, self.id()) + 16); + return @enumFromInt(Register, @as(u8, self.id()) + 16); } pub fn dwarfLocOp(reg: Register) u8 { diff --git a/src/arch/x86_64/CodeGen.zig b/src/arch/x86_64/CodeGen.zig index 375b72bad5..b4ef42b953 100644 --- a/src/arch/x86_64/CodeGen.zig +++ b/src/arch/x86_64/CodeGen.zig @@ -690,7 +690,7 @@ pub fn generate( try function.frame_allocs.resize(gpa, FrameIndex.named_count); function.frame_allocs.set( - @enumToInt(FrameIndex.stack_frame), + @intFromEnum(FrameIndex.stack_frame), FrameAlloc.init(.{ .size = 0, .alignment = if (mod.align_stack_fns.get(module_fn_index)) |set_align_stack| @@ -700,7 +700,7 @@ pub fn generate( }), ); function.frame_allocs.set( - @enumToInt(FrameIndex.call_frame), + @intFromEnum(FrameIndex.call_frame), FrameAlloc.init(.{ .size = 0, .alignment = 1 }), ); @@ -721,16 +721,16 @@ pub fn generate( function.args = call_info.args; function.ret_mcv = call_info.return_value; - function.frame_allocs.set(@enumToInt(FrameIndex.ret_addr), FrameAlloc.init(.{ + function.frame_allocs.set(@intFromEnum(FrameIndex.ret_addr), FrameAlloc.init(.{ .size = Type.usize.abiSize(mod), .alignment = @min(Type.usize.abiAlignment(mod), call_info.stack_align), })); - function.frame_allocs.set(@enumToInt(FrameIndex.base_ptr), FrameAlloc.init(.{ + function.frame_allocs.set(@intFromEnum(FrameIndex.base_ptr), FrameAlloc.init(.{ .size = Type.usize.abiSize(mod), .alignment = @min(Type.usize.abiAlignment(mod) * 2, call_info.stack_align), })); function.frame_allocs.set( - @enumToInt(FrameIndex.args_frame), + @intFromEnum(FrameIndex.args_frame), FrameAlloc.init(.{ .size = call_info.stack_byte_count, .alignment = call_info.stack_align }), ); @@ -2147,7 +2147,7 @@ fn setFrameLoc( offset: *i32, comptime aligned: bool, ) void { - const frame_i = @enumToInt(frame_index); + const frame_i = @intFromEnum(frame_index); if (aligned) { const alignment = @as(i32, 1) << self.frame_allocs.items(.abi_align)[frame_i]; offset.* = mem.alignForward(i32, offset.*, alignment); @@ -2167,21 +2167,21 @@ fn computeFrameLayout(self: *Self) !FrameLayout { const frame_offset = self.frame_locs.items(.disp); for (stack_frame_order, FrameIndex.named_count..) |*frame_order, frame_index| - frame_order.* = @intToEnum(FrameIndex, frame_index); + frame_order.* = @enumFromInt(FrameIndex, frame_index); { const SortContext = struct { frame_align: @TypeOf(frame_align), pub fn lessThan(context: @This(), lhs: FrameIndex, rhs: FrameIndex) bool { - return context.frame_align[@enumToInt(lhs)] > context.frame_align[@enumToInt(rhs)]; + return context.frame_align[@intFromEnum(lhs)] > context.frame_align[@intFromEnum(rhs)]; } }; const sort_context = SortContext{ .frame_align = frame_align }; mem.sort(FrameIndex, stack_frame_order, sort_context, SortContext.lessThan); } - const call_frame_align = frame_align[@enumToInt(FrameIndex.call_frame)]; - const stack_frame_align = frame_align[@enumToInt(FrameIndex.stack_frame)]; - const args_frame_align = frame_align[@enumToInt(FrameIndex.args_frame)]; + const call_frame_align = frame_align[@intFromEnum(FrameIndex.call_frame)]; + const stack_frame_align = frame_align[@intFromEnum(FrameIndex.stack_frame)]; + const args_frame_align = frame_align[@intFromEnum(FrameIndex.args_frame)]; const needed_align = @max(call_frame_align, stack_frame_align); const need_align_stack = needed_align > args_frame_align; @@ -2200,7 +2200,7 @@ fn computeFrameLayout(self: *Self) !FrameLayout { self.setFrameLoc(.ret_addr, .rbp, &rbp_offset, false); self.setFrameLoc(.args_frame, .rbp, &rbp_offset, false); const stack_frame_align_offset = - if (need_align_stack) 0 else frame_offset[@enumToInt(FrameIndex.args_frame)]; + if (need_align_stack) 0 else frame_offset[@intFromEnum(FrameIndex.args_frame)]; var rsp_offset: i32 = 0; self.setFrameLoc(.call_frame, .rsp, &rsp_offset, true); @@ -2209,23 +2209,23 @@ fn computeFrameLayout(self: *Self) !FrameLayout { rsp_offset += stack_frame_align_offset; rsp_offset = mem.alignForward(i32, rsp_offset, @as(i32, 1) << needed_align); rsp_offset -= stack_frame_align_offset; - frame_size[@enumToInt(FrameIndex.call_frame)] = - @intCast(u31, rsp_offset - frame_offset[@enumToInt(FrameIndex.stack_frame)]); + frame_size[@intFromEnum(FrameIndex.call_frame)] = + @intCast(u31, rsp_offset - frame_offset[@intFromEnum(FrameIndex.stack_frame)]); return .{ .stack_mask = @as(u32, math.maxInt(u32)) << (if (need_align_stack) needed_align else 0), - .stack_adjust = @intCast(u32, rsp_offset - frame_offset[@enumToInt(FrameIndex.call_frame)]), + .stack_adjust = @intCast(u32, rsp_offset - frame_offset[@intFromEnum(FrameIndex.call_frame)]), .save_reg_list = save_reg_list, }; } fn getFrameAddrAlignment(self: *Self, frame_addr: FrameAddr) u32 { - const alloc_align = @as(u32, 1) << self.frame_allocs.get(@enumToInt(frame_addr.index)).abi_align; + const alloc_align = @as(u32, 1) << self.frame_allocs.get(@intFromEnum(frame_addr.index)).abi_align; return @min(alloc_align, @bitCast(u32, frame_addr.off) & (alloc_align - 1)); } fn getFrameAddrSize(self: *Self, frame_addr: FrameAddr) u32 { - return self.frame_allocs.get(@enumToInt(frame_addr.index)).abi_size - @intCast(u31, frame_addr.off); + return self.frame_allocs.get(@intFromEnum(frame_addr.index)).abi_size - @intCast(u31, frame_addr.off); } fn allocFrameIndex(self: *Self, alloc: FrameAlloc) !FrameIndex { @@ -2233,19 +2233,19 @@ fn allocFrameIndex(self: *Self, alloc: FrameAlloc) !FrameIndex { const frame_size = frame_allocs_slice.items(.abi_size); const frame_align = frame_allocs_slice.items(.abi_align); - const stack_frame_align = &frame_align[@enumToInt(FrameIndex.stack_frame)]; + const stack_frame_align = &frame_align[@intFromEnum(FrameIndex.stack_frame)]; stack_frame_align.* = @max(stack_frame_align.*, alloc.abi_align); for (self.free_frame_indices.keys(), 0..) |frame_index, free_i| { - const abi_size = frame_size[@enumToInt(frame_index)]; + const abi_size = frame_size[@intFromEnum(frame_index)]; if (abi_size != alloc.abi_size) continue; - const abi_align = &frame_align[@enumToInt(frame_index)]; + const abi_align = &frame_align[@intFromEnum(frame_index)]; abi_align.* = @max(abi_align.*, alloc.abi_align); _ = self.free_frame_indices.swapRemoveAt(free_i); return frame_index; } - const frame_index = @intToEnum(FrameIndex, self.frame_allocs.len); + const frame_index = @enumFromInt(FrameIndex, self.frame_allocs.len); try self.frame_allocs.append(self.gpa, alloc); return frame_index; } @@ -2876,7 +2876,7 @@ fn activeIntBits(self: *Self, dst_air: Air.Inst.Ref) u16 { var space: Value.BigIntSpace = undefined; const src_int = src_val.toBigInt(&space, mod); return @intCast(u16, src_int.bitCountTwosComp()) + - @boolToInt(src_int.positive and dst_info.signedness == .signed); + @intFromBool(src_int.positive and dst_info.signedness == .signed); }, .intcast => { const src_ty = self.typeOf(air_data[inst].ty_op.operand); @@ -8034,10 +8034,10 @@ fn airCall(self: *Self, inst: Air.Inst.Index, modifier: std.builtin.CallModifier FrameAlloc.init(.{ .size = info.stack_byte_count, .alignment = info.stack_align }); const frame_allocs_slice = self.frame_allocs.slice(); const stack_frame_size = - &frame_allocs_slice.items(.abi_size)[@enumToInt(FrameIndex.call_frame)]; + &frame_allocs_slice.items(.abi_size)[@intFromEnum(FrameIndex.call_frame)]; stack_frame_size.* = @max(stack_frame_size.*, needed_call_frame.abi_size); const stack_frame_align = - &frame_allocs_slice.items(.abi_align)[@enumToInt(FrameIndex.call_frame)]; + &frame_allocs_slice.items(.abi_align)[@intFromEnum(FrameIndex.call_frame)]; stack_frame_align.* = @max(stack_frame_align.*, needed_call_frame.abi_align); } @@ -10915,10 +10915,10 @@ fn airTagName(self: *Self, inst: Air.Inst.Index) !void { }); const frame_allocs_slice = self.frame_allocs.slice(); const stack_frame_size = - &frame_allocs_slice.items(.abi_size)[@enumToInt(FrameIndex.call_frame)]; + &frame_allocs_slice.items(.abi_size)[@intFromEnum(FrameIndex.call_frame)]; stack_frame_size.* = @max(stack_frame_size.*, needed_call_frame.abi_size); const stack_frame_align = - &frame_allocs_slice.items(.abi_align)[@enumToInt(FrameIndex.call_frame)]; + &frame_allocs_slice.items(.abi_align)[@intFromEnum(FrameIndex.call_frame)]; stack_frame_align.* = @max(stack_frame_align.*, needed_call_frame.abi_align); } @@ -11413,7 +11413,7 @@ fn airUnionInit(self: *Self, inst: Air.Inst.Index) !void { const tag_ty = union_obj.tag_ty; const field_index = tag_ty.enumFieldIndex(field_name, mod).?; const tag_val = try mod.enumValueFieldIndex(tag_ty, field_index); - const tag_int_val = try tag_val.enumToInt(tag_ty, mod); + const tag_int_val = try tag_val.intFromEnum(tag_ty, mod); const tag_int = tag_int_val.toUnsignedInt(mod); const tag_off = if (layout.tag_align < layout.payload_align) @intCast(i32, layout.payload_size) @@ -11637,7 +11637,7 @@ fn limitImmediateType(self: *Self, operand: Air.Inst.Ref, comptime T: type) !MCV switch (mcv) { .immediate => |imm| { // This immediate is unsigned. - const U = std.meta.Int(.unsigned, ti.bits - @boolToInt(ti.signedness == .signed)); + const U = std.meta.Int(.unsigned, ti.bits - @intFromBool(ti.signedness == .signed)); if (imm >= math.maxInt(U)) { return MCValue{ .register = try self.copyToTmpRegister(Type.usize, mcv) }; } @@ -11782,17 +11782,17 @@ fn resolveCallingConventionValues( }, .float, .sse => switch (self.target.os.tag) { .windows => if (param_reg_i < 4) { - arg.* = .{ .register = @intToEnum( + arg.* = .{ .register = @enumFromInt( Register, - @enumToInt(Register.xmm0) + param_reg_i, + @intFromEnum(Register.xmm0) + param_reg_i, ) }; param_reg_i += 1; continue; }, else => if (param_sse_reg_i < 8) { - arg.* = .{ .register = @intToEnum( + arg.* = .{ .register = @enumFromInt( Register, - @enumToInt(Register.xmm0) + param_sse_reg_i, + @intFromEnum(Register.xmm0) + param_sse_reg_i, ) }; param_sse_reg_i += 1; continue; diff --git a/src/arch/x86_64/Encoding.zig b/src/arch/x86_64/Encoding.zig index 625a5283b9..a3963ca149 100644 --- a/src/arch/x86_64/Encoding.zig +++ b/src/arch/x86_64/Encoding.zig @@ -56,7 +56,7 @@ pub fn findByMnemonic( var shortest_enc: ?Encoding = null; var shortest_len: ?usize = null; - next: for (mnemonic_to_encodings_map[@enumToInt(mnemonic)]) |data| { + next: for (mnemonic_to_encodings_map[@intFromEnum(mnemonic)]) |data| { switch (data.mode) { .none, .short => if (rex_required) continue, .rex, .rex_short => if (!rex_required) continue, @@ -85,7 +85,7 @@ pub fn findByOpcode(opc: []const u8, prefixes: struct { rex: Rex, }, modrm_ext: ?u3) ?Encoding { for (mnemonic_to_encodings_map, 0..) |encs, mnemonic_int| for (encs) |data| { - const enc = Encoding{ .mnemonic = @intToEnum(Mnemonic, mnemonic_int), .data = data }; + const enc = Encoding{ .mnemonic = @enumFromInt(Mnemonic, mnemonic_int), .data = data }; if (modrm_ext) |ext| if (ext != data.modrm_ext) continue; if (!std.mem.eql(u8, opc, enc.opcode())) continue; if (prefixes.rex.w) { @@ -772,7 +772,7 @@ const mnemonic_to_encodings_map = init: { var entries = encodings.table; std.mem.sort(encodings.Entry, &entries, {}, struct { fn lessThan(_: void, lhs: encodings.Entry, rhs: encodings.Entry) bool { - return @enumToInt(lhs[0]) < @enumToInt(rhs[0]); + return @intFromEnum(lhs[0]) < @intFromEnum(rhs[0]); } }.lessThan); var data_storage: [entries.len]Data = undefined; @@ -794,7 +794,7 @@ const mnemonic_to_encodings_map = init: { std.mem.copyForwards(Op, &data.ops, entry[2]); std.mem.copyForwards(u8, &data.opc, entry[3]); - while (mnemonic_int < @enumToInt(entry[0])) : (mnemonic_int += 1) { + while (mnemonic_int < @intFromEnum(entry[0])) : (mnemonic_int += 1) { mnemonic_map[mnemonic_int] = data_storage[mnemonic_start..data_index]; mnemonic_start = data_index; } diff --git a/src/arch/x86_64/Mir.zig b/src/arch/x86_64/Mir.zig index 96b7742929..36eacf4db9 100644 --- a/src/arch/x86_64/Mir.zig +++ b/src/arch/x86_64/Mir.zig @@ -1053,16 +1053,16 @@ pub const MemorySib = struct { const sib = mem.sib; assert(sib.scale_index.scale == 0 or std.math.isPowerOfTwo(sib.scale_index.scale)); return .{ - .ptr_size = @enumToInt(sib.ptr_size), - .base_tag = @enumToInt(@as(Memory.Base.Tag, sib.base)), + .ptr_size = @intFromEnum(sib.ptr_size), + .base_tag = @intFromEnum(@as(Memory.Base.Tag, sib.base)), .base = switch (sib.base) { .none => undefined, - .reg => |r| @enumToInt(r), - .frame => |fi| @enumToInt(fi), + .reg => |r| @intFromEnum(r), + .frame => |fi| @intFromEnum(fi), }, .scale_index = @as(u32, sib.scale_index.scale) << 0 | @as(u32, if (sib.scale_index.scale > 0) - @enumToInt(sib.scale_index.index) + @intFromEnum(sib.scale_index.index) else undefined) << 4, .disp = sib.disp, @@ -1073,15 +1073,15 @@ pub const MemorySib = struct { const scale = @truncate(u4, msib.scale_index); assert(scale == 0 or std.math.isPowerOfTwo(scale)); return .{ .sib = .{ - .ptr_size = @intToEnum(Memory.PtrSize, msib.ptr_size), - .base = switch (@intToEnum(Memory.Base.Tag, msib.base_tag)) { + .ptr_size = @enumFromInt(Memory.PtrSize, msib.ptr_size), + .base = switch (@enumFromInt(Memory.Base.Tag, msib.base_tag)) { .none => .none, - .reg => .{ .reg = @intToEnum(Register, msib.base) }, - .frame => .{ .frame = @intToEnum(bits.FrameIndex, msib.base) }, + .reg => .{ .reg = @enumFromInt(Register, msib.base) }, + .frame => .{ .frame = @enumFromInt(bits.FrameIndex, msib.base) }, }, .scale_index = .{ .scale = scale, - .index = if (scale > 0) @intToEnum(Register, msib.scale_index >> 4) else undefined, + .index = if (scale > 0) @enumFromInt(Register, msib.scale_index >> 4) else undefined, }, .disp = msib.disp, } }; @@ -1096,14 +1096,14 @@ pub const MemoryRip = struct { pub fn encode(mem: Memory) MemoryRip { return .{ - .ptr_size = @enumToInt(mem.rip.ptr_size), + .ptr_size = @intFromEnum(mem.rip.ptr_size), .disp = mem.rip.disp, }; } pub fn decode(mrip: MemoryRip) Memory { return .{ .rip = .{ - .ptr_size = @intToEnum(Memory.PtrSize, mrip.ptr_size), + .ptr_size = @enumFromInt(Memory.PtrSize, mrip.ptr_size), .disp = mrip.disp, } }; } @@ -1119,7 +1119,7 @@ pub const MemoryMoffs = struct { pub fn encode(seg: Register, offset: u64) MemoryMoffs { return .{ - .seg = @enumToInt(seg), + .seg = @intFromEnum(seg), .msb = @truncate(u32, offset >> 32), .lsb = @truncate(u32, offset >> 0), }; @@ -1127,7 +1127,7 @@ pub const MemoryMoffs = struct { pub fn decode(moffs: MemoryMoffs) Memory { return .{ .moffs = .{ - .seg = @intToEnum(Register, moffs.seg), + .seg = @enumFromInt(Register, moffs.seg), .offset = @as(u64, moffs.msb) << 32 | @as(u64, moffs.lsb) << 0, } }; } @@ -1168,8 +1168,8 @@ pub fn resolveFrameLoc(mir: Mir, mem: Memory) Memory { .sib => |sib| switch (sib.base) { .none, .reg => mem, .frame => |index| if (mir.frame_locs.len > 0) Memory.sib(sib.ptr_size, .{ - .base = .{ .reg = mir.frame_locs.items(.base)[@enumToInt(index)] }, - .disp = mir.frame_locs.items(.disp)[@enumToInt(index)] + sib.disp, + .base = .{ .reg = mir.frame_locs.items(.base)[@intFromEnum(index)] }, + .disp = mir.frame_locs.items(.disp)[@intFromEnum(index)] + sib.disp, .scale_index = mem.scaleIndex(), }) else mem, }, diff --git a/src/arch/x86_64/bits.zig b/src/arch/x86_64/bits.zig index 923ba31266..e232a2db05 100644 --- a/src/arch/x86_64/bits.zig +++ b/src/arch/x86_64/bits.zig @@ -193,20 +193,20 @@ pub const Register = enum(u7) { }; pub fn class(reg: Register) Class { - return switch (@enumToInt(reg)) { + return switch (@intFromEnum(reg)) { // zig fmt: off - @enumToInt(Register.rax) ... @enumToInt(Register.r15) => .general_purpose, - @enumToInt(Register.eax) ... @enumToInt(Register.r15d) => .general_purpose, - @enumToInt(Register.ax) ... @enumToInt(Register.r15w) => .general_purpose, - @enumToInt(Register.al) ... @enumToInt(Register.r15b) => .general_purpose, - @enumToInt(Register.ah) ... @enumToInt(Register.bh) => .general_purpose, + @intFromEnum(Register.rax) ... @intFromEnum(Register.r15) => .general_purpose, + @intFromEnum(Register.eax) ... @intFromEnum(Register.r15d) => .general_purpose, + @intFromEnum(Register.ax) ... @intFromEnum(Register.r15w) => .general_purpose, + @intFromEnum(Register.al) ... @intFromEnum(Register.r15b) => .general_purpose, + @intFromEnum(Register.ah) ... @intFromEnum(Register.bh) => .general_purpose, - @enumToInt(Register.ymm0) ... @enumToInt(Register.ymm15) => .sse, - @enumToInt(Register.xmm0) ... @enumToInt(Register.xmm15) => .sse, - @enumToInt(Register.mm0) ... @enumToInt(Register.mm7) => .mmx, - @enumToInt(Register.st0) ... @enumToInt(Register.st7) => .x87, + @intFromEnum(Register.ymm0) ... @intFromEnum(Register.ymm15) => .sse, + @intFromEnum(Register.xmm0) ... @intFromEnum(Register.xmm15) => .sse, + @intFromEnum(Register.mm0) ... @intFromEnum(Register.mm7) => .mmx, + @intFromEnum(Register.st0) ... @intFromEnum(Register.st7) => .x87, - @enumToInt(Register.es) ... @enumToInt(Register.gs) => .segment, + @intFromEnum(Register.es) ... @intFromEnum(Register.gs) => .segment, else => unreachable, // zig fmt: on @@ -214,42 +214,42 @@ pub const Register = enum(u7) { } pub fn id(reg: Register) u6 { - const base = switch (@enumToInt(reg)) { + const base = switch (@intFromEnum(reg)) { // zig fmt: off - @enumToInt(Register.rax) ... @enumToInt(Register.r15) => @enumToInt(Register.rax), - @enumToInt(Register.eax) ... @enumToInt(Register.r15d) => @enumToInt(Register.eax), - @enumToInt(Register.ax) ... @enumToInt(Register.r15w) => @enumToInt(Register.ax), - @enumToInt(Register.al) ... @enumToInt(Register.r15b) => @enumToInt(Register.al), - @enumToInt(Register.ah) ... @enumToInt(Register.bh) => @enumToInt(Register.ah) - 4, + @intFromEnum(Register.rax) ... @intFromEnum(Register.r15) => @intFromEnum(Register.rax), + @intFromEnum(Register.eax) ... @intFromEnum(Register.r15d) => @intFromEnum(Register.eax), + @intFromEnum(Register.ax) ... @intFromEnum(Register.r15w) => @intFromEnum(Register.ax), + @intFromEnum(Register.al) ... @intFromEnum(Register.r15b) => @intFromEnum(Register.al), + @intFromEnum(Register.ah) ... @intFromEnum(Register.bh) => @intFromEnum(Register.ah) - 4, - @enumToInt(Register.ymm0) ... @enumToInt(Register.ymm15) => @enumToInt(Register.ymm0) - 16, - @enumToInt(Register.xmm0) ... @enumToInt(Register.xmm15) => @enumToInt(Register.xmm0) - 16, - @enumToInt(Register.mm0) ... @enumToInt(Register.mm7) => @enumToInt(Register.mm0) - 32, - @enumToInt(Register.st0) ... @enumToInt(Register.st7) => @enumToInt(Register.st0) - 40, + @intFromEnum(Register.ymm0) ... @intFromEnum(Register.ymm15) => @intFromEnum(Register.ymm0) - 16, + @intFromEnum(Register.xmm0) ... @intFromEnum(Register.xmm15) => @intFromEnum(Register.xmm0) - 16, + @intFromEnum(Register.mm0) ... @intFromEnum(Register.mm7) => @intFromEnum(Register.mm0) - 32, + @intFromEnum(Register.st0) ... @intFromEnum(Register.st7) => @intFromEnum(Register.st0) - 40, - @enumToInt(Register.es) ... @enumToInt(Register.gs) => @enumToInt(Register.es) - 48, + @intFromEnum(Register.es) ... @intFromEnum(Register.gs) => @intFromEnum(Register.es) - 48, else => unreachable, // zig fmt: on }; - return @intCast(u6, @enumToInt(reg) - base); + return @intCast(u6, @intFromEnum(reg) - base); } pub fn bitSize(reg: Register) u64 { - return switch (@enumToInt(reg)) { + return switch (@intFromEnum(reg)) { // zig fmt: off - @enumToInt(Register.rax) ... @enumToInt(Register.r15) => 64, - @enumToInt(Register.eax) ... @enumToInt(Register.r15d) => 32, - @enumToInt(Register.ax) ... @enumToInt(Register.r15w) => 16, - @enumToInt(Register.al) ... @enumToInt(Register.r15b) => 8, - @enumToInt(Register.ah) ... @enumToInt(Register.bh) => 8, + @intFromEnum(Register.rax) ... @intFromEnum(Register.r15) => 64, + @intFromEnum(Register.eax) ... @intFromEnum(Register.r15d) => 32, + @intFromEnum(Register.ax) ... @intFromEnum(Register.r15w) => 16, + @intFromEnum(Register.al) ... @intFromEnum(Register.r15b) => 8, + @intFromEnum(Register.ah) ... @intFromEnum(Register.bh) => 8, - @enumToInt(Register.ymm0) ... @enumToInt(Register.ymm15) => 256, - @enumToInt(Register.xmm0) ... @enumToInt(Register.xmm15) => 128, - @enumToInt(Register.mm0) ... @enumToInt(Register.mm7) => 64, - @enumToInt(Register.st0) ... @enumToInt(Register.st7) => 80, + @intFromEnum(Register.ymm0) ... @intFromEnum(Register.ymm15) => 256, + @intFromEnum(Register.xmm0) ... @intFromEnum(Register.xmm15) => 128, + @intFromEnum(Register.mm0) ... @intFromEnum(Register.mm7) => 64, + @intFromEnum(Register.st0) ... @intFromEnum(Register.st7) => 80, - @enumToInt(Register.es) ... @enumToInt(Register.gs) => 16, + @intFromEnum(Register.es) ... @intFromEnum(Register.gs) => 16, else => unreachable, // zig fmt: on @@ -257,15 +257,15 @@ pub const Register = enum(u7) { } pub fn isExtended(reg: Register) bool { - return switch (@enumToInt(reg)) { + return switch (@intFromEnum(reg)) { // zig fmt: off - @enumToInt(Register.r8) ... @enumToInt(Register.r15) => true, - @enumToInt(Register.r8d) ... @enumToInt(Register.r15d) => true, - @enumToInt(Register.r8w) ... @enumToInt(Register.r15w) => true, - @enumToInt(Register.r8b) ... @enumToInt(Register.r15b) => true, + @intFromEnum(Register.r8) ... @intFromEnum(Register.r15) => true, + @intFromEnum(Register.r8d) ... @intFromEnum(Register.r15d) => true, + @intFromEnum(Register.r8w) ... @intFromEnum(Register.r15w) => true, + @intFromEnum(Register.r8b) ... @intFromEnum(Register.r15b) => true, - @enumToInt(Register.ymm8) ... @enumToInt(Register.ymm15) => true, - @enumToInt(Register.xmm8) ... @enumToInt(Register.xmm15) => true, + @intFromEnum(Register.ymm8) ... @intFromEnum(Register.ymm15) => true, + @intFromEnum(Register.xmm8) ... @intFromEnum(Register.xmm15) => true, else => false, // zig fmt: on @@ -273,25 +273,25 @@ pub const Register = enum(u7) { } pub fn enc(reg: Register) u4 { - const base = switch (@enumToInt(reg)) { + const base = switch (@intFromEnum(reg)) { // zig fmt: off - @enumToInt(Register.rax) ... @enumToInt(Register.r15) => @enumToInt(Register.rax), - @enumToInt(Register.eax) ... @enumToInt(Register.r15d) => @enumToInt(Register.eax), - @enumToInt(Register.ax) ... @enumToInt(Register.r15w) => @enumToInt(Register.ax), - @enumToInt(Register.al) ... @enumToInt(Register.r15b) => @enumToInt(Register.al), - @enumToInt(Register.ah) ... @enumToInt(Register.bh) => @enumToInt(Register.ah) - 4, + @intFromEnum(Register.rax) ... @intFromEnum(Register.r15) => @intFromEnum(Register.rax), + @intFromEnum(Register.eax) ... @intFromEnum(Register.r15d) => @intFromEnum(Register.eax), + @intFromEnum(Register.ax) ... @intFromEnum(Register.r15w) => @intFromEnum(Register.ax), + @intFromEnum(Register.al) ... @intFromEnum(Register.r15b) => @intFromEnum(Register.al), + @intFromEnum(Register.ah) ... @intFromEnum(Register.bh) => @intFromEnum(Register.ah) - 4, - @enumToInt(Register.ymm0) ... @enumToInt(Register.ymm15) => @enumToInt(Register.ymm0), - @enumToInt(Register.xmm0) ... @enumToInt(Register.xmm15) => @enumToInt(Register.xmm0), - @enumToInt(Register.mm0) ... @enumToInt(Register.mm7) => @enumToInt(Register.mm0), - @enumToInt(Register.st0) ... @enumToInt(Register.st7) => @enumToInt(Register.st0), + @intFromEnum(Register.ymm0) ... @intFromEnum(Register.ymm15) => @intFromEnum(Register.ymm0), + @intFromEnum(Register.xmm0) ... @intFromEnum(Register.xmm15) => @intFromEnum(Register.xmm0), + @intFromEnum(Register.mm0) ... @intFromEnum(Register.mm7) => @intFromEnum(Register.mm0), + @intFromEnum(Register.st0) ... @intFromEnum(Register.st7) => @intFromEnum(Register.st0), - @enumToInt(Register.es) ... @enumToInt(Register.gs) => @enumToInt(Register.es), + @intFromEnum(Register.es) ... @intFromEnum(Register.gs) => @intFromEnum(Register.es), else => unreachable, // zig fmt: on }; - return @truncate(u4, @enumToInt(reg) - base); + return @truncate(u4, @intFromEnum(reg) - base); } pub fn lowEnc(reg: Register) u3 { @@ -312,49 +312,49 @@ pub const Register = enum(u7) { fn gpBase(reg: Register) u7 { assert(reg.class() == .general_purpose); - return switch (@enumToInt(reg)) { + return switch (@intFromEnum(reg)) { // zig fmt: off - @enumToInt(Register.rax) ... @enumToInt(Register.r15) => @enumToInt(Register.rax), - @enumToInt(Register.eax) ... @enumToInt(Register.r15d) => @enumToInt(Register.eax), - @enumToInt(Register.ax) ... @enumToInt(Register.r15w) => @enumToInt(Register.ax), - @enumToInt(Register.al) ... @enumToInt(Register.r15b) => @enumToInt(Register.al), - @enumToInt(Register.ah) ... @enumToInt(Register.bh) => @enumToInt(Register.ah) - 4, + @intFromEnum(Register.rax) ... @intFromEnum(Register.r15) => @intFromEnum(Register.rax), + @intFromEnum(Register.eax) ... @intFromEnum(Register.r15d) => @intFromEnum(Register.eax), + @intFromEnum(Register.ax) ... @intFromEnum(Register.r15w) => @intFromEnum(Register.ax), + @intFromEnum(Register.al) ... @intFromEnum(Register.r15b) => @intFromEnum(Register.al), + @intFromEnum(Register.ah) ... @intFromEnum(Register.bh) => @intFromEnum(Register.ah) - 4, else => unreachable, // zig fmt: on }; } pub fn to64(reg: Register) Register { - return @intToEnum(Register, @enumToInt(reg) - reg.gpBase() + @enumToInt(Register.rax)); + return @enumFromInt(Register, @intFromEnum(reg) - reg.gpBase() + @intFromEnum(Register.rax)); } pub fn to32(reg: Register) Register { - return @intToEnum(Register, @enumToInt(reg) - reg.gpBase() + @enumToInt(Register.eax)); + return @enumFromInt(Register, @intFromEnum(reg) - reg.gpBase() + @intFromEnum(Register.eax)); } pub fn to16(reg: Register) Register { - return @intToEnum(Register, @enumToInt(reg) - reg.gpBase() + @enumToInt(Register.ax)); + return @enumFromInt(Register, @intFromEnum(reg) - reg.gpBase() + @intFromEnum(Register.ax)); } pub fn to8(reg: Register) Register { - return @intToEnum(Register, @enumToInt(reg) - reg.gpBase() + @enumToInt(Register.al)); + return @enumFromInt(Register, @intFromEnum(reg) - reg.gpBase() + @intFromEnum(Register.al)); } fn sseBase(reg: Register) u7 { assert(reg.class() == .sse); - return switch (@enumToInt(reg)) { - @enumToInt(Register.ymm0)...@enumToInt(Register.ymm15) => @enumToInt(Register.ymm0), - @enumToInt(Register.xmm0)...@enumToInt(Register.xmm15) => @enumToInt(Register.xmm0), + return switch (@intFromEnum(reg)) { + @intFromEnum(Register.ymm0)...@intFromEnum(Register.ymm15) => @intFromEnum(Register.ymm0), + @intFromEnum(Register.xmm0)...@intFromEnum(Register.xmm15) => @intFromEnum(Register.xmm0), else => unreachable, }; } pub fn to256(reg: Register) Register { - return @intToEnum(Register, @enumToInt(reg) - reg.sseBase() + @enumToInt(Register.ymm0)); + return @enumFromInt(Register, @intFromEnum(reg) - reg.sseBase() + @intFromEnum(Register.ymm0)); } pub fn to128(reg: Register) Register { - return @intToEnum(Register, @enumToInt(reg) - reg.sseBase() + @enumToInt(Register.xmm0)); + return @enumFromInt(Register, @intFromEnum(reg) - reg.sseBase() + @intFromEnum(Register.xmm0)); } /// DWARF register encoding @@ -421,7 +421,7 @@ pub const FrameIndex = enum(u32) { pub const named_count = @typeInfo(FrameIndex).Enum.fields.len; pub fn isNamed(fi: FrameIndex) bool { - return @enumToInt(fi) < named_count; + return @intFromEnum(fi) < named_count; } pub fn format( @@ -436,7 +436,7 @@ pub const FrameIndex = enum(u32) { try writer.writeAll(@tagName(fi)); } else { try writer.writeByte('('); - try std.fmt.formatType(@enumToInt(fi), fmt, options, writer, 0); + try std.fmt.formatType(@intFromEnum(fi), fmt, options, writer, 0); try writer.writeByte(')'); } } diff --git a/src/arch/x86_64/encoder.zig b/src/arch/x86_64/encoder.zig index 5f9a2f49b3..d953a9410d 100644 --- a/src/arch/x86_64/encoder.zig +++ b/src/arch/x86_64/encoder.zig @@ -267,7 +267,7 @@ pub const Instruction = struct { fn encodeOpcode(inst: Instruction, encoder: anytype) !void { const opcode = inst.encoding.opcode(); - const first = @boolToInt(inst.encoding.mandatoryPrefix() != null); + const first = @intFromBool(inst.encoding.mandatoryPrefix() != null); const final = opcode.len - 1; for (opcode[first..final]) |byte| try encoder.opcode_1byte(byte); switch (inst.encoding.data.op_en) { @@ -647,25 +647,25 @@ fn Encoder(comptime T: type, comptime opts: Options) type { try self.writer.writeByte(0b1100_0100); try self.writer.writeByte( - @as(u8, ~@boolToInt(fields.r)) << 7 | - @as(u8, ~@boolToInt(fields.x)) << 6 | - @as(u8, ~@boolToInt(fields.b)) << 5 | - @as(u8, @enumToInt(fields.m)) << 0, + @as(u8, ~@intFromBool(fields.r)) << 7 | + @as(u8, ~@intFromBool(fields.x)) << 6 | + @as(u8, ~@intFromBool(fields.b)) << 5 | + @as(u8, @intFromEnum(fields.m)) << 0, ); try self.writer.writeByte( - @as(u8, @boolToInt(fields.w)) << 7 | + @as(u8, @intFromBool(fields.w)) << 7 | @as(u8, ~fields.v.enc()) << 3 | - @as(u8, @boolToInt(fields.l)) << 2 | - @as(u8, @enumToInt(fields.p)) << 0, + @as(u8, @intFromBool(fields.l)) << 2 | + @as(u8, @intFromEnum(fields.p)) << 0, ); } else { try self.writer.writeByte(0b1100_0101); try self.writer.writeByte( - @as(u8, ~@boolToInt(fields.r)) << 7 | + @as(u8, ~@intFromBool(fields.r)) << 7 | @as(u8, ~fields.v.enc()) << 3 | - @as(u8, @boolToInt(fields.l)) << 2 | - @as(u8, @enumToInt(fields.p)) << 0, + @as(u8, @intFromBool(fields.l)) << 2 | + @as(u8, @intFromEnum(fields.p)) << 0, ); } } diff --git a/src/clang.zig b/src/clang.zig index f368bb0c3c..d6a655a704 100644 --- a/src/clang.zig +++ b/src/clang.zig @@ -1448,7 +1448,7 @@ pub const CK = enum(c_int) { IntegralToBoolean, IntegralToFloating, FloatingToFixedPoint, - FixedPointToFloating, + FixedPofloatFromInting, FixedPointCast, FixedPointToIntegral, IntegralToFixedPoint, diff --git a/src/codegen.zig b/src/codegen.zig index 430562fe9b..3bd7dca2c6 100644 --- a/src/codegen.zig +++ b/src/codegen.zig @@ -381,7 +381,7 @@ pub fn generateSymbol( .fail => |em| return Result{ .fail = em }, } } - try code.writer().writeByte(@boolToInt(payload_val != null)); + try code.writer().writeByte(@intFromBool(payload_val != null)); try code.writer().writeByteNTimes(0, padding); } }, @@ -391,7 +391,7 @@ pub fn generateSymbol( .elems, .repeated_elem => { var index: u64 = 0; var len_including_sentinel = - array_type.len + @boolToInt(array_type.sentinel != .none); + array_type.len + @intFromBool(array_type.sentinel != .none); while (index < len_including_sentinel) : (index += 1) { switch (try generateSymbol(bin_file, src_loc, .{ .ty = array_type.child.toType(), @@ -952,7 +952,7 @@ pub fn genTypedValue( } }, .Bool => { - return GenResult.mcv(.{ .immediate = @boolToInt(typed_value.val.toBool()) }); + return GenResult.mcv(.{ .immediate = @intFromBool(typed_value.val.toBool()) }); }, .Optional => { if (typed_value.ty.isPtrLikeOptional(mod)) { @@ -961,7 +961,7 @@ pub fn genTypedValue( .val = typed_value.val.optionalValue(mod) orelse return GenResult.mcv(.{ .immediate = 0 }), }, owner_decl_index); } else if (typed_value.ty.abiSize(mod) == 1) { - return GenResult.mcv(.{ .immediate = @boolToInt(!typed_value.val.isNull(mod)) }); + return GenResult.mcv(.{ .immediate = @intFromBool(!typed_value.val.isNull(mod)) }); } }, .Enum => { diff --git a/src/codegen/c.zig b/src/codegen/c.zig index a5110a34b0..498eca4ce2 100644 --- a/src/codegen/c.zig +++ b/src/codegen/c.zig @@ -462,7 +462,7 @@ pub const Function = struct { => |owner_decl| try std.fmt.allocPrint(arena, "zig_{s}_{}__{d}", .{ @tagName(key), fmtIdent(mod.intern_pool.stringToSlice(mod.declPtr(owner_decl).name)), - @enumToInt(owner_decl), + @intFromEnum(owner_decl), }), }, .data = switch (key) { @@ -1865,7 +1865,7 @@ pub const DeclGen = struct { }; try writer.print("{}__{d}", .{ fmtIdent(name_stream.getWritten()), - @enumToInt(decl_index), + @intFromEnum(decl_index), }); } } @@ -1991,7 +1991,7 @@ fn renderTypeName( @tagName(tag)["fwd_".len..], attributes, fmtIdent(mod.intern_pool.stringToSlice(mod.declPtr(owner_decl).name)), - @enumToInt(owner_decl), + @intFromEnum(owner_decl), }); }, } @@ -2100,7 +2100,7 @@ fn renderTypePrefix( .fwd_anon_struct, .fwd_anon_union, => if (decl.unwrap()) |decl_index| - try w.print("anon__{d}_{d}", .{ @enumToInt(decl_index), idx }) + try w.print("anon__{d}_{d}", .{ @intFromEnum(decl_index), idx }) else try renderTypeName(mod, w, idx, cty, ""), @@ -2514,7 +2514,7 @@ pub fn genLazyFn(o: *Object, lazy_fn: LazyFnMap.Entry) !void { const name = mod.intern_pool.stringToSlice(name_ip); const tag_val = try mod.enumValueFieldIndex(enum_ty, index); - const int_val = try tag_val.enumToInt(enum_ty, mod); + const int_val = try tag_val.intFromEnum(enum_ty, mod); const name_ty = try mod.arrayType(.{ .len = name.len, @@ -4701,7 +4701,7 @@ fn airSwitchBr(f: *Function, inst: Air.Inst.Index) !CValue { // On the final iteration we do not need to fix any state. This is because, like in the `else` // branch of a `cond_br`, our parent has to do it for this entire body anyway. - const last_case_i = switch_br.data.cases_len - @boolToInt(switch_br.data.else_body_len == 0); + const last_case_i = switch_br.data.cases_len - @intFromBool(switch_br.data.else_body_len == 0); var extra_index: usize = switch_br.end; for (0..switch_br.data.cases_len) |case_i| { @@ -6894,7 +6894,7 @@ fn airUnionInit(f: *Function, inst: Air.Inst.Index) !CValue { const tag_val = try mod.enumValueFieldIndex(tag_ty, field_index); - const int_val = try tag_val.enumToInt(tag_ty, mod); + const int_val = try tag_val.intFromEnum(tag_ty, mod); const a = try Assignment.start(f, writer, tag_ty); try f.writeCValueMember(writer, local, .{ .identifier = "tag" }); @@ -6924,7 +6924,7 @@ fn airPrefetch(f: *Function, inst: Air.Inst.Index) !CValue { .data => { try writer.writeAll("zig_prefetch("); try f.writeCValue(writer, ptr, .FunctionArgument); - try writer.print(", {d}, {d});\n", .{ @enumToInt(prefetch.rw), prefetch.locality }); + try writer.print(", {d}, {d});\n", .{ @intFromEnum(prefetch.rw), prefetch.locality }); }, // The available prefetch intrinsics do not accept a cache argument; only // address, rw, and locality. diff --git a/src/codegen/c/type.zig b/src/codegen/c/type.zig index 81ca1dd80d..86324c9a7c 100644 --- a/src/codegen/c/type.zig +++ b/src/codegen/c/type.zig @@ -129,15 +129,15 @@ pub const CType = extern union { varargs_function, pub const last_no_payload_tag = Tag.zig_c_longdouble; - pub const no_payload_count = @enumToInt(last_no_payload_tag) + 1; + pub const no_payload_count = @intFromEnum(last_no_payload_tag) + 1; pub fn hasPayload(self: Tag) bool { - return @enumToInt(self) >= no_payload_count; + return @intFromEnum(self) >= no_payload_count; } pub fn toIndex(self: Tag) Index { assert(!self.hasPayload()); - return @intCast(Index, @enumToInt(self)); + return @intCast(Index, @intFromEnum(self)); } pub fn Type(comptime self: Tag) type { @@ -334,7 +334,7 @@ pub const CType = extern union { map: Map = .{}, pub fn indexToCType(self: Set, index: Index) CType { - if (index < Tag.no_payload_count) return initTag(@intToEnum(Tag, index)); + if (index < Tag.no_payload_count) return initTag(@enumFromInt(Tag, index)); return self.map.keys()[index - Tag.no_payload_count]; } @@ -370,7 +370,7 @@ pub const CType = extern union { pub fn cTypeToIndex(self: *Promoted, cty: CType) Allocator.Error!Index { const t = cty.tag(); - if (@enumToInt(t) < Tag.no_payload_count) return @intCast(Index, @enumToInt(t)); + if (@intFromEnum(t) < Tag.no_payload_count) return @intCast(Index, @intFromEnum(t)); const gop = try self.set.map.getOrPutContext(self.gpa(), cty, .{ .store = &self.set }); if (!gop.found_existing) gop.key_ptr.* = cty; diff --git a/src/codegen/llvm.zig b/src/codegen/llvm.zig index 1868298edb..1f390edc02 100644 --- a/src/codegen/llvm.zig +++ b/src/codegen/llvm.zig @@ -949,7 +949,7 @@ pub const Object = struct { mod.comp.bin_file.options.error_return_tracing; const err_ret_trace = if (err_return_tracing) - llvm_func.getParam(@boolToInt(ret_ptr != null)) + llvm_func.getParam(@intFromBool(ret_ptr != null)) else null; @@ -960,7 +960,7 @@ pub const Object = struct { defer args.deinit(); { - var llvm_arg_i = @as(c_uint, @boolToInt(ret_ptr != null)) + @boolToInt(err_return_tracing); + var llvm_arg_i = @as(c_uint, @intFromBool(ret_ptr != null)) + @intFromBool(err_return_tracing); var it = iterateParamTypes(&dg, fn_info); while (it.next()) |lowering| switch (lowering) { .no_bits => continue, @@ -2570,7 +2570,7 @@ pub const DeclGen = struct { mod.comp.bin_file.options.error_return_tracing; if (err_return_tracing) { - dg.addArgAttr(llvm_fn, @boolToInt(sret), "nonnull"); + dg.addArgAttr(llvm_fn, @intFromBool(sret), "nonnull"); } switch (fn_info.cc) { @@ -2604,8 +2604,8 @@ pub const DeclGen = struct { // because functions with bodies are handled in `updateFunc`. if (is_extern) { var it = iterateParamTypes(dg, fn_info); - it.llvm_index += @boolToInt(sret); - it.llvm_index += @boolToInt(err_return_tracing); + it.llvm_index += @intFromBool(sret); + it.llvm_index += @intFromBool(err_return_tracing); while (it.next()) |lowering| switch (lowering) { .byval => { const param_index = it.zig_index - 1; @@ -2812,7 +2812,7 @@ pub const DeclGen = struct { const elem_ty = t.childType(mod); if (std.debug.runtime_safety) assert((try elem_ty.onePossibleValue(mod)) == null); const elem_llvm_ty = try dg.lowerType(elem_ty); - const total_len = t.arrayLen(mod) + @boolToInt(t.sentinel(mod) != null); + const total_len = t.arrayLen(mod) + @intFromBool(t.sentinel(mod) != null); return elem_llvm_ty.arrayType(@intCast(c_uint, total_len)); }, .Vector => { @@ -3307,7 +3307,7 @@ pub const DeclGen = struct { } }, .enum_tag => { - const int_val = try tv.enumToInt(mod); + const int_val = try tv.intFromEnum(mod); var bigint_space: Value.BigIntSpace = undefined; const bigint = int_val.toBigInt(&bigint_space, mod); @@ -3476,7 +3476,7 @@ pub const DeclGen = struct { const elem_ty = tv.ty.childType(mod); const sentinel = tv.ty.sentinel(mod); const len = @intCast(usize, tv.ty.arrayLen(mod)); - const len_including_sent = len + @boolToInt(sentinel != null); + const len_including_sent = len + @intFromBool(sentinel != null); const gpa = dg.gpa; const llvm_elems = try gpa.alloc(*llvm.Value, len_including_sent); defer gpa.free(llvm_elems); @@ -3923,7 +3923,7 @@ pub const DeclGen = struct { const llvm_pl_index = if (layout.tag_size == 0) 0 else - @boolToInt(layout.tag_align >= layout.payload_align); + @intFromBool(layout.tag_align >= layout.payload_align); const indices: [2]*llvm.Value = .{ llvm_u32.constInt(0, .False), llvm_u32.constInt(llvm_pl_index, .False), @@ -3959,7 +3959,7 @@ pub const DeclGen = struct { }; return parent_llvm_ty.constInBoundsGEP(parent_llvm_ptr, &indices, indices.len); } else { - const llvm_index = llvm_u32.constInt(@boolToInt(parent_ty.hasRuntimeBitsIgnoreComptime(mod)), .False); + const llvm_index = llvm_u32.constInt(@intFromBool(parent_ty.hasRuntimeBitsIgnoreComptime(mod)), .False); const indices: [1]*llvm.Value = .{llvm_index}; return parent_llvm_ty.constInBoundsGEP(parent_llvm_ptr, &indices, indices.len); } @@ -4762,8 +4762,8 @@ pub const FuncGen = struct { if (callee_ty.zigTypeTag(mod) == .Pointer) { // Add argument attributes for function pointer calls. it = iterateParamTypes(self.dg, fn_info); - it.llvm_index += @boolToInt(sret); - it.llvm_index += @boolToInt(err_return_tracing); + it.llvm_index += @intFromBool(sret); + it.llvm_index += @intFromBool(err_return_tracing); while (it.next()) |lowering| switch (lowering) { .byval => { const param_index = it.zig_index - 1; @@ -5857,7 +5857,7 @@ pub const FuncGen = struct { .Union => { const union_llvm_ty = try self.dg.lowerType(struct_ty); const layout = struct_ty.unionGetLayout(mod); - const payload_index = @boolToInt(layout.tag_align >= layout.payload_align); + const payload_index = @intFromBool(layout.tag_align >= layout.payload_align); const field_ptr = self.builder.buildStructGEP(union_llvm_ty, struct_llvm_val, payload_index, ""); const llvm_field_ty = try self.dg.lowerType(field_ty); if (isByRef(field_ty, mod)) { @@ -8444,7 +8444,7 @@ pub const FuncGen = struct { return null; } const un_llvm_ty = try self.dg.lowerType(un_ty); - const tag_index = @boolToInt(layout.tag_align < layout.payload_align); + const tag_index = @intFromBool(layout.tag_align < layout.payload_align); const tag_field_ptr = self.builder.buildStructGEP(un_llvm_ty, union_ptr, tag_index, ""); // TODO alignment on this store _ = self.builder.buildStore(new_tag, tag_field_ptr); @@ -8463,14 +8463,14 @@ pub const FuncGen = struct { if (layout.payload_size == 0) { return self.builder.buildLoad(llvm_un_ty, union_handle, ""); } - const tag_index = @boolToInt(layout.tag_align < layout.payload_align); + const tag_index = @intFromBool(layout.tag_align < layout.payload_align); const tag_field_ptr = self.builder.buildStructGEP(llvm_un_ty, union_handle, tag_index, ""); return self.builder.buildLoad(llvm_un_ty.structGetTypeAtIndex(tag_index), tag_field_ptr, ""); } else { if (layout.payload_size == 0) { return union_handle; } - const tag_index = @boolToInt(layout.tag_align < layout.payload_align); + const tag_index = @intFromBool(layout.tag_align < layout.payload_align); return self.builder.buildExtractValue(union_handle, tag_index, ""); } } @@ -9206,7 +9206,7 @@ pub const FuncGen = struct { const union_field_name = union_obj.fields.keys()[extra.field_index]; const enum_field_index = tag_ty.enumFieldIndex(union_field_name, mod).?; const tag_val = try mod.enumValueFieldIndex(tag_ty, enum_field_index); - const tag_int_val = try tag_val.enumToInt(tag_ty, mod); + const tag_int_val = try tag_val.intFromEnum(tag_ty, mod); break :blk tag_int_val.toUnsignedInt(mod); }; if (layout.payload_size == 0) { @@ -9288,7 +9288,7 @@ pub const FuncGen = struct { { const indices: [3]*llvm.Value = .{ index_type.constNull(), - index_type.constInt(@boolToInt(layout.tag_align >= layout.payload_align), .False), + index_type.constInt(@intFromBool(layout.tag_align >= layout.payload_align), .False), index_type.constNull(), }; const len: c_uint = if (field_size == layout.payload_size) 2 else 3; @@ -9298,7 +9298,7 @@ pub const FuncGen = struct { { const indices: [2]*llvm.Value = .{ index_type.constNull(), - index_type.constInt(@boolToInt(layout.tag_align < layout.payload_align), .False), + index_type.constInt(@intFromBool(layout.tag_align < layout.payload_align), .False), }; const field_ptr = self.builder.buildInBoundsGEP(llvm_union_ty, result_ptr, &indices, indices.len, ""); const tag_llvm_ty = try self.dg.lowerType(union_obj.tag_ty); @@ -9313,15 +9313,15 @@ pub const FuncGen = struct { fn airPrefetch(self: *FuncGen, inst: Air.Inst.Index) !?*llvm.Value { const prefetch = self.air.instructions.items(.data)[inst].prefetch; - comptime assert(@enumToInt(std.builtin.PrefetchOptions.Rw.read) == 0); - comptime assert(@enumToInt(std.builtin.PrefetchOptions.Rw.write) == 1); + comptime assert(@intFromEnum(std.builtin.PrefetchOptions.Rw.read) == 0); + comptime assert(@intFromEnum(std.builtin.PrefetchOptions.Rw.write) == 1); // TODO these two asserts should be able to be comptime because the type is a u2 assert(prefetch.locality >= 0); assert(prefetch.locality <= 3); - comptime assert(@enumToInt(std.builtin.PrefetchOptions.Cache.instruction) == 0); - comptime assert(@enumToInt(std.builtin.PrefetchOptions.Cache.data) == 1); + comptime assert(@intFromEnum(std.builtin.PrefetchOptions.Cache.instruction) == 0); + comptime assert(@intFromEnum(std.builtin.PrefetchOptions.Cache.data) == 1); // LLVM fails during codegen of instruction cache prefetchs for these architectures. // This is an LLVM bug as the prefetch intrinsic should be a noop if not supported @@ -9368,9 +9368,9 @@ pub const FuncGen = struct { const params = [_]*llvm.Value{ ptr, - llvm_u32.constInt(@enumToInt(prefetch.rw), .False), + llvm_u32.constInt(@intFromEnum(prefetch.rw), .False), llvm_u32.constInt(prefetch.locality, .False), - llvm_u32.constInt(@enumToInt(prefetch.cache), .False), + llvm_u32.constInt(@intFromEnum(prefetch.cache), .False), }; _ = self.builder.buildCall(fn_val.globalGetValueType(), fn_val, ¶ms, params.len, .C, .Auto, ""); return null; @@ -9596,7 +9596,7 @@ pub const FuncGen = struct { // the index to the element at index `1` to get a pointer to the end of // the struct. const llvm_u32 = self.context.intType(32); - const llvm_index = llvm_u32.constInt(@boolToInt(struct_ty.hasRuntimeBitsIgnoreComptime(mod)), .False); + const llvm_index = llvm_u32.constInt(@intFromBool(struct_ty.hasRuntimeBitsIgnoreComptime(mod)), .False); const indices: [1]*llvm.Value = .{llvm_index}; return self.builder.buildInBoundsGEP(struct_llvm_ty, struct_ptr, &indices, indices.len, ""); } @@ -9605,7 +9605,7 @@ pub const FuncGen = struct { .Union => { const layout = struct_ty.unionGetLayout(mod); if (layout.payload_size == 0 or struct_ty.containerLayout(mod) == .Packed) return struct_ptr; - const payload_index = @boolToInt(layout.tag_align >= layout.payload_align); + const payload_index = @intFromBool(layout.tag_align >= layout.payload_align); const union_llvm_ty = try self.dg.lowerType(struct_ty); const union_field_ptr = self.builder.buildStructGEP(union_llvm_ty, struct_ptr, payload_index, ""); return union_field_ptr; @@ -9658,7 +9658,7 @@ pub const FuncGen = struct { assert(info.vector_index != .runtime); if (info.vector_index != .none) { - const index_u32 = self.context.intType(32).constInt(@enumToInt(info.vector_index), .False); + const index_u32 = self.context.intType(32).constInt(@intFromEnum(info.vector_index), .False); const vec_elem_ty = try self.dg.lowerType(info.pointee_type); const vec_ty = vec_elem_ty.vectorType(info.host_size); @@ -9734,7 +9734,7 @@ pub const FuncGen = struct { assert(info.vector_index != .runtime); if (info.vector_index != .none) { - const index_u32 = self.context.intType(32).constInt(@enumToInt(info.vector_index), .False); + const index_u32 = self.context.intType(32).constInt(@intFromEnum(info.vector_index), .False); const vec_elem_ty = try self.dg.lowerType(elem_ty); const vec_ty = vec_elem_ty.vectorType(info.host_size); @@ -11025,29 +11025,29 @@ const AnnotatedDITypePtr = enum(usize) { _, fn initFwd(di_type: *llvm.DIType) AnnotatedDITypePtr { - const addr = @ptrToInt(di_type); + const addr = @intFromPtr(di_type); assert(@truncate(u1, addr) == 0); - return @intToEnum(AnnotatedDITypePtr, addr | 1); + return @enumFromInt(AnnotatedDITypePtr, addr | 1); } fn initFull(di_type: *llvm.DIType) AnnotatedDITypePtr { - const addr = @ptrToInt(di_type); - return @intToEnum(AnnotatedDITypePtr, addr); + const addr = @intFromPtr(di_type); + return @enumFromInt(AnnotatedDITypePtr, addr); } fn init(di_type: *llvm.DIType, resolve: Object.DebugResolveStatus) AnnotatedDITypePtr { - const addr = @ptrToInt(di_type); - const bit = @boolToInt(resolve == .fwd); - return @intToEnum(AnnotatedDITypePtr, addr | bit); + const addr = @intFromPtr(di_type); + const bit = @intFromBool(resolve == .fwd); + return @enumFromInt(AnnotatedDITypePtr, addr | bit); } fn toDIType(self: AnnotatedDITypePtr) *llvm.DIType { - const fixed_addr = @enumToInt(self) & ~@as(usize, 1); - return @intToPtr(*llvm.DIType, fixed_addr); + const fixed_addr = @intFromEnum(self) & ~@as(usize, 1); + return @ptrFromInt(*llvm.DIType, fixed_addr); } fn isFwdOnly(self: AnnotatedDITypePtr) bool { - return @truncate(u1, @enumToInt(self)) != 0; + return @truncate(u1, @intFromEnum(self)) != 0; } }; @@ -11118,11 +11118,11 @@ fn buildAllocaInner( } fn errUnionPayloadOffset(payload_ty: Type, mod: *Module) u1 { - return @boolToInt(Type.anyerror.abiAlignment(mod) > payload_ty.abiAlignment(mod)); + return @intFromBool(Type.anyerror.abiAlignment(mod) > payload_ty.abiAlignment(mod)); } fn errUnionErrorOffset(payload_ty: Type, mod: *Module) u1 { - return @boolToInt(Type.anyerror.abiAlignment(mod) <= payload_ty.abiAlignment(mod)); + return @intFromBool(Type.anyerror.abiAlignment(mod) <= payload_ty.abiAlignment(mod)); } /// Returns true for asm constraint (e.g. "=*m", "=r") if it accepts a memory location diff --git a/src/codegen/llvm/bindings.zig b/src/codegen/llvm/bindings.zig index 0e5a2d0a7d..758cf5c721 100644 --- a/src/codegen/llvm/bindings.zig +++ b/src/codegen/llvm/bindings.zig @@ -8,7 +8,7 @@ pub const Bool = enum(c_int) { _, pub fn fromBool(b: bool) Bool { - return @intToEnum(Bool, @boolToInt(b)); + return @enumFromInt(Bool, @intFromBool(b)); } pub fn toBool(b: Bool) bool { diff --git a/src/codegen/spirv.zig b/src/codegen/spirv.zig index 2e614d90d1..46ef5609db 100644 --- a/src/codegen/spirv.zig +++ b/src/codegen/spirv.zig @@ -387,7 +387,7 @@ pub const DeclGen = struct { switch (repr) { .indirect => { const int_ty_ref = try self.intType(.unsigned, 1); - return self.spv.constInt(int_ty_ref, @boolToInt(value)); + return self.spv.constInt(int_ty_ref, @intFromBool(value)); }, .direct => { const bool_ty_ref = try self.resolveType(Type.bool, .direct); @@ -532,7 +532,7 @@ pub const DeclGen = struct { } fn addConstBool(self: *@This(), value: bool) !void { - try self.addByte(@boolToInt(value)); // TODO: Keep in sync with something? + try self.addByte(@intFromBool(value)); // TODO: Keep in sync with something? } fn addInt(self: *@This(), ty: Type, val: Value) !void { @@ -697,7 +697,7 @@ pub const DeclGen = struct { try self.addUndef(padding); }, .enum_tag => { - const int_val = try val.enumToInt(ty, mod); + const int_val = try val.intFromEnum(ty, mod); const int_ty = ty.intTagType(mod); @@ -873,7 +873,7 @@ pub const DeclGen = struct { assert(storage_class != .Generic and storage_class != .Function); const var_id = self.spv.allocId(); - log.debug("lowerIndirectConstant: id = {}, index = {}, ty = {}, val = {}", .{ var_id.id, @enumToInt(spv_decl_index), ty.fmt(self.module), val.fmtDebug() }); + log.debug("lowerIndirectConstant: id = {}, index = {}, ty = {}, val = {}", .{ var_id.id, @intFromEnum(spv_decl_index), ty.fmt(self.module), val.fmtDebug() }); const section = &self.spv.globals.section; @@ -1010,7 +1010,7 @@ pub const DeclGen = struct { false, alignment, ); - log.debug("indirect constant: index = {}", .{@enumToInt(spv_decl_index)}); + log.debug("indirect constant: index = {}", .{@intFromEnum(spv_decl_index)}); try self.func.decl_deps.put(self.spv.gpa, spv_decl_index, {}); try self.func.body.emit(self.spv.gpa, .OpLoad, .{ @@ -1578,7 +1578,7 @@ pub const DeclGen = struct { } } - fn boolToInt(self: *DeclGen, result_ty_ref: CacheRef, condition_id: IdRef) !IdRef { + fn intFromBool(self: *DeclGen, result_ty_ref: CacheRef, condition_id: IdRef) !IdRef { const zero_id = try self.spv.constInt(result_ty_ref, 0); const one_id = try self.spv.constInt(result_ty_ref, 1); const result_id = self.spv.allocId(); @@ -1621,7 +1621,7 @@ pub const DeclGen = struct { return switch (ty.zigTypeTag(mod)) { .Bool => blk: { const indirect_bool_ty_ref = try self.resolveType(ty, .indirect); - break :blk self.boolToInt(indirect_bool_ty_ref, operand_id); + break :blk self.intFromBool(indirect_bool_ty_ref, operand_id); }, else => operand_id, }; @@ -2011,7 +2011,7 @@ pub const DeclGen = struct { // Construct the struct that Zig wants as result. // The value should already be the correct type. - const ov_id = try self.boolToInt(ov_ty_ref, overflowed_id); + const ov_id = try self.intFromBool(ov_ty_ref, overflowed_id); const result_ty_ref = try self.resolveType(result_ty, .direct); return try self.constructStruct(result_ty_ref, &.{ value_id, @@ -2515,7 +2515,7 @@ pub const DeclGen = struct { if (layout.payload_size == 0) return union_handle; const tag_ty = un_ty.unionTagTypeSafety().?; - const tag_index = @boolToInt(layout.tag_align < layout.payload_align); + const tag_index = @intFromBool(layout.tag_align < layout.payload_align); return try self.extractField(tag_ty, union_handle, tag_index); } @@ -3105,7 +3105,7 @@ pub const DeclGen = struct { .Int => if (cond_ty.isSignedInt(mod)) @bitCast(u64, value.toSignedInt(mod)) else value.toUnsignedInt(mod), .Enum => blk: { // TODO: figure out of cond_ty is correct (something with enum literals) - break :blk (try value.enumToInt(cond_ty, mod)).toUnsignedInt(mod); // TODO: composite integer constants + break :blk (try value.intFromEnum(cond_ty, mod)).toUnsignedInt(mod); // TODO: composite integer constants }, else => unreachable, }; diff --git a/src/codegen/spirv/Assembler.zig b/src/codegen/spirv/Assembler.zig index c7848bbc92..73a842ebe9 100644 --- a/src/codegen/spirv/Assembler.zig +++ b/src/codegen/spirv/Assembler.zig @@ -306,7 +306,7 @@ fn processTypeInstruction(self: *Assembler) !AsmValue { }, .OpTypePointer => try self.spv.ptrType( try self.resolveTypeRef(operands[2].ref_id), - @intToEnum(spec.StorageClass, operands[1].value), + @enumFromInt(spec.StorageClass, operands[1].value), ), .OpTypeFunction => blk: { const param_operands = operands[2..]; @@ -340,7 +340,7 @@ fn processGenericInstruction(self: *Assembler) !?AsmValue { else => switch (self.inst.opcode) { .OpEntryPoint => unreachable, .OpExecutionMode, .OpExecutionModeId => &self.spv.sections.execution_modes, - .OpVariable => switch (@intToEnum(spec.StorageClass, operands[2].value)) { + .OpVariable => switch (@enumFromInt(spec.StorageClass, operands[2].value)) { .Function => &self.func.prologue, else => { // This is currently disabled because global variables are required to be @@ -391,7 +391,7 @@ fn processGenericInstruction(self: *Assembler) !?AsmValue { } const actual_word_count = section.instructions.items.len - first_word; - section.instructions.items[first_word] |= @as(u32, @intCast(u16, actual_word_count)) << 16 | @enumToInt(self.inst.opcode); + section.instructions.items[first_word] |= @as(u32, @intCast(u16, actual_word_count)) << 16 | @intFromEnum(self.inst.opcode); if (maybe_result_id) |result| { return AsmValue{ .value = result }; @@ -695,7 +695,7 @@ fn parseContextDependentInt(self: *Assembler, signedness: std.builtin.Signedness .unsigned => 0, .signed => -(@as(i128, 1) << (@intCast(u7, width) - 1)), }; - const max = (@as(i128, 1) << (@intCast(u7, width) - @boolToInt(signedness == .signed))) - 1; + const max = (@as(i128, 1) << (@intCast(u7, width) - @intFromBool(signedness == .signed))) - 1; if (int < min or int > max) { break :invalid; } diff --git a/src/codegen/spirv/Cache.zig b/src/codegen/spirv/Cache.zig index 4c41bf583b..7d7fc0fb0d 100644 --- a/src/codegen/spirv/Cache.zig +++ b/src/codegen/spirv/Cache.zig @@ -411,7 +411,7 @@ pub const Key = union(enum) { pub fn eql(ctx: @This(), a: Key, b_void: void, b_index: usize) bool { _ = b_void; - return ctx.self.lookup(@intToEnum(Ref, b_index)).eql(a); + return ctx.self.lookup(@enumFromInt(Ref, b_index)).eql(a); } pub fn hash(ctx: @This(), a: Key) u32 { @@ -445,7 +445,7 @@ pub fn materialize(self: *const Self, spv: *Module) !Section { var section = Section{}; errdefer section.deinit(spv.gpa); for (self.items.items(.result_id), 0..) |result_id, index| { - try self.emit(spv, result_id, @intToEnum(Ref, index), §ion); + try self.emit(spv, result_id, @enumFromInt(Ref, index), §ion); } return section; } @@ -603,14 +603,14 @@ pub fn resolve(self: *Self, spv: *Module, key: Key) !Ref { const adapter: Key.Adapter = .{ .self = self }; const entry = try self.map.getOrPutAdapted(spv.gpa, key, adapter); if (entry.found_existing) { - return @intToEnum(Ref, entry.index); + return @enumFromInt(Ref, entry.index); } const result_id = spv.allocId(); const item: Item = switch (key) { inline .void_type, .bool_type => .{ .tag = .type_simple, .result_id = result_id, - .data = @enumToInt(key.toSimpleType()), + .data = @intFromEnum(key.toSimpleType()), }, .int_type => |int| blk: { const t: Tag = switch (int.signedness) { @@ -654,17 +654,17 @@ pub fn resolve(self: *Self, spv: *Module, key: Key) !Ref { .Generic => Item{ .tag = .type_ptr_generic, .result_id = result_id, - .data = @enumToInt(ptr.child_type), + .data = @intFromEnum(ptr.child_type), }, .CrossWorkgroup => Item{ .tag = .type_ptr_crosswgp, .result_id = result_id, - .data = @enumToInt(ptr.child_type), + .data = @intFromEnum(ptr.child_type), }, .Function => Item{ .tag = .type_ptr_function, .result_id = result_id, - .data = @enumToInt(ptr.child_type), + .data = @intFromEnum(ptr.child_type), }, else => |storage_class| Item{ .tag = .type_ptr_simple, @@ -770,12 +770,12 @@ pub fn resolve(self: *Self, spv: *Module, key: Key) !Ref { .undef => |undef| .{ .tag = .undef, .result_id = result_id, - .data = @enumToInt(undef.ty), + .data = @intFromEnum(undef.ty), }, .null => |null_info| .{ .tag = .null, .result_id = result_id, - .data = @enumToInt(null_info.ty), + .data = @intFromEnum(null_info.ty), }, .bool => |bool_info| .{ .tag = switch (bool_info.value) { @@ -783,21 +783,21 @@ pub fn resolve(self: *Self, spv: *Module, key: Key) !Ref { false => Tag.bool_false, }, .result_id = result_id, - .data = @enumToInt(bool_info.ty), + .data = @intFromEnum(bool_info.ty), }, }; try self.items.append(spv.gpa, item); - return @intToEnum(Ref, entry.index); + return @enumFromInt(Ref, entry.index); } /// Turn a Ref back into a Key. /// The Key is valid until the next call to resolve(). pub fn lookup(self: *const Self, ref: Ref) Key { - const item = self.items.get(@enumToInt(ref)); + const item = self.items.get(@intFromEnum(ref)); const data = item.data; return switch (item.tag) { - .type_simple => switch (@intToEnum(Tag.SimpleType, data)) { + .type_simple => switch (@enumFromInt(Tag.SimpleType, data)) { .void => .void_type, .bool => .bool_type, }, @@ -826,19 +826,19 @@ pub fn lookup(self: *const Self, ref: Ref) Key { .type_ptr_generic => .{ .ptr_type = .{ .storage_class = .Generic, - .child_type = @intToEnum(Ref, data), + .child_type = @enumFromInt(Ref, data), }, }, .type_ptr_crosswgp => .{ .ptr_type = .{ .storage_class = .CrossWorkgroup, - .child_type = @intToEnum(Ref, data), + .child_type = @enumFromInt(Ref, data), }, }, .type_ptr_function => .{ .ptr_type = .{ .storage_class = .Function, - .child_type = @intToEnum(Ref, data), + .child_type = @enumFromInt(Ref, data), }, }, .type_ptr_simple => { @@ -923,17 +923,17 @@ pub fn lookup(self: *const Self, ref: Ref) Key { } }; }, .undef => .{ .undef = .{ - .ty = @intToEnum(Ref, data), + .ty = @enumFromInt(Ref, data), } }, .null => .{ .null = .{ - .ty = @intToEnum(Ref, data), + .ty = @enumFromInt(Ref, data), } }, .bool_true => .{ .bool = .{ - .ty = @intToEnum(Ref, data), + .ty = @enumFromInt(Ref, data), .value = true, } }, .bool_false => .{ .bool = .{ - .ty = @intToEnum(Ref, data), + .ty = @enumFromInt(Ref, data), .value = false, } }, }; @@ -942,14 +942,14 @@ pub fn lookup(self: *const Self, ref: Ref) Key { /// Look op the result-id that corresponds to a particular /// ref. pub fn resultId(self: Self, ref: Ref) IdResult { - return self.items.items(.result_id)[@enumToInt(ref)]; + return self.items.items(.result_id)[@intFromEnum(ref)]; } /// Get the ref for a key that has already been added to the cache. fn get(self: *const Self, key: Key) Ref { const adapter: Key.Adapter = .{ .self = self }; const index = self.map.getIndexAdapted(key, adapter).?; - return @intToEnum(Ref, index); + return @enumFromInt(Ref, index); } fn addExtra(self: *Self, spv: *Module, extra: anytype) !u32 { @@ -965,9 +965,9 @@ fn addExtraAssumeCapacity(self: *Self, extra: anytype) !u32 { const word = switch (field.type) { u32 => field_val, i32 => @bitCast(u32, field_val), - Ref => @enumToInt(field_val), - StorageClass => @enumToInt(field_val), - String => @enumToInt(field_val), + Ref => @intFromEnum(field_val), + StorageClass => @intFromEnum(field_val), + String => @intFromEnum(field_val), else => @compileError("Invalid type: " ++ @typeName(field.type)), }; self.extra.appendAssumeCapacity(word); @@ -987,9 +987,9 @@ fn extraDataTrail(self: Self, comptime T: type, offset: u32) struct { data: T, t @field(result, field.name) = switch (field.type) { u32 => word, i32 => @bitCast(i32, word), - Ref => @intToEnum(Ref, word), - StorageClass => @intToEnum(StorageClass, word), - String => @intToEnum(String, word), + Ref => @enumFromInt(Ref, word), + StorageClass => @enumFromInt(StorageClass, word), + String => @enumFromInt(String, word), else => @compileError("Invalid type: " ++ @typeName(field.type)), }; } @@ -1035,12 +1035,12 @@ pub fn addString(self: *Self, spv: *Module, str: []const u8) !String { entry.value_ptr.* = @intCast(u32, offset); } - return @intToEnum(String, entry.index); + return @enumFromInt(String, entry.index); } pub fn getString(self: *const Self, ref: String) ?[]const u8 { return switch (ref) { .none => null, - else => std.mem.sliceTo(self.string_bytes.items[self.strings.values()[@enumToInt(ref)]..], 0), + else => std.mem.sliceTo(self.string_bytes.items[self.strings.values()[@intFromEnum(ref)]..], 0), }; } diff --git a/src/codegen/spirv/Module.zig b/src/codegen/spirv/Module.zig index d53dcb4368..9d8cca9445 100644 --- a/src/codegen/spirv/Module.zig +++ b/src/codegen/spirv/Module.zig @@ -246,10 +246,10 @@ fn orderGlobalsInto( const global = self.globalPtr(decl_index).?; const insts = self.globals.section.instructions.items[global.begin_inst..global.end_inst]; - seen.set(@enumToInt(decl_index)); + seen.set(@intFromEnum(decl_index)); for (deps) |dep| { - if (!seen.isSet(@enumToInt(dep))) { + if (!seen.isSet(@intFromEnum(dep))) { try self.orderGlobalsInto(dep, section, seen); } } @@ -267,7 +267,7 @@ fn orderGlobals(self: *Module) !Section { errdefer ordered_globals.deinit(self.gpa); for (globals) |decl_index| { - if (!seen.isSet(@enumToInt(decl_index))) { + if (!seen.isSet(@intFromEnum(decl_index))) { try self.orderGlobalsInto(decl_index, &ordered_globals, &seen); } } @@ -284,14 +284,14 @@ fn addEntryPointDeps( const decl = self.declPtr(decl_index); const deps = self.decl_deps.items[decl.begin_dep..decl.end_dep]; - seen.set(@enumToInt(decl_index)); + seen.set(@intFromEnum(decl_index)); if (self.globalPtr(decl_index)) |global| { try interface.append(global.result_id); } for (deps) |dep| { - if (!seen.isSet(@enumToInt(dep))) { + if (!seen.isSet(@intFromEnum(dep))) { try self.addEntryPointDeps(dep, seen, interface); } } @@ -516,7 +516,7 @@ pub fn allocDecl(self: *Module, kind: DeclKind) !Decl.Index { .begin_dep = undefined, .end_dep = undefined, }); - const index = @intToEnum(Decl.Index, @intCast(u32, self.decls.items.len - 1)); + const index = @enumFromInt(Decl.Index, @intCast(u32, self.decls.items.len - 1)); switch (kind) { .func => {}, // If the decl represents a global, also allocate a global node. @@ -531,7 +531,7 @@ pub fn allocDecl(self: *Module, kind: DeclKind) !Decl.Index { } pub fn declPtr(self: *Module, index: Decl.Index) *Decl { - return &self.decls.items[@enumToInt(index)]; + return &self.decls.items[@intFromEnum(index)]; } pub fn globalPtr(self: *Module, index: Decl.Index) ?*Global { diff --git a/src/codegen/spirv/Section.zig b/src/codegen/spirv/Section.zig index b6087bbc3b..b35dc489e4 100644 --- a/src/codegen/spirv/Section.zig +++ b/src/codegen/spirv/Section.zig @@ -50,7 +50,7 @@ pub fn emitRaw( ) !void { const word_count = 1 + operand_words; try section.instructions.ensureUnusedCapacity(allocator, word_count); - section.writeWord((@intCast(Word, word_count << 16)) | @enumToInt(opcode)); + section.writeWord((@intCast(Word, word_count << 16)) | @intFromEnum(opcode)); } pub fn emit( @@ -61,7 +61,7 @@ pub fn emit( ) !void { const word_count = instructionSize(opcode, operands); try section.instructions.ensureUnusedCapacity(allocator, word_count); - section.writeWord(@intCast(Word, word_count << 16) | @enumToInt(opcode)); + section.writeWord(@intCast(Word, word_count << 16) | @intFromEnum(opcode)); section.writeOperands(opcode.Operands(), operands); } @@ -126,14 +126,14 @@ pub fn writeOperand(section: *Section, comptime Operand: type, operand: Operand) // TODO: Where this type is used (OpSpecConstantOp) is currently not correct in the spec json, // so it most likely needs to be altered into something that can actually describe the entire // instruction in which it is used. - spec.LiteralSpecConstantOpInteger => section.writeWord(@enumToInt(operand.opcode)), + spec.LiteralSpecConstantOpInteger => section.writeWord(@intFromEnum(operand.opcode)), spec.PairLiteralIntegerIdRef => section.writeWords(&.{ operand.value, operand.label.id }), spec.PairIdRefLiteralInteger => section.writeWords(&.{ operand.target.id, operand.member }), spec.PairIdRefIdRef => section.writeWords(&.{ operand[0].id, operand[1].id }), else => switch (@typeInfo(Operand)) { - .Enum => section.writeWord(@enumToInt(operand)), + .Enum => section.writeWord(@intFromEnum(operand)), .Optional => |info| if (operand) |child| { section.writeOperand(info.child, child); }, @@ -217,7 +217,7 @@ fn writeExtendedMask(section: *Section, comptime Operand: type, operand: Operand fn writeExtendedUnion(section: *Section, comptime Operand: type, operand: Operand) void { const tag = std.meta.activeTag(operand); - section.writeWord(@enumToInt(tag)); + section.writeWord(@intFromEnum(tag)); inline for (@typeInfo(Operand).Union.fields) |field| { if (@field(Operand, field.name) == tag) { @@ -327,7 +327,7 @@ test "SPIR-V Section emit() - no operands" { try section.emit(std.testing.allocator, .OpNop, {}); - try testing.expect(section.instructions.items[0] == (@as(Word, 1) << 16) | @enumToInt(Opcode.OpNop)); + try testing.expect(section.instructions.items[0] == (@as(Word, 1) << 16) | @intFromEnum(Opcode.OpNop)); } test "SPIR-V Section emit() - simple" { @@ -340,7 +340,7 @@ test "SPIR-V Section emit() - simple" { }); try testing.expectEqualSlices(Word, &.{ - (@as(Word, 3) << 16) | @enumToInt(Opcode.OpUndef), + (@as(Word, 3) << 16) | @intFromEnum(Opcode.OpUndef), 0, 1, }, section.instructions.items); @@ -358,8 +358,8 @@ test "SPIR-V Section emit() - string" { }); try testing.expectEqualSlices(Word, &.{ - (@as(Word, 10) << 16) | @enumToInt(Opcode.OpSource), - @enumToInt(spec.SourceLanguage.Unknown), + (@as(Word, 10) << 16) | @intFromEnum(Opcode.OpSource), + @intFromEnum(spec.SourceLanguage.Unknown), 123, 456, std.mem.bytesToValue(Word, "pub "), @@ -389,7 +389,7 @@ test "SPIR-V Section emit() - extended mask" { }); try testing.expectEqualSlices(Word, &.{ - (@as(Word, 5) << 16) | @enumToInt(Opcode.OpLoopMerge), + (@as(Word, 5) << 16) | @intFromEnum(Opcode.OpLoopMerge), 10, 20, @bitCast(Word, spec.LoopControl{ .Unroll = true, .DependencyLength = true }), @@ -409,9 +409,9 @@ test "SPIR-V Section emit() - extended union" { }); try testing.expectEqualSlices(Word, &.{ - (@as(Word, 6) << 16) | @enumToInt(Opcode.OpExecutionMode), + (@as(Word, 6) << 16) | @intFromEnum(Opcode.OpExecutionMode), 888, - @enumToInt(spec.ExecutionMode.LocalSize), + @intFromEnum(spec.ExecutionMode.LocalSize), 4, 8, 16, diff --git a/src/crash_report.zig b/src/crash_report.zig index 57b870c198..cb468c101f 100644 --- a/src/crash_report.zig +++ b/src/crash_report.zig @@ -186,11 +186,11 @@ fn handleSegfaultPosix(sig: i32, info: *const os.siginfo_t, ctx_ptr: ?*const any PanicSwitch.preDispatch(); const addr = switch (builtin.os.tag) { - .linux => @ptrToInt(info.fields.sigfault.addr), - .freebsd, .macos => @ptrToInt(info.addr), - .netbsd => @ptrToInt(info.info.reason.fault.addr), - .openbsd => @ptrToInt(info.data.fault.addr), - .solaris => @ptrToInt(info.reason.fault.addr), + .linux => @intFromPtr(info.fields.sigfault.addr), + .freebsd, .macos => @intFromPtr(info.addr), + .netbsd => @intFromPtr(info.info.reason.fault.addr), + .openbsd => @intFromPtr(info.data.fault.addr), + .solaris => @intFromPtr(info.reason.fault.addr), else => @compileError("TODO implement handleSegfaultPosix for new POSIX OS"), }; @@ -279,7 +279,7 @@ fn handleSegfaultWindowsExtra(info: *os.windows.EXCEPTION_POINTERS, comptime msg const regs = info.ContextRecord.getRegs(); break :ctx StackContext{ .exception = .{ .bp = regs.bp, .ip = regs.ip } }; } else ctx: { - const addr = @ptrToInt(info.ExceptionRecord.ExceptionAddress); + const addr = @intFromPtr(info.ExceptionRecord.ExceptionAddress); break :ctx StackContext{ .current = .{ .ret_addr = addr } }; }; diff --git a/src/libcxx.zig b/src/libcxx.zig index 07e3473338..07967ec694 100644 --- a/src/libcxx.zig +++ b/src/libcxx.zig @@ -128,10 +128,10 @@ pub fn buildLibCXX(comp: *Compilation, prog_node: *std.Progress.Node) !void { const cxx_include_path = try comp.zig_lib_directory.join(arena, &[_][]const u8{ "libcxx", "include" }); const cxx_src_include_path = try comp.zig_lib_directory.join(arena, &[_][]const u8{ "libcxx", "src" }); const abi_version_arg = try std.fmt.allocPrint(arena, "-D_LIBCPP_ABI_VERSION={d}", .{ - @enumToInt(comp.libcxx_abi_version), + @intFromEnum(comp.libcxx_abi_version), }); const abi_namespace_arg = try std.fmt.allocPrint(arena, "-D_LIBCPP_ABI_NAMESPACE=__{d}", .{ - @enumToInt(comp.libcxx_abi_version), + @intFromEnum(comp.libcxx_abi_version), }); var c_source_files = try std.ArrayList(Compilation.CSourceFile).initCapacity(arena, libcxx_files.len); @@ -302,10 +302,10 @@ pub fn buildLibCXXABI(comp: *Compilation, prog_node: *std.Progress.Node) !void { const cxx_include_path = try comp.zig_lib_directory.join(arena, &[_][]const u8{ "libcxx", "include" }); const cxx_src_include_path = try comp.zig_lib_directory.join(arena, &[_][]const u8{ "libcxx", "src" }); const abi_version_arg = try std.fmt.allocPrint(arena, "-D_LIBCPP_ABI_VERSION={d}", .{ - @enumToInt(comp.libcxx_abi_version), + @intFromEnum(comp.libcxx_abi_version), }); const abi_namespace_arg = try std.fmt.allocPrint(arena, "-D_LIBCPP_ABI_NAMESPACE=__{d}", .{ - @enumToInt(comp.libcxx_abi_version), + @intFromEnum(comp.libcxx_abi_version), }); var c_source_files = try std.ArrayList(Compilation.CSourceFile).initCapacity(arena, libcxxabi_files.len); diff --git a/src/link/Coff.zig b/src/link/Coff.zig index 202bb71e9b..e3fcc941eb 100644 --- a/src/link/Coff.zig +++ b/src/link/Coff.zig @@ -538,7 +538,7 @@ fn allocateAtom(self: *Coff, atom_index: Atom.Index, new_atom_size: u32, alignme defer tracy.end(); const atom = self.getAtom(atom_index); - const sect_id = @enumToInt(atom.getSymbol(self).section_number) - 1; + const sect_id = @intFromEnum(atom.getSymbol(self).section_number) - 1; const header = &self.sections.items(.header)[sect_id]; const free_list = &self.sections.items(.free_list)[sect_id]; const maybe_last_atom_index = &self.sections.items(.last_atom_index)[sect_id]; @@ -739,7 +739,7 @@ fn shrinkAtom(self: *Coff, atom_index: Atom.Index, new_block_size: u32) void { fn writeAtom(self: *Coff, atom_index: Atom.Index, code: []u8) !void { const atom = self.getAtom(atom_index); const sym = atom.getSymbol(self); - const section = self.sections.get(@enumToInt(sym.section_number) - 1); + const section = self.sections.get(@intFromEnum(sym.section_number) - 1); const file_offset = section.header.pointer_to_raw_data + sym.value - section.header.virtual_address; log.debug("writing atom for symbol {s} at file offset 0x{x} to 0x{x}", .{ @@ -769,14 +769,14 @@ fn writeAtom(self: *Coff, atom_index: Atom.Index, code: []u8) !void { if (is_hot_update_compatible) { if (self.base.child_pid) |handle| { - const slide = @ptrToInt(self.hot_state.loaded_base_address.?); + const slide = @intFromPtr(self.hot_state.loaded_base_address.?); const mem_code = try gpa.dupe(u8, code); defer gpa.free(mem_code); self.resolveRelocs(atom_index, relocs.items, mem_code, slide); const vaddr = sym.value + slide; - const pvaddr = @intToPtr(*anyopaque, vaddr); + const pvaddr = @ptrFromInt(*anyopaque, vaddr); log.debug("writing to memory at address {x}", .{vaddr}); @@ -860,9 +860,9 @@ fn writeOffsetTableEntry(self: *Coff, index: usize) !void { if (is_hot_update_compatible) { if (self.base.child_pid) |handle| { const gpa = self.base.allocator; - const slide = @ptrToInt(self.hot_state.loaded_base_address.?); + const slide = @intFromPtr(self.hot_state.loaded_base_address.?); const actual_vmaddr = vmaddr + slide; - const pvaddr = @intToPtr(*anyopaque, actual_vmaddr); + const pvaddr = @ptrFromInt(*anyopaque, actual_vmaddr); log.debug("writing GOT entry to memory at address {x}", .{actual_vmaddr}); if (build_options.enable_logging) { switch (self.ptr_width) { @@ -970,7 +970,7 @@ fn freeAtom(self: *Coff, atom_index: Atom.Index) void { const atom = self.getAtom(atom_index); const sym = atom.getSymbol(self); - const sect_id = @enumToInt(sym.section_number) - 1; + const sect_id = @intFromEnum(sym.section_number) - 1; const free_list = &self.sections.items(.free_list)[sect_id]; var already_have_free_list_node = false; { @@ -1107,7 +1107,7 @@ pub fn lowerUnnamedConst(self: *Coff, tv: TypedValue, decl_index: Module.Decl.In const atom = self.getAtom(atom_index); const sym = atom.getSymbolPtr(self); try self.setSymbolName(sym, sym_name); - sym.section_number = @intToEnum(coff.SectionNumber, self.rdata_section_index.? + 1); + sym.section_number = @enumFromInt(coff.SectionNumber, self.rdata_section_index.? + 1); } const res = try codegen.generateSymbol(&self.base, decl.srcLoc(mod), tv, &code_buffer, .none, .{ @@ -1244,7 +1244,7 @@ fn updateLazySymbolAtom( const code_len = @intCast(u32, code.len); const symbol = atom.getSymbolPtr(self); try self.setSymbolName(symbol, name); - symbol.section_number = @intToEnum(coff.SectionNumber, section_index + 1); + symbol.section_number = @enumFromInt(coff.SectionNumber, section_index + 1); symbol.type = .{ .complex_type = .NULL, .base_type = .NULL }; const vaddr = try self.allocateAtom(atom_index, code_len, required_alignment); @@ -1341,7 +1341,7 @@ fn updateDeclCode(self: *Coff, decl_index: Module.Decl.Index, code: []u8, comple if (atom.size != 0) { const sym = atom.getSymbolPtr(self); try self.setSymbolName(sym, decl_name); - sym.section_number = @intToEnum(coff.SectionNumber, sect_index + 1); + sym.section_number = @enumFromInt(coff.SectionNumber, sect_index + 1); sym.type = .{ .complex_type = complex_type, .base_type = .NULL }; const capacity = atom.capacity(self); @@ -1365,7 +1365,7 @@ fn updateDeclCode(self: *Coff, decl_index: Module.Decl.Index, code: []u8, comple } else { const sym = atom.getSymbolPtr(self); try self.setSymbolName(sym, decl_name); - sym.section_number = @intToEnum(coff.SectionNumber, sect_index + 1); + sym.section_number = @enumFromInt(coff.SectionNumber, sect_index + 1); sym.type = .{ .complex_type = complex_type, .base_type = .NULL }; const vaddr = try self.allocateAtom(atom_index, code_len, required_alignment); @@ -1502,7 +1502,7 @@ pub fn updateDeclExports( const sym = self.getSymbolPtr(sym_loc); try self.setSymbolName(sym, mod.intern_pool.stringToSlice(exp.opts.name)); sym.value = decl_sym.value; - sym.section_number = @intToEnum(coff.SectionNumber, self.text_section_index.? + 1); + sym.section_number = @enumFromInt(coff.SectionNumber, self.text_section_index.? + 1); sym.type = .{ .complex_type = .FUNCTION, .base_type = .NULL }; switch (exp.opts.linkage) { @@ -1668,7 +1668,7 @@ pub fn flushModule(self: *Coff, comp: *Compilation, prog_node: *std.Progress.Nod const atom = self.getAtom(atom_index); const sym = atom.getSymbol(self); - const section = self.sections.get(@enumToInt(sym.section_number) - 1).header; + const section = self.sections.get(@intFromEnum(sym.section_number) - 1).header; const file_offset = section.pointer_to_raw_data + sym.value - section.virtual_address; var code = std.ArrayList(u8).init(gpa); @@ -1878,7 +1878,7 @@ fn writeBaseRelocations(self: *Coff) !void { try self.base.file.?.pwriteAll(buffer.items, header.pointer_to_raw_data); - self.data_directories[@enumToInt(coff.DirectoryEntry.BASERELOC)] = .{ + self.data_directories[@intFromEnum(coff.DirectoryEntry.BASERELOC)] = .{ .virtual_address = header.virtual_address, .size = needed_size, }; @@ -2011,11 +2011,11 @@ fn writeImportTables(self: *Coff) !void { try self.base.file.?.pwriteAll(buffer.items, header.pointer_to_raw_data); - self.data_directories[@enumToInt(coff.DirectoryEntry.IMPORT)] = .{ + self.data_directories[@intFromEnum(coff.DirectoryEntry.IMPORT)] = .{ .virtual_address = header.virtual_address + iat_size, .size = dir_table_size, }; - self.data_directories[@enumToInt(coff.DirectoryEntry.IAT)] = .{ + self.data_directories[@intFromEnum(coff.DirectoryEntry.IAT)] = .{ .virtual_address = header.virtual_address, .size = iat_size, }; @@ -2469,7 +2469,7 @@ fn logSymtab(self: *Coff) void { .UNDEFINED => 0, // TODO .ABSOLUTE => unreachable, // TODO .DEBUG => unreachable, // TODO - else => @enumToInt(sym.section_number), + else => @intFromEnum(sym.section_number), }; log.debug(" %{d}: {?s} @{x} in {s}({d}), {s}", .{ sym_id, diff --git a/src/link/Dwarf.zig b/src/link/Dwarf.zig index 3cb1c213e9..c9b535e7fa 100644 --- a/src/link/Dwarf.zig +++ b/src/link/Dwarf.zig @@ -171,11 +171,11 @@ pub const DeclState = struct { switch (ty.zigTypeTag(mod)) { .NoReturn => unreachable, .Void => { - try dbg_info_buffer.append(@enumToInt(AbbrevKind.pad1)); + try dbg_info_buffer.append(@intFromEnum(AbbrevKind.pad1)); }, .Bool => { try dbg_info_buffer.ensureUnusedCapacity(12); - dbg_info_buffer.appendAssumeCapacity(@enumToInt(AbbrevKind.base_type)); + dbg_info_buffer.appendAssumeCapacity(@intFromEnum(AbbrevKind.base_type)); // DW.AT.encoding, DW.FORM.data1 dbg_info_buffer.appendAssumeCapacity(DW.ATE.boolean); // DW.AT.byte_size, DW.FORM.udata @@ -186,7 +186,7 @@ pub const DeclState = struct { .Int => { const info = ty.intInfo(mod); try dbg_info_buffer.ensureUnusedCapacity(12); - dbg_info_buffer.appendAssumeCapacity(@enumToInt(AbbrevKind.base_type)); + dbg_info_buffer.appendAssumeCapacity(@intFromEnum(AbbrevKind.base_type)); // DW.AT.encoding, DW.FORM.data1 dbg_info_buffer.appendAssumeCapacity(switch (info.signedness) { .signed => DW.ATE.signed, @@ -200,7 +200,7 @@ pub const DeclState = struct { .Optional => { if (ty.isPtrLikeOptional(mod)) { try dbg_info_buffer.ensureUnusedCapacity(12); - dbg_info_buffer.appendAssumeCapacity(@enumToInt(AbbrevKind.base_type)); + dbg_info_buffer.appendAssumeCapacity(@intFromEnum(AbbrevKind.base_type)); // DW.AT.encoding, DW.FORM.data1 dbg_info_buffer.appendAssumeCapacity(DW.ATE.address); // DW.AT.byte_size, DW.FORM.udata @@ -211,7 +211,7 @@ pub const DeclState = struct { // Non-pointer optionals are structs: struct { .maybe = *, .val = * } const payload_ty = ty.optionalChild(mod); // DW.AT.structure_type - try dbg_info_buffer.append(@enumToInt(AbbrevKind.struct_type)); + try dbg_info_buffer.append(@intFromEnum(AbbrevKind.struct_type)); // DW.AT.byte_size, DW.FORM.udata const abi_size = ty.abiSize(mod); try leb128.writeULEB128(dbg_info_buffer.writer(), abi_size); @@ -219,7 +219,7 @@ pub const DeclState = struct { try dbg_info_buffer.writer().print("{}\x00", .{ty.fmt(mod)}); // DW.AT.member try dbg_info_buffer.ensureUnusedCapacity(7); - dbg_info_buffer.appendAssumeCapacity(@enumToInt(AbbrevKind.struct_member)); + dbg_info_buffer.appendAssumeCapacity(@intFromEnum(AbbrevKind.struct_member)); // DW.AT.name, DW.FORM.string dbg_info_buffer.appendSliceAssumeCapacity("maybe"); dbg_info_buffer.appendAssumeCapacity(0); @@ -231,7 +231,7 @@ pub const DeclState = struct { try dbg_info_buffer.ensureUnusedCapacity(6); dbg_info_buffer.appendAssumeCapacity(0); // DW.AT.member - dbg_info_buffer.appendAssumeCapacity(@enumToInt(AbbrevKind.struct_member)); + dbg_info_buffer.appendAssumeCapacity(@intFromEnum(AbbrevKind.struct_member)); // DW.AT.name, DW.FORM.string dbg_info_buffer.appendSliceAssumeCapacity("val"); dbg_info_buffer.appendAssumeCapacity(0); @@ -253,14 +253,14 @@ pub const DeclState = struct { const ptr_bytes = @intCast(u8, @divExact(ptr_bits, 8)); // DW.AT.structure_type try dbg_info_buffer.ensureUnusedCapacity(2); - dbg_info_buffer.appendAssumeCapacity(@enumToInt(AbbrevKind.struct_type)); + dbg_info_buffer.appendAssumeCapacity(@intFromEnum(AbbrevKind.struct_type)); // DW.AT.byte_size, DW.FORM.udata try leb128.writeULEB128(dbg_info_buffer.writer(), ty.abiSize(mod)); // DW.AT.name, DW.FORM.string try dbg_info_buffer.writer().print("{}\x00", .{ty.fmt(mod)}); // DW.AT.member try dbg_info_buffer.ensureUnusedCapacity(5); - dbg_info_buffer.appendAssumeCapacity(@enumToInt(AbbrevKind.struct_member)); + dbg_info_buffer.appendAssumeCapacity(@intFromEnum(AbbrevKind.struct_member)); // DW.AT.name, DW.FORM.string dbg_info_buffer.appendSliceAssumeCapacity("ptr"); dbg_info_buffer.appendAssumeCapacity(0); @@ -273,7 +273,7 @@ pub const DeclState = struct { try dbg_info_buffer.ensureUnusedCapacity(6); dbg_info_buffer.appendAssumeCapacity(0); // DW.AT.member - dbg_info_buffer.appendAssumeCapacity(@enumToInt(AbbrevKind.struct_member)); + dbg_info_buffer.appendAssumeCapacity(@intFromEnum(AbbrevKind.struct_member)); // DW.AT.name, DW.FORM.string dbg_info_buffer.appendSliceAssumeCapacity("len"); dbg_info_buffer.appendAssumeCapacity(0); @@ -288,7 +288,7 @@ pub const DeclState = struct { dbg_info_buffer.appendAssumeCapacity(0); } else { try dbg_info_buffer.ensureUnusedCapacity(5); - dbg_info_buffer.appendAssumeCapacity(@enumToInt(AbbrevKind.ptr_type)); + dbg_info_buffer.appendAssumeCapacity(@intFromEnum(AbbrevKind.ptr_type)); // DW.AT.type, DW.FORM.ref4 const index = dbg_info_buffer.items.len; try dbg_info_buffer.resize(index + 4); @@ -297,7 +297,7 @@ pub const DeclState = struct { }, .Array => { // DW.AT.array_type - try dbg_info_buffer.append(@enumToInt(AbbrevKind.array_type)); + try dbg_info_buffer.append(@intFromEnum(AbbrevKind.array_type)); // DW.AT.name, DW.FORM.string try dbg_info_buffer.writer().print("{}\x00", .{ty.fmt(mod)}); // DW.AT.type, DW.FORM.ref4 @@ -305,7 +305,7 @@ pub const DeclState = struct { try dbg_info_buffer.resize(index + 4); try self.addTypeRelocGlobal(atom_index, ty.childType(mod), @intCast(u32, index)); // DW.AT.subrange_type - try dbg_info_buffer.append(@enumToInt(AbbrevKind.array_dim)); + try dbg_info_buffer.append(@intFromEnum(AbbrevKind.array_dim)); // DW.AT.type, DW.FORM.ref4 index = dbg_info_buffer.items.len; try dbg_info_buffer.resize(index + 4); @@ -318,7 +318,7 @@ pub const DeclState = struct { }, .Struct => blk: { // DW.AT.structure_type - try dbg_info_buffer.append(@enumToInt(AbbrevKind.struct_type)); + try dbg_info_buffer.append(@intFromEnum(AbbrevKind.struct_type)); // DW.AT.byte_size, DW.FORM.udata try leb128.writeULEB128(dbg_info_buffer.writer(), ty.abiSize(mod)); @@ -329,7 +329,7 @@ pub const DeclState = struct { for (fields.types, 0..) |field_ty, field_index| { // DW.AT.member - try dbg_info_buffer.append(@enumToInt(AbbrevKind.struct_member)); + try dbg_info_buffer.append(@intFromEnum(AbbrevKind.struct_member)); // DW.AT.name, DW.FORM.string try dbg_info_buffer.writer().print("{d}\x00", .{field_index}); // DW.AT.type, DW.FORM.ref4 @@ -363,7 +363,7 @@ pub const DeclState = struct { const field_name = mod.intern_pool.stringToSlice(field_name_ip); // DW.AT.member try dbg_info_buffer.ensureUnusedCapacity(field_name.len + 2); - dbg_info_buffer.appendAssumeCapacity(@enumToInt(AbbrevKind.struct_member)); + dbg_info_buffer.appendAssumeCapacity(@intFromEnum(AbbrevKind.struct_member)); // DW.AT.name, DW.FORM.string dbg_info_buffer.appendSliceAssumeCapacity(field_name); dbg_info_buffer.appendAssumeCapacity(0); @@ -384,7 +384,7 @@ pub const DeclState = struct { }, .Enum => { // DW.AT.enumeration_type - try dbg_info_buffer.append(@enumToInt(AbbrevKind.enum_type)); + try dbg_info_buffer.append(@intFromEnum(AbbrevKind.enum_type)); // DW.AT.byte_size, DW.FORM.udata try leb128.writeULEB128(dbg_info_buffer.writer(), ty.abiSize(mod)); // DW.AT.name, DW.FORM.string @@ -398,7 +398,7 @@ pub const DeclState = struct { const field_name = mod.intern_pool.stringToSlice(field_name_index); // DW.AT.enumerator try dbg_info_buffer.ensureUnusedCapacity(field_name.len + 2 + @sizeOf(u64)); - dbg_info_buffer.appendAssumeCapacity(@enumToInt(AbbrevKind.enum_variant)); + dbg_info_buffer.appendAssumeCapacity(@intFromEnum(AbbrevKind.enum_variant)); // DW.AT.name, DW.FORM.string dbg_info_buffer.appendSliceAssumeCapacity(field_name); dbg_info_buffer.appendAssumeCapacity(0); @@ -408,7 +408,7 @@ pub const DeclState = struct { const value = enum_type.values[field_i]; // TODO do not assume a 64bit enum value - could be bigger. // See https://github.com/ziglang/zig/issues/645 - const field_int_val = try value.toValue().enumToInt(ty, mod); + const field_int_val = try value.toValue().intFromEnum(ty, mod); break :value @bitCast(u64, field_int_val.toSignedInt(mod)); }; mem.writeInt(u64, dbg_info_buffer.addManyAsArrayAssumeCapacity(8), value, target_endian); @@ -430,7 +430,7 @@ pub const DeclState = struct { // for untagged unions. if (is_tagged) { // DW.AT.structure_type - try dbg_info_buffer.append(@enumToInt(AbbrevKind.struct_type)); + try dbg_info_buffer.append(@intFromEnum(AbbrevKind.struct_type)); // DW.AT.byte_size, DW.FORM.udata try leb128.writeULEB128(dbg_info_buffer.writer(), layout.abi_size); // DW.AT.name, DW.FORM.string @@ -440,7 +440,7 @@ pub const DeclState = struct { // DW.AT.member try dbg_info_buffer.ensureUnusedCapacity(9); - dbg_info_buffer.appendAssumeCapacity(@enumToInt(AbbrevKind.struct_member)); + dbg_info_buffer.appendAssumeCapacity(@intFromEnum(AbbrevKind.struct_member)); // DW.AT.name, DW.FORM.string dbg_info_buffer.appendSliceAssumeCapacity("payload"); dbg_info_buffer.appendAssumeCapacity(0); @@ -453,7 +453,7 @@ pub const DeclState = struct { } // DW.AT.union_type - try dbg_info_buffer.append(@enumToInt(AbbrevKind.union_type)); + try dbg_info_buffer.append(@intFromEnum(AbbrevKind.union_type)); // DW.AT.byte_size, DW.FORM.udata, try leb128.writeULEB128(dbg_info_buffer.writer(), layout.payload_size); // DW.AT.name, DW.FORM.string @@ -468,7 +468,7 @@ pub const DeclState = struct { const field = fields.get(field_name).?; if (!field.ty.hasRuntimeBits(mod)) continue; // DW.AT.member - try dbg_info_buffer.append(@enumToInt(AbbrevKind.struct_member)); + try dbg_info_buffer.append(@intFromEnum(AbbrevKind.struct_member)); // DW.AT.name, DW.FORM.string try dbg_info_buffer.appendSlice(mod.intern_pool.stringToSlice(field_name)); try dbg_info_buffer.append(0); @@ -485,7 +485,7 @@ pub const DeclState = struct { if (is_tagged) { // DW.AT.member try dbg_info_buffer.ensureUnusedCapacity(5); - dbg_info_buffer.appendAssumeCapacity(@enumToInt(AbbrevKind.struct_member)); + dbg_info_buffer.appendAssumeCapacity(@intFromEnum(AbbrevKind.struct_member)); // DW.AT.name, DW.FORM.string dbg_info_buffer.appendSliceAssumeCapacity("tag"); dbg_info_buffer.appendAssumeCapacity(0); @@ -519,7 +519,7 @@ pub const DeclState = struct { const error_off = if (error_align >= payload_align) 0 else payload_ty.abiSize(mod); // DW.AT.structure_type - try dbg_info_buffer.append(@enumToInt(AbbrevKind.struct_type)); + try dbg_info_buffer.append(@intFromEnum(AbbrevKind.struct_type)); // DW.AT.byte_size, DW.FORM.udata try leb128.writeULEB128(dbg_info_buffer.writer(), abi_size); // DW.AT.name, DW.FORM.string @@ -529,7 +529,7 @@ pub const DeclState = struct { if (!payload_ty.isNoReturn(mod)) { // DW.AT.member try dbg_info_buffer.ensureUnusedCapacity(7); - dbg_info_buffer.appendAssumeCapacity(@enumToInt(AbbrevKind.struct_member)); + dbg_info_buffer.appendAssumeCapacity(@intFromEnum(AbbrevKind.struct_member)); // DW.AT.name, DW.FORM.string dbg_info_buffer.appendSliceAssumeCapacity("value"); dbg_info_buffer.appendAssumeCapacity(0); @@ -544,7 +544,7 @@ pub const DeclState = struct { { // DW.AT.member try dbg_info_buffer.ensureUnusedCapacity(5); - dbg_info_buffer.appendAssumeCapacity(@enumToInt(AbbrevKind.struct_member)); + dbg_info_buffer.appendAssumeCapacity(@intFromEnum(AbbrevKind.struct_member)); // DW.AT.name, DW.FORM.string dbg_info_buffer.appendSliceAssumeCapacity("err"); dbg_info_buffer.appendAssumeCapacity(0); @@ -561,7 +561,7 @@ pub const DeclState = struct { }, else => { log.debug("TODO implement .debug_info for type '{}'", .{ty.fmt(self.mod)}); - try dbg_info_buffer.append(@enumToInt(AbbrevKind.pad1)); + try dbg_info_buffer.append(@intFromEnum(AbbrevKind.pad1)); }, } } @@ -595,7 +595,7 @@ pub const DeclState = struct { switch (loc) { .register => |reg| { try dbg_info.ensureUnusedCapacity(4); - dbg_info.appendAssumeCapacity(@enumToInt(AbbrevKind.parameter)); + dbg_info.appendAssumeCapacity(@intFromEnum(AbbrevKind.parameter)); // DW.AT.location, DW.FORM.exprloc var expr_len = std.io.countingWriter(std.io.null_writer); if (reg < 32) { @@ -614,7 +614,7 @@ pub const DeclState = struct { }, .stack => |info| { try dbg_info.ensureUnusedCapacity(9); - dbg_info.appendAssumeCapacity(@enumToInt(AbbrevKind.parameter)); + dbg_info.appendAssumeCapacity(@intFromEnum(AbbrevKind.parameter)); // DW.AT.location, DW.FORM.exprloc var expr_len = std.io.countingWriter(std.io.null_writer); if (info.fp_register < 32) { @@ -643,7 +643,7 @@ pub const DeclState = struct { // where each argument is encoded as // i:uleb128 dbg_info.appendSliceAssumeCapacity(&.{ - @enumToInt(AbbrevKind.parameter), + @intFromEnum(AbbrevKind.parameter), DW.OP.WASM_location, DW.OP.WASM_local, }); @@ -670,7 +670,7 @@ pub const DeclState = struct { const dbg_info = &self.dbg_info; const atom_index = self.di_atom_decls.get(owner_decl).?; const name_with_null = name.ptr[0 .. name.len + 1]; - try dbg_info.append(@enumToInt(AbbrevKind.variable)); + try dbg_info.append(@intFromEnum(AbbrevKind.variable)); const mod = self.mod; const target = mod.getTarget(); const endian = target.cpu.arch.endian(); @@ -679,7 +679,7 @@ pub const DeclState = struct { switch (loc) { .register => |reg| { try dbg_info.ensureUnusedCapacity(4); - dbg_info.appendAssumeCapacity(@enumToInt(AbbrevKind.parameter)); + dbg_info.appendAssumeCapacity(@intFromEnum(AbbrevKind.parameter)); // DW.AT.location, DW.FORM.exprloc var expr_len = std.io.countingWriter(std.io.null_writer); if (reg < 32) { @@ -699,7 +699,7 @@ pub const DeclState = struct { .stack => |info| { try dbg_info.ensureUnusedCapacity(9); - dbg_info.appendAssumeCapacity(@enumToInt(AbbrevKind.parameter)); + dbg_info.appendAssumeCapacity(@intFromEnum(AbbrevKind.parameter)); // DW.AT.location, DW.FORM.exprloc var expr_len = std.io.countingWriter(std.io.null_writer); if (info.fp_register < 32) { @@ -741,7 +741,7 @@ pub const DeclState = struct { const ptr_width = @intCast(u8, @divExact(target.ptrBitWidth(), 8)); try dbg_info.ensureUnusedCapacity(2 + ptr_width); dbg_info.appendSliceAssumeCapacity(&[2]u8{ // DW.AT.location, DW.FORM.exprloc - 1 + ptr_width + @boolToInt(is_ptr), + 1 + ptr_width + @intFromBool(is_ptr), DW.OP.addr, // literal address }); const offset = @intCast(u32, dbg_info.items.len); @@ -1015,9 +1015,9 @@ pub fn initDeclState(self: *Dwarf, mod: *Module, decl_index: Module.Decl.Index) const fn_ret_type = decl.ty.fnReturnType(mod); const fn_ret_has_bits = fn_ret_type.hasRuntimeBits(mod); if (fn_ret_has_bits) { - dbg_info_buffer.appendAssumeCapacity(@enumToInt(AbbrevKind.subprogram)); + dbg_info_buffer.appendAssumeCapacity(@intFromEnum(AbbrevKind.subprogram)); } else { - dbg_info_buffer.appendAssumeCapacity(@enumToInt(AbbrevKind.subprogram_retvoid)); + dbg_info_buffer.appendAssumeCapacity(@intFromEnum(AbbrevKind.subprogram_retvoid)); } // These get overwritten after generating the machine code. These values are // "relocations" and have to be in this fixed place so that functions can be @@ -1617,14 +1617,14 @@ pub fn writeDbgAbbrev(self: *Dwarf) !void { // These are LEB encoded but since the values are all less than 127 // we can simply append these bytes. const abbrev_buf = [_]u8{ - @enumToInt(AbbrevKind.compile_unit), DW.TAG.compile_unit, DW.CHILDREN.yes, // header - DW.AT.stmt_list, DW.FORM.sec_offset, DW.AT.low_pc, - DW.FORM.addr, DW.AT.high_pc, DW.FORM.addr, - DW.AT.name, DW.FORM.strp, DW.AT.comp_dir, - DW.FORM.strp, DW.AT.producer, DW.FORM.strp, - DW.AT.language, DW.FORM.data2, 0, + @intFromEnum(AbbrevKind.compile_unit), DW.TAG.compile_unit, DW.CHILDREN.yes, // header + DW.AT.stmt_list, DW.FORM.sec_offset, DW.AT.low_pc, + DW.FORM.addr, DW.AT.high_pc, DW.FORM.addr, + DW.AT.name, DW.FORM.strp, DW.AT.comp_dir, + DW.FORM.strp, DW.AT.producer, DW.FORM.strp, + DW.AT.language, DW.FORM.data2, 0, 0, // table sentinel - @enumToInt(AbbrevKind.subprogram), + @intFromEnum(AbbrevKind.subprogram), DW.TAG.subprogram, DW.CHILDREN.yes, // header DW.AT.low_pc, @@ -1635,15 +1635,15 @@ pub fn writeDbgAbbrev(self: *Dwarf) !void { DW.FORM.ref4, DW.AT.name, DW.FORM.string, - 0, 0, // table sentinel - @enumToInt(AbbrevKind.subprogram_retvoid), + 0, 0, // table sentinel + @intFromEnum(AbbrevKind.subprogram_retvoid), DW.TAG.subprogram, DW.CHILDREN.yes, // header DW.AT.low_pc, DW.FORM.addr, DW.AT.high_pc, DW.FORM.data4, DW.AT.name, DW.FORM.string, 0, 0, // table sentinel - @enumToInt(AbbrevKind.base_type), + @intFromEnum(AbbrevKind.base_type), DW.TAG.base_type, DW.CHILDREN.no, // header DW.AT.encoding, @@ -1654,14 +1654,14 @@ pub fn writeDbgAbbrev(self: *Dwarf) !void { DW.FORM.string, 0, 0, // table sentinel - @enumToInt(AbbrevKind.ptr_type), + @intFromEnum(AbbrevKind.ptr_type), DW.TAG.pointer_type, DW.CHILDREN.no, // header DW.AT.type, DW.FORM.ref4, 0, 0, // table sentinel - @enumToInt(AbbrevKind.struct_type), + @intFromEnum(AbbrevKind.struct_type), DW.TAG.structure_type, DW.CHILDREN.yes, // header DW.AT.byte_size, @@ -1670,7 +1670,7 @@ pub fn writeDbgAbbrev(self: *Dwarf) !void { DW.FORM.string, 0, 0, // table sentinel - @enumToInt(AbbrevKind.struct_member), + @intFromEnum(AbbrevKind.struct_member), DW.TAG.member, DW.CHILDREN.no, // header DW.AT.name, @@ -1681,7 +1681,7 @@ pub fn writeDbgAbbrev(self: *Dwarf) !void { DW.FORM.udata, 0, 0, // table sentinel - @enumToInt(AbbrevKind.enum_type), + @intFromEnum(AbbrevKind.enum_type), DW.TAG.enumeration_type, DW.CHILDREN.yes, // header DW.AT.byte_size, @@ -1690,7 +1690,7 @@ pub fn writeDbgAbbrev(self: *Dwarf) !void { DW.FORM.string, 0, 0, // table sentinel - @enumToInt(AbbrevKind.enum_variant), + @intFromEnum(AbbrevKind.enum_variant), DW.TAG.enumerator, DW.CHILDREN.no, // header DW.AT.name, @@ -1699,7 +1699,7 @@ pub fn writeDbgAbbrev(self: *Dwarf) !void { DW.FORM.data8, 0, 0, // table sentinel - @enumToInt(AbbrevKind.union_type), + @intFromEnum(AbbrevKind.union_type), DW.TAG.union_type, DW.CHILDREN.yes, // header DW.AT.byte_size, @@ -1708,32 +1708,32 @@ pub fn writeDbgAbbrev(self: *Dwarf) !void { DW.FORM.string, 0, 0, // table sentinel - @enumToInt(AbbrevKind.pad1), + @intFromEnum(AbbrevKind.pad1), DW.TAG.unspecified_type, DW.CHILDREN.no, // header 0, 0, // table sentinel - @enumToInt(AbbrevKind.parameter), + @intFromEnum(AbbrevKind.parameter), DW.TAG.formal_parameter, DW.CHILDREN.no, // header DW.AT.location, DW.FORM.exprloc, DW.AT.type, DW.FORM.ref4, DW.AT.name, DW.FORM.string, 0, 0, // table sentinel - @enumToInt(AbbrevKind.variable), + @intFromEnum(AbbrevKind.variable), DW.TAG.variable, DW.CHILDREN.no, // header DW.AT.location, DW.FORM.exprloc, DW.AT.type, DW.FORM.ref4, DW.AT.name, DW.FORM.string, 0, 0, // table sentinel - @enumToInt(AbbrevKind.array_type), + @intFromEnum(AbbrevKind.array_type), DW.TAG.array_type, DW.CHILDREN.yes, // header DW.AT.name, DW.FORM.string, DW.AT.type, DW.FORM.ref4, 0, 0, // table sentinel - @enumToInt(AbbrevKind.array_dim), + @intFromEnum(AbbrevKind.array_dim), DW.TAG.subrange_type, DW.CHILDREN.no, // header DW.AT.type, DW.FORM.ref4, DW.AT.count, DW.FORM.udata, @@ -1838,7 +1838,7 @@ pub fn writeDbgInfoHeader(self: *Dwarf, module: *Module, low_pc: u64, high_pc: u const comp_dir_strp = try self.strtab.insert(self.allocator, compile_unit_dir); const producer_strp = try self.strtab.insert(self.allocator, link.producer_string); - di_buf.appendAssumeCapacity(@enumToInt(AbbrevKind.compile_unit)); + di_buf.appendAssumeCapacity(@intFromEnum(AbbrevKind.compile_unit)); if (self.bin_file.tag == .macho) { mem.writeIntLittle(u32, di_buf.addManyAsArrayAssumeCapacity(4), 0); // DW.AT.stmt_list, DW.FORM.sec_offset mem.writeIntLittle(u64, di_buf.addManyAsArrayAssumeCapacity(8), low_pc); @@ -2038,7 +2038,7 @@ fn pwriteDbgInfoNops( const tracy = trace(@src()); defer tracy.end(); - const page_of_nops = [1]u8{@enumToInt(AbbrevKind.pad1)} ** 4096; + const page_of_nops = [1]u8{@intFromEnum(AbbrevKind.pad1)} ** 4096; var vecs: [32]std.os.iovec_const = undefined; var vec_index: usize = 0; { @@ -2110,9 +2110,9 @@ fn writeDbgInfoNopsToArrayList( buffer.items.len, offset + content.len + next_padding_size + 1, )); - @memset(buffer.items[offset - prev_padding_size .. offset], @enumToInt(AbbrevKind.pad1)); + @memset(buffer.items[offset - prev_padding_size .. offset], @intFromEnum(AbbrevKind.pad1)); @memcpy(buffer.items[offset..][0..content.len], content); - @memset(buffer.items[offset + content.len ..][0..next_padding_size], @enumToInt(AbbrevKind.pad1)); + @memset(buffer.items[offset + content.len ..][0..next_padding_size], @intFromEnum(AbbrevKind.pad1)); if (trailing_zero) { buffer.items[offset + content.len + next_padding_size] = 0; @@ -2653,7 +2653,7 @@ fn addDbgInfoErrorSet( const target_endian = target.cpu.arch.endian(); // DW.AT.enumeration_type - try dbg_info_buffer.append(@enumToInt(AbbrevKind.enum_type)); + try dbg_info_buffer.append(@intFromEnum(AbbrevKind.enum_type)); // DW.AT.byte_size, DW.FORM.udata const abi_size = Type.anyerror.abiSize(mod); try leb128.writeULEB128(dbg_info_buffer.writer(), abi_size); @@ -2664,7 +2664,7 @@ fn addDbgInfoErrorSet( // DW.AT.enumerator const no_error = "(no error)"; try dbg_info_buffer.ensureUnusedCapacity(no_error.len + 2 + @sizeOf(u64)); - dbg_info_buffer.appendAssumeCapacity(@enumToInt(AbbrevKind.enum_variant)); + dbg_info_buffer.appendAssumeCapacity(@intFromEnum(AbbrevKind.enum_variant)); // DW.AT.name, DW.FORM.string dbg_info_buffer.appendSliceAssumeCapacity(no_error); dbg_info_buffer.appendAssumeCapacity(0); @@ -2677,7 +2677,7 @@ fn addDbgInfoErrorSet( const error_name = mod.intern_pool.stringToSlice(error_name_ip); // DW.AT.enumerator try dbg_info_buffer.ensureUnusedCapacity(error_name.len + 2 + @sizeOf(u64)); - dbg_info_buffer.appendAssumeCapacity(@enumToInt(AbbrevKind.enum_variant)); + dbg_info_buffer.appendAssumeCapacity(@intFromEnum(AbbrevKind.enum_variant)); // DW.AT.name, DW.FORM.string dbg_info_buffer.appendSliceAssumeCapacity(error_name); dbg_info_buffer.appendAssumeCapacity(0); diff --git a/src/link/Elf.zig b/src/link/Elf.zig index a0d6333535..283bd9ccca 100644 --- a/src/link/Elf.zig +++ b/src/link/Elf.zig @@ -1826,7 +1826,7 @@ fn linkWithLLD(self: *Elf, comp: *Compilation, prog_node: *std.Progress.Node) !v for (system_libs, 0..) |link_lib, i| { const lib_as_needed = !system_libs_values[i].needed; - switch ((@as(u2, @boolToInt(lib_as_needed)) << 1) | @boolToInt(as_needed)) { + switch ((@as(u2, @intFromBool(lib_as_needed)) << 1) | @intFromBool(as_needed)) { 0b00, 0b11 => {}, 0b01 => { argv.appendAssumeCapacity("--no-as-needed"); @@ -2048,11 +2048,11 @@ fn writeElfHeader(self: *Elf) !void { .Dynamic => elf.ET.DYN, }, }; - mem.writeInt(u16, hdr_buf[index..][0..2], @enumToInt(elf_type), endian); + mem.writeInt(u16, hdr_buf[index..][0..2], @intFromEnum(elf_type), endian); index += 2; const machine = self.base.options.target.cpu.arch.toElfMachine(); - mem.writeInt(u16, hdr_buf[index..][0..2], @enumToInt(machine), endian); + mem.writeInt(u16, hdr_buf[index..][0..2], @intFromEnum(machine), endian); index += 2; // ELF Version, again @@ -2557,7 +2557,7 @@ fn updateDeclCode(self: *Elf, decl_index: Module.Decl.Index, code: []const u8, s .iov_len = code.len, }}; var remote_vec: [1]std.os.iovec_const = .{.{ - .iov_base = @intToPtr([*]u8, @intCast(usize, local_sym.st_value)), + .iov_base = @ptrFromInt([*]u8, @intCast(usize, local_sym.st_value)), .iov_len = code.len, }}; const rc = std.os.linux.process_vm_writev(pid, &code_vec, &remote_vec, 0); @@ -3051,7 +3051,7 @@ fn writeOffsetTableEntry(self: *Elf, index: @TypeOf(self.got_table).Index) !void .iov_len = buf.len, }}; var remote_vec: [1]std.os.iovec_const = .{.{ - .iov_base = @intToPtr([*]u8, @intCast(usize, vaddr)), + .iov_base = @ptrFromInt([*]u8, @intCast(usize, vaddr)), .iov_len = buf.len, }}; const rc = std.os.linux.process_vm_writev(pid, &local_vec, &remote_vec, 0); diff --git a/src/link/MachO/UnwindInfo.zig b/src/link/MachO/UnwindInfo.zig index 8d2a36be9d..3c9a438f92 100644 --- a/src/link/MachO/UnwindInfo.zig +++ b/src/link/MachO/UnwindInfo.zig @@ -760,14 +760,14 @@ pub const UnwindEncoding = struct { pub fn isDwarf(enc: macho.compact_unwind_encoding_t, cpu_arch: std.Target.Cpu.Arch) bool { const mode = getMode(enc); return switch (cpu_arch) { - .aarch64 => @intToEnum(macho.UNWIND_ARM64_MODE, mode) == .DWARF, - .x86_64 => @intToEnum(macho.UNWIND_X86_64_MODE, mode) == .DWARF, + .aarch64 => @enumFromInt(macho.UNWIND_ARM64_MODE, mode) == .DWARF, + .x86_64 => @enumFromInt(macho.UNWIND_X86_64_MODE, mode) == .DWARF, else => unreachable, }; } pub fn setMode(enc: *macho.compact_unwind_encoding_t, mode: anytype) void { - enc.* |= @intCast(u32, @enumToInt(mode)) << 24; + enc.* |= @intCast(u32, @intFromEnum(mode)) << 24; } pub fn hasLsda(enc: macho.compact_unwind_encoding_t) bool { @@ -776,7 +776,7 @@ pub const UnwindEncoding = struct { } pub fn setHasLsda(enc: *macho.compact_unwind_encoding_t, has_lsda: bool) void { - const mask = @intCast(u32, @boolToInt(has_lsda)) << 31; + const mask = @intCast(u32, @intFromBool(has_lsda)) << 31; enc.* |= mask; } diff --git a/src/link/MachO/ZldAtom.zig b/src/link/MachO/ZldAtom.zig index baa6340a13..1252379aa7 100644 --- a/src/link/MachO/ZldAtom.zig +++ b/src/link/MachO/ZldAtom.zig @@ -214,7 +214,7 @@ pub fn parseRelocTarget(zld: *Zld, ctx: struct { mem.readIntLittle(u32, ctx.code[rel_offset..][0..4]); } else blk: { assert(zld.options.target.cpu.arch == .x86_64); - const correction: u3 = switch (@intToEnum(macho.reloc_type_x86_64, ctx.rel.r_type)) { + const correction: u3 = switch (@enumFromInt(macho.reloc_type_x86_64, ctx.rel.r_type)) { .X86_64_RELOC_SIGNED => 0, .X86_64_RELOC_SIGNED_1 => 1, .X86_64_RELOC_SIGNED_2 => 2, @@ -272,7 +272,7 @@ pub fn getRelocTargetAtomIndex(zld: *Zld, target: SymbolWithLoc, is_via_got: boo fn scanAtomRelocsArm64(zld: *Zld, atom_index: AtomIndex, relocs: []align(1) const macho.relocation_info) !void { for (relocs) |rel| { - const rel_type = @intToEnum(macho.reloc_type_arm64, rel.r_type); + const rel_type = @enumFromInt(macho.reloc_type_arm64, rel.r_type); switch (rel_type) { .ARM64_RELOC_ADDEND, .ARM64_RELOC_SUBTRACTOR => continue, @@ -321,7 +321,7 @@ fn scanAtomRelocsArm64(zld: *Zld, atom_index: AtomIndex, relocs: []align(1) cons fn scanAtomRelocsX86(zld: *Zld, atom_index: AtomIndex, relocs: []align(1) const macho.relocation_info) !void { for (relocs) |rel| { - const rel_type = @intToEnum(macho.reloc_type_x86_64, rel.r_type); + const rel_type = @enumFromInt(macho.reloc_type_x86_64, rel.r_type); switch (rel_type) { .X86_64_RELOC_SUBTRACTOR => continue, @@ -495,7 +495,7 @@ fn resolveRelocsArm64( var subtractor: ?SymbolWithLoc = null; for (atom_relocs) |rel| { - const rel_type = @intToEnum(macho.reloc_type_arm64, rel.r_type); + const rel_type = @enumFromInt(macho.reloc_type_arm64, rel.r_type); switch (rel_type) { .ARM64_RELOC_ADDEND => { @@ -797,7 +797,7 @@ fn resolveRelocsX86( var subtractor: ?SymbolWithLoc = null; for (atom_relocs) |rel| { - const rel_type = @intToEnum(macho.reloc_type_x86_64, rel.r_type); + const rel_type = @enumFromInt(macho.reloc_type_x86_64, rel.r_type); switch (rel_type) { .X86_64_RELOC_SUBTRACTOR => { @@ -1004,14 +1004,14 @@ pub fn getAtomRelocs(zld: *Zld, atom_index: AtomIndex) []const macho.relocation_ pub fn relocRequiresGot(zld: *Zld, rel: macho.relocation_info) bool { switch (zld.options.target.cpu.arch) { - .aarch64 => switch (@intToEnum(macho.reloc_type_arm64, rel.r_type)) { + .aarch64 => switch (@enumFromInt(macho.reloc_type_arm64, rel.r_type)) { .ARM64_RELOC_GOT_LOAD_PAGE21, .ARM64_RELOC_GOT_LOAD_PAGEOFF12, .ARM64_RELOC_POINTER_TO_GOT, => return true, else => return false, }, - .x86_64 => switch (@intToEnum(macho.reloc_type_x86_64, rel.r_type)) { + .x86_64 => switch (@enumFromInt(macho.reloc_type_x86_64, rel.r_type)) { .X86_64_RELOC_GOT, .X86_64_RELOC_GOT_LOAD, => return true, diff --git a/src/link/MachO/dead_strip.zig b/src/link/MachO/dead_strip.zig index ca0d961e2d..b2c569447d 100644 --- a/src/link/MachO/dead_strip.zig +++ b/src/link/MachO/dead_strip.zig @@ -148,7 +148,7 @@ fn markLive(zld: *Zld, atom_index: AtomIndex, alive: *AtomTable) void { for (relocs) |rel| { const target = switch (cpu_arch) { - .aarch64 => switch (@intToEnum(macho.reloc_type_arm64, rel.r_type)) { + .aarch64 => switch (@enumFromInt(macho.reloc_type_arm64, rel.r_type)) { .ARM64_RELOC_ADDEND => continue, else => Atom.parseRelocTarget(zld, .{ .object_id = atom.getFile().?, @@ -208,7 +208,7 @@ fn refersLive(zld: *Zld, atom_index: AtomIndex, alive: AtomTable) bool { for (relocs) |rel| { const target = switch (cpu_arch) { - .aarch64 => switch (@intToEnum(macho.reloc_type_arm64, rel.r_type)) { + .aarch64 => switch (@enumFromInt(macho.reloc_type_arm64, rel.r_type)) { .ARM64_RELOC_ADDEND => continue, else => Atom.parseRelocTarget(zld, .{ .object_id = atom.getFile().?, diff --git a/src/link/MachO/eh_frame.zig b/src/link/MachO/eh_frame.zig index ea8d4128c2..1672e37229 100644 --- a/src/link/MachO/eh_frame.zig +++ b/src/link/MachO/eh_frame.zig @@ -291,7 +291,7 @@ pub fn EhFrameRecord(comptime is_mutable: bool) type { for (relocs) |rel| { switch (cpu_arch) { .aarch64 => { - const rel_type = @intToEnum(macho.reloc_type_arm64, rel.r_type); + const rel_type = @enumFromInt(macho.reloc_type_arm64, rel.r_type); switch (rel_type) { .ARM64_RELOC_SUBTRACTOR, .ARM64_RELOC_UNSIGNED, @@ -301,7 +301,7 @@ pub fn EhFrameRecord(comptime is_mutable: bool) type { } }, .x86_64 => { - const rel_type = @intToEnum(macho.reloc_type_x86_64, rel.r_type); + const rel_type = @enumFromInt(macho.reloc_type_x86_64, rel.r_type); switch (rel_type) { .X86_64_RELOC_GOT => {}, else => unreachable, @@ -342,7 +342,7 @@ pub fn EhFrameRecord(comptime is_mutable: bool) type { switch (cpu_arch) { .aarch64 => { - const rel_type = @intToEnum(macho.reloc_type_arm64, rel.r_type); + const rel_type = @enumFromInt(macho.reloc_type_arm64, rel.r_type); switch (rel_type) { .ARM64_RELOC_SUBTRACTOR => { // Address of the __eh_frame in the source object file @@ -363,7 +363,7 @@ pub fn EhFrameRecord(comptime is_mutable: bool) type { } }, .x86_64 => { - const rel_type = @intToEnum(macho.reloc_type_x86_64, rel.r_type); + const rel_type = @enumFromInt(macho.reloc_type_x86_64, rel.r_type); switch (rel_type) { .X86_64_RELOC_GOT => { const target_addr = try Atom.getRelocTargetAddress(zld, target, true, false); diff --git a/src/link/MachO/thunks.zig b/src/link/MachO/thunks.zig index 7895190005..f3289e544b 100644 --- a/src/link/MachO/thunks.zig +++ b/src/link/MachO/thunks.zig @@ -289,7 +289,7 @@ fn scanRelocs( } inline fn relocNeedsThunk(rel: macho.relocation_info) bool { - const rel_type = @intToEnum(macho.reloc_type_arm64, rel.r_type); + const rel_type = @enumFromInt(macho.reloc_type_arm64, rel.r_type); return rel_type == .ARM64_RELOC_BRANCH26; } diff --git a/src/link/MachO/zld.zig b/src/link/MachO/zld.zig index 7902d67d87..be283900f5 100644 --- a/src/link/MachO/zld.zig +++ b/src/link/MachO/zld.zig @@ -1819,12 +1819,12 @@ pub const Zld = struct { for (relocs) |rel| { switch (cpu_arch) { .aarch64 => { - const rel_type = @intToEnum(macho.reloc_type_arm64, rel.r_type); + const rel_type = @enumFromInt(macho.reloc_type_arm64, rel.r_type); if (rel_type != .ARM64_RELOC_UNSIGNED) continue; if (rel.r_length != 3) continue; }, .x86_64 => { - const rel_type = @intToEnum(macho.reloc_type_x86_64, rel.r_type); + const rel_type = @enumFromInt(macho.reloc_type_x86_64, rel.r_type); if (rel_type != .X86_64_RELOC_UNSIGNED) continue; if (rel.r_length != 3) continue; }, @@ -1958,12 +1958,12 @@ pub const Zld = struct { for (relocs) |rel| { switch (cpu_arch) { .aarch64 => { - const rel_type = @intToEnum(macho.reloc_type_arm64, rel.r_type); + const rel_type = @enumFromInt(macho.reloc_type_arm64, rel.r_type); if (rel_type != .ARM64_RELOC_UNSIGNED) continue; if (rel.r_length != 3) continue; }, .x86_64 => { - const rel_type = @intToEnum(macho.reloc_type_x86_64, rel.r_type); + const rel_type = @enumFromInt(macho.reloc_type_x86_64, rel.r_type); if (rel_type != .X86_64_RELOC_UNSIGNED) continue; if (rel.r_length != 3) continue; }, diff --git a/src/link/Plan9.zig b/src/link/Plan9.zig index 6433fb2762..b36e16452e 100644 --- a/src/link/Plan9.zig +++ b/src/link/Plan9.zig @@ -1192,7 +1192,7 @@ pub fn writeSym(self: *Plan9, w: anytype, sym: aout.Sym) !void { } else { try w.writeIntBig(u64, sym.value); } - try w.writeByte(@enumToInt(sym.type)); + try w.writeByte(@intFromEnum(sym.type)); try w.writeAll(sym.name); try w.writeByte(0); } diff --git a/src/link/Wasm.zig b/src/link/Wasm.zig index 2d2930be8c..1e94e886b9 100644 --- a/src/link/Wasm.zig +++ b/src/link/Wasm.zig @@ -196,7 +196,7 @@ pub const Segment = struct { }; pub fn isPassive(segment: Segment) bool { - return segment.flags & @enumToInt(Flag.WASM_DATA_SEGMENT_IS_PASSIVE) != 0; + return segment.flags & @intFromEnum(Flag.WASM_DATA_SEGMENT_IS_PASSIVE) != 0; } /// For a given segment, determines if it needs passive initialization @@ -1094,14 +1094,14 @@ fn validateFeatures( const value = @intCast(u16, object_index) << 1 | @as(u1, 1); switch (feature.prefix) { .used => { - used[@enumToInt(feature.tag)] = value; + used[@intFromEnum(feature.tag)] = value; }, .disallowed => { - disallowed[@enumToInt(feature.tag)] = value; + disallowed[@intFromEnum(feature.tag)] = value; }, .required => { - required[@enumToInt(feature.tag)] = value; - used[@enumToInt(feature.tag)] = value; + required[@intFromEnum(feature.tag)] = value; + used[@intFromEnum(feature.tag)] = value; }, } } @@ -1120,9 +1120,9 @@ fn validateFeatures( const is_enabled = @truncate(u1, used_set) != 0; if (infer) { allowed[used_index] = is_enabled; - emit_features_count.* += @boolToInt(is_enabled); + emit_features_count.* += @intFromBool(is_enabled); } else if (is_enabled and !allowed[used_index]) { - log.err("feature '{}' not allowed, but used by linked object", .{@intToEnum(types.Feature.Tag, used_index)}); + log.err("feature '{}' not allowed, but used by linked object", .{@enumFromInt(types.Feature.Tag, used_index)}); log.err(" defined in '{s}'", .{wasm.objects.items[used_set >> 1].name}); valid_feature_set = false; } @@ -1133,7 +1133,7 @@ fn validateFeatures( } if (wasm.base.options.shared_memory) { - const disallowed_feature = disallowed[@enumToInt(types.Feature.Tag.shared_mem)]; + const disallowed_feature = disallowed[@intFromEnum(types.Feature.Tag.shared_mem)]; if (@truncate(u1, disallowed_feature) != 0) { log.err( "shared-memory is disallowed by '{s}' because it wasn't compiled with 'atomics' and 'bulk-memory' features enabled", @@ -1143,7 +1143,7 @@ fn validateFeatures( } for ([_]types.Feature.Tag{ .atomics, .bulk_memory }) |feature| { - if (!allowed[@enumToInt(feature)]) { + if (!allowed[@intFromEnum(feature)]) { log.err("feature '{}' is not used but is required for shared-memory", .{feature}); } } @@ -1151,7 +1151,7 @@ fn validateFeatures( if (has_tls) { for ([_]types.Feature.Tag{ .atomics, .bulk_memory }) |feature| { - if (!allowed[@enumToInt(feature)]) { + if (!allowed[@intFromEnum(feature)]) { log.err("feature '{}' is not used but is required for thread-local storage", .{feature}); } } @@ -1162,7 +1162,7 @@ fn validateFeatures( for (object.features) |feature| { if (feature.prefix == .disallowed) continue; // already defined in 'disallowed' set. // from here a feature is always used - const disallowed_feature = disallowed[@enumToInt(feature.tag)]; + const disallowed_feature = disallowed[@intFromEnum(feature.tag)]; if (@truncate(u1, disallowed_feature) != 0) { log.err("feature '{}' is disallowed, but used by linked object", .{feature.tag}); log.err(" disallowed by '{s}'", .{wasm.objects.items[disallowed_feature >> 1].name}); @@ -1170,14 +1170,14 @@ fn validateFeatures( valid_feature_set = false; } - object_used_features[@enumToInt(feature.tag)] = true; + object_used_features[@intFromEnum(feature.tag)] = true; } // validate the linked object file has each required feature for (required, 0..) |required_feature, feature_index| { const is_required = @truncate(u1, required_feature) != 0; if (is_required and !object_used_features[feature_index]) { - log.err("feature '{}' is required but not used in linked object", .{@intToEnum(types.Feature.Tag, feature_index)}); + log.err("feature '{}' is required but not used in linked object", .{@enumFromInt(types.Feature.Tag, feature_index)}); log.err(" required by '{s}'", .{wasm.objects.items[required_feature >> 1].name}); log.err(" missing in '{s}'", .{object.name}); valid_feature_set = false; @@ -1324,7 +1324,7 @@ pub fn allocateSymbol(wasm: *Wasm) !u32 { try wasm.symbols.ensureUnusedCapacity(wasm.base.allocator, 1); var symbol: Symbol = .{ .name = undefined, // will be set after updateDecl - .flags = @enumToInt(Symbol.Flag.WASM_SYM_BINDING_LOCAL), + .flags = @intFromEnum(Symbol.Flag.WASM_SYM_BINDING_LOCAL), .tag = undefined, // will be set after updateDecl .index = undefined, // will be set after updateDecl .virtual_address = undefined, // will be set during atom allocation @@ -1560,7 +1560,7 @@ pub fn lowerUnnamedConst(wasm: *Wasm, tv: TypedValue, decl_index: Module.Decl.In atom.alignment = tv.ty.abiAlignment(mod); wasm.symbols.items[atom.sym_index] = .{ .name = try wasm.string_table.put(wasm.base.allocator, name), - .flags = @enumToInt(Symbol.Flag.WASM_SYM_BINDING_LOCAL), + .flags = @intFromEnum(Symbol.Flag.WASM_SYM_BINDING_LOCAL), .tag = .data, .index = undefined, .virtual_address = undefined, @@ -2028,7 +2028,7 @@ fn parseAtom(wasm: *Wasm, atom_index: Atom.Index, kind: Kind) !void { const index = @intCast(u32, wasm.segments.items.len); var flags: u32 = 0; if (wasm.base.options.shared_memory) { - flags |= @enumToInt(Segment.Flag.WASM_DATA_SEGMENT_IS_PASSIVE); + flags |= @intFromEnum(Segment.Flag.WASM_DATA_SEGMENT_IS_PASSIVE); } try wasm.segments.append(wasm.base.allocator, .{ .alignment = atom.alignment, @@ -2868,7 +2868,7 @@ pub fn getMatchingSegment(wasm: *Wasm, object_index: u16, relocatable_index: u32 result.value_ptr.* = index; var flags: u32 = 0; if (wasm.base.options.shared_memory) { - flags |= @enumToInt(Segment.Flag.WASM_DATA_SEGMENT_IS_PASSIVE); + flags |= @intFromEnum(Segment.Flag.WASM_DATA_SEGMENT_IS_PASSIVE); } try wasm.segments.append(wasm.base.allocator, .{ .alignment = 1, @@ -3073,7 +3073,7 @@ pub fn createDebugSectionForIndex(wasm: *Wasm, index: *?u32, name: []const u8) ! .tag = .section, .name = try wasm.string_table.put(wasm.base.allocator, name), .index = 0, - .flags = @enumToInt(Symbol.Flag.WASM_SYM_BINDING_LOCAL), + .flags = @intFromEnum(Symbol.Flag.WASM_SYM_BINDING_LOCAL), }; atom.alignment = 1; // debug sections are always 1-byte-aligned @@ -3544,7 +3544,7 @@ fn writeToFile( header_offset, .import, @intCast(u32, binary_bytes.items.len - header_offset - header_size), - @intCast(u32, wasm.imports.count() + @boolToInt(import_memory)), + @intCast(u32, wasm.imports.count() + @intFromBool(import_memory)), ); section_count += 1; } @@ -3606,7 +3606,7 @@ fn writeToFile( for (wasm.wasm_globals.items) |global| { try binary_writer.writeByte(std.wasm.valtype(global.global_type.valtype)); - try binary_writer.writeByte(@boolToInt(global.global_type.mutable)); + try binary_writer.writeByte(@intFromBool(global.global_type.mutable)); try emitInit(binary_writer, global.init); } @@ -3628,7 +3628,7 @@ fn writeToFile( const name = wasm.string_table.get(exp.name); try leb.writeULEB128(binary_writer, @intCast(u32, name.len)); try binary_writer.writeAll(name); - try leb.writeULEB128(binary_writer, @enumToInt(exp.kind)); + try leb.writeULEB128(binary_writer, @intFromEnum(exp.kind)); try leb.writeULEB128(binary_writer, exp.index); } @@ -3644,7 +3644,7 @@ fn writeToFile( header_offset, .@"export", @intCast(u32, binary_bytes.items.len - header_offset - header_size), - @intCast(u32, wasm.exports.items.len) + @boolToInt(!import_memory), + @intCast(u32, wasm.exports.items.len) + @intFromBool(!import_memory), ); section_count += 1; } @@ -3682,7 +3682,7 @@ fn writeToFile( } // When the shared-memory option is enabled, we *must* emit the 'data count' section. - const data_segments_count = wasm.data_segments.count() - @boolToInt(wasm.data_segments.contains(".bss") and import_memory); + const data_segments_count = wasm.data_segments.count() - @intFromBool(wasm.data_segments.contains(".bss") and import_memory); if (data_segments_count != 0 and wasm.base.options.shared_memory) { const header_offset = try reserveVecSectionHeader(&binary_bytes); try writeVecSectionHeader( @@ -3760,7 +3760,7 @@ fn writeToFile( var atom_index = wasm.atoms.get(segment_index).?; try leb.writeULEB128(binary_writer, segment.flags); - if (segment.flags & @enumToInt(Wasm.Segment.Flag.WASM_DATA_SEGMENT_HAS_MEMINDEX) != 0) { + if (segment.flags & @intFromEnum(Wasm.Segment.Flag.WASM_DATA_SEGMENT_HAS_MEMINDEX) != 0) { try leb.writeULEB128(binary_writer, @as(u32, 0)); // memory is always index 0 as we only have 1 memory entry } // when a segment is passive, it's initialized during runtime. @@ -4030,8 +4030,8 @@ fn emitFeaturesSection(binary_bytes: *std.ArrayList(u8), enabled_features: []con try leb.writeULEB128(writer, features_count); for (enabled_features, 0..) |enabled, feature_index| { if (enabled) { - const feature: types.Feature = .{ .prefix = .used, .tag = @intToEnum(types.Feature.Tag, feature_index) }; - try leb.writeULEB128(writer, @enumToInt(feature.prefix)); + const feature: types.Feature = .{ .prefix = .used, .tag = @enumFromInt(types.Feature.Tag, feature_index) }; + try leb.writeULEB128(writer, @intFromEnum(feature.prefix)); var buf: [100]u8 = undefined; const string = try std.fmt.bufPrint(&buf, "{}", .{feature.tag}); try leb.writeULEB128(writer, @intCast(u32, string.len)); @@ -4121,7 +4121,7 @@ fn emitNameSubsection(wasm: *Wasm, section_id: std.wasm.NameSubsection, names: a } // From now, write to the actual writer - try leb.writeULEB128(writer, @enumToInt(section_id)); + try leb.writeULEB128(writer, @intFromEnum(section_id)); try leb.writeULEB128(writer, @intCast(u32, section_list.items.len)); try writer.writeAll(section_list.items); } @@ -4169,12 +4169,12 @@ fn emitImport(wasm: *Wasm, writer: anytype, import: types.Import) !void { try leb.writeULEB128(writer, @intCast(u32, name.len)); try writer.writeAll(name); - try writer.writeByte(@enumToInt(import.kind)); + try writer.writeByte(@intFromEnum(import.kind)); switch (import.kind) { .function => |type_index| try leb.writeULEB128(writer, type_index), .global => |global_type| { try leb.writeULEB128(writer, std.wasm.valtype(global_type.valtype)); - try writer.writeByte(@boolToInt(global_type.mutable)); + try writer.writeByte(@intFromBool(global_type.mutable)); }, .table => |table| { try leb.writeULEB128(writer, std.wasm.reftype(table.reftype)); @@ -4609,7 +4609,7 @@ fn reserveCustomSectionHeader(bytes: *std.ArrayList(u8)) !u32 { fn writeVecSectionHeader(buffer: []u8, offset: u32, section: std.wasm.Section, size: u32, items: u32) !void { var buf: [1 + 5 + 5]u8 = undefined; - buf[0] = @enumToInt(section); + buf[0] = @intFromEnum(section); leb.writeUnsignedFixed(5, buf[1..6], size); leb.writeUnsignedFixed(5, buf[6..], items); buffer[offset..][0..buf.len].* = buf; @@ -4645,7 +4645,7 @@ fn emitLinkSection(wasm: *Wasm, binary_bytes: *std.ArrayList(u8), symbol_table: fn emitSymbolTable(wasm: *Wasm, binary_bytes: *std.ArrayList(u8), symbol_table: *std.AutoArrayHashMap(SymbolLoc, u32)) !void { const writer = binary_bytes.writer(); - try leb.writeULEB128(writer, @enumToInt(types.SubsectionType.WASM_SYMBOL_TABLE)); + try leb.writeULEB128(writer, @intFromEnum(types.SubsectionType.WASM_SYMBOL_TABLE)); const table_offset = binary_bytes.items.len; var symbol_count: u32 = 0; @@ -4655,7 +4655,7 @@ fn emitSymbolTable(wasm: *Wasm, binary_bytes: *std.ArrayList(u8), symbol_table: try symbol_table.putNoClobber(sym_loc, symbol_count); symbol_count += 1; log.debug("Emit symbol: {}", .{symbol}); - try leb.writeULEB128(writer, @enumToInt(symbol.tag)); + try leb.writeULEB128(writer, @intFromEnum(symbol.tag)); try leb.writeULEB128(writer, symbol.flags); const sym_name = if (wasm.export_names.get(sym_loc)) |exp_name| wasm.string_table.get(exp_name) else sym_loc.getName(wasm); @@ -4693,7 +4693,7 @@ fn emitSymbolTable(wasm: *Wasm, binary_bytes: *std.ArrayList(u8), symbol_table: fn emitSegmentInfo(wasm: *Wasm, binary_bytes: *std.ArrayList(u8)) !void { const writer = binary_bytes.writer(); - try leb.writeULEB128(writer, @enumToInt(types.SubsectionType.WASM_SEGMENT_INFO)); + try leb.writeULEB128(writer, @intFromEnum(types.SubsectionType.WASM_SEGMENT_INFO)); const segment_offset = binary_bytes.items.len; try leb.writeULEB128(writer, @intCast(u32, wasm.segment_info.count())); @@ -4754,7 +4754,7 @@ fn emitCodeRelocations( count += 1; const sym_loc: SymbolLoc = .{ .file = atom.file, .index = relocation.index }; const symbol_index = symbol_table.get(sym_loc).?; - try leb.writeULEB128(writer, @enumToInt(relocation.relocation_type)); + try leb.writeULEB128(writer, @intFromEnum(relocation.relocation_type)); const offset = atom.offset + relocation.offset + size_offset; try leb.writeULEB128(writer, offset); try leb.writeULEB128(writer, symbol_index); @@ -4804,7 +4804,7 @@ fn emitDataRelocations( .index = relocation.index, }; const symbol_index = symbol_table.get(sym_loc).?; - try leb.writeULEB128(writer, @enumToInt(relocation.relocation_type)); + try leb.writeULEB128(writer, @intFromEnum(relocation.relocation_type)); const offset = atom.offset + relocation.offset + size_offset; try leb.writeULEB128(writer, offset); try leb.writeULEB128(writer, symbol_index); diff --git a/src/link/Wasm/Object.zig b/src/link/Wasm/Object.zig index 33f54dece5..db96381938 100644 --- a/src/link/Wasm/Object.zig +++ b/src/link/Wasm/Object.zig @@ -365,7 +365,7 @@ fn Parser(comptime ReaderType: type) type { const len = try readLeb(u32, parser.reader.reader()); var limited_reader = std.io.limitedReader(parser.reader.reader(), len); const reader = limited_reader.reader(); - switch (@intToEnum(std.wasm.Section, byte)) { + switch (@enumFromInt(std.wasm.Section, byte)) { .custom => { const name_len = try readLeb(u32, reader); const name = try gpa.alloc(u8, name_len); @@ -645,7 +645,7 @@ fn Parser(comptime ReaderType: type) type { /// such as access to the `import` section to find the name of a symbol. fn parseSubsection(parser: *ObjectParser, gpa: Allocator, reader: anytype) !void { const sub_type = try leb.readULEB128(u8, reader); - log.debug("Found subsection: {s}", .{@tagName(@intToEnum(types.SubsectionType, sub_type))}); + log.debug("Found subsection: {s}", .{@tagName(@enumFromInt(types.SubsectionType, sub_type))}); const payload_len = try leb.readULEB128(u32, reader); if (payload_len == 0) return; @@ -655,7 +655,7 @@ fn Parser(comptime ReaderType: type) type { // every subsection contains a 'count' field const count = try leb.readULEB128(u32, limited_reader); - switch (@intToEnum(types.SubsectionType, sub_type)) { + switch (@enumFromInt(types.SubsectionType, sub_type)) { .WASM_SEGMENT_INFO => { const segments = try gpa.alloc(types.Segment, count); errdefer gpa.free(segments); @@ -678,7 +678,7 @@ fn Parser(comptime ReaderType: type) type { // support legacy object files that specified being TLS by the name instead of the TLS flag. if (!segment.isTLS() and (std.mem.startsWith(u8, segment.name, ".tdata") or std.mem.startsWith(u8, segment.name, ".tbss"))) { // set the flag so we can simply check for the flag in the rest of the linker. - segment.flags |= @enumToInt(types.Segment.Flags.WASM_SEG_FLAG_TLS); + segment.flags |= @intFromEnum(types.Segment.Flags.WASM_SEG_FLAG_TLS); } } parser.object.segment_info = segments; @@ -714,7 +714,7 @@ fn Parser(comptime ReaderType: type) type { errdefer gpa.free(symbols); for (symbols) |*symbol| { symbol.* = .{ - .kind = @intToEnum(types.ComdatSym.Type, try leb.readULEB128(u8, reader)), + .kind = @enumFromInt(types.ComdatSym.Type, try leb.readULEB128(u8, reader)), .index = try leb.readULEB128(u32, reader), }; } @@ -758,7 +758,7 @@ fn Parser(comptime ReaderType: type) type { /// requires access to `Object` to find the name of a symbol when it's /// an import and flag `WASM_SYM_EXPLICIT_NAME` is not set. fn parseSymbol(parser: *ObjectParser, gpa: Allocator, reader: anytype) !Symbol { - const tag = @intToEnum(Symbol.Tag, try leb.readULEB128(u8, reader)); + const tag = @enumFromInt(Symbol.Tag, try leb.readULEB128(u8, reader)); const flags = try leb.readULEB128(u32, reader); var symbol: Symbol = .{ .flags = flags, @@ -846,7 +846,7 @@ fn readLeb(comptime T: type, reader: anytype) !T { /// Asserts `T` is an enum fn readEnum(comptime T: type, reader: anytype) !T { switch (@typeInfo(T)) { - .Enum => |enum_type| return @intToEnum(T, try readLeb(enum_type.tag_type, reader)), + .Enum => |enum_type| return @enumFromInt(T, try readLeb(enum_type.tag_type, reader)), else => @compileError("T must be an enum. Instead was given type " ++ @typeName(T)), } } @@ -867,7 +867,7 @@ fn readLimits(reader: anytype) !std.wasm.Limits { fn readInit(reader: anytype) !std.wasm.InitExpression { const opcode = try reader.readByte(); - const init_expr: std.wasm.InitExpression = switch (@intToEnum(std.wasm.Opcode, opcode)) { + const init_expr: std.wasm.InitExpression = switch (@enumFromInt(std.wasm.Opcode, opcode)) { .i32_const => .{ .i32_const = try readLeb(i32, reader) }, .global_get => .{ .global_get = try readLeb(u32, reader) }, else => @panic("TODO: initexpression for other opcodes"), diff --git a/src/link/Wasm/Symbol.zig b/src/link/Wasm/Symbol.zig index 8a1c4c5fdb..8dc10771ae 100644 --- a/src/link/Wasm/Symbol.zig +++ b/src/link/Wasm/Symbol.zig @@ -91,32 +91,32 @@ pub fn requiresImport(symbol: Symbol) bool { } pub fn isTLS(symbol: Symbol) bool { - return symbol.flags & @enumToInt(Flag.WASM_SYM_TLS) != 0; + return symbol.flags & @intFromEnum(Flag.WASM_SYM_TLS) != 0; } pub fn hasFlag(symbol: Symbol, flag: Flag) bool { - return symbol.flags & @enumToInt(flag) != 0; + return symbol.flags & @intFromEnum(flag) != 0; } pub fn setFlag(symbol: *Symbol, flag: Flag) void { - symbol.flags |= @enumToInt(flag); + symbol.flags |= @intFromEnum(flag); } pub fn isUndefined(symbol: Symbol) bool { - return symbol.flags & @enumToInt(Flag.WASM_SYM_UNDEFINED) != 0; + return symbol.flags & @intFromEnum(Flag.WASM_SYM_UNDEFINED) != 0; } pub fn setUndefined(symbol: *Symbol, is_undefined: bool) void { if (is_undefined) { symbol.setFlag(.WASM_SYM_UNDEFINED); } else { - symbol.flags &= ~@enumToInt(Flag.WASM_SYM_UNDEFINED); + symbol.flags &= ~@intFromEnum(Flag.WASM_SYM_UNDEFINED); } } pub fn setGlobal(symbol: *Symbol, is_global: bool) void { if (is_global) { - symbol.flags &= ~@enumToInt(Flag.WASM_SYM_BINDING_LOCAL); + symbol.flags &= ~@intFromEnum(Flag.WASM_SYM_BINDING_LOCAL); } else { symbol.setFlag(.WASM_SYM_BINDING_LOCAL); } @@ -127,23 +127,23 @@ pub fn isDefined(symbol: Symbol) bool { } pub fn isVisible(symbol: Symbol) bool { - return symbol.flags & @enumToInt(Flag.WASM_SYM_VISIBILITY_HIDDEN) == 0; + return symbol.flags & @intFromEnum(Flag.WASM_SYM_VISIBILITY_HIDDEN) == 0; } pub fn isLocal(symbol: Symbol) bool { - return symbol.flags & @enumToInt(Flag.WASM_SYM_BINDING_LOCAL) != 0; + return symbol.flags & @intFromEnum(Flag.WASM_SYM_BINDING_LOCAL) != 0; } pub fn isGlobal(symbol: Symbol) bool { - return symbol.flags & @enumToInt(Flag.WASM_SYM_BINDING_LOCAL) == 0; + return symbol.flags & @intFromEnum(Flag.WASM_SYM_BINDING_LOCAL) == 0; } pub fn isHidden(symbol: Symbol) bool { - return symbol.flags & @enumToInt(Flag.WASM_SYM_VISIBILITY_HIDDEN) != 0; + return symbol.flags & @intFromEnum(Flag.WASM_SYM_VISIBILITY_HIDDEN) != 0; } pub fn isNoStrip(symbol: Symbol) bool { - return symbol.flags & @enumToInt(Flag.WASM_SYM_NO_STRIP) != 0; + return symbol.flags & @intFromEnum(Flag.WASM_SYM_NO_STRIP) != 0; } pub fn isExported(symbol: Symbol, is_dynamic: bool) bool { @@ -153,7 +153,7 @@ pub fn isExported(symbol: Symbol, is_dynamic: bool) bool { } pub fn isWeak(symbol: Symbol) bool { - return symbol.flags & @enumToInt(Flag.WASM_SYM_BINDING_WEAK) != 0; + return symbol.flags & @intFromEnum(Flag.WASM_SYM_BINDING_WEAK) != 0; } /// Formats the symbol into human-readable text diff --git a/src/link/Wasm/types.zig b/src/link/Wasm/types.zig index 801c25e9d9..9bf54f25c3 100644 --- a/src/link/Wasm/types.zig +++ b/src/link/Wasm/types.zig @@ -118,7 +118,7 @@ pub const Segment = struct { flags: u32, pub fn isTLS(segment: Segment) bool { - return segment.flags & @enumToInt(Flags.WASM_SEG_FLAG_TLS) != 0; + return segment.flags & @intFromEnum(Flags.WASM_SEG_FLAG_TLS) != 0; } /// Returns the name as how it will be output into the final object @@ -205,7 +205,7 @@ pub const Feature = struct { /// From a given cpu feature, returns its linker feature pub fn fromCpuFeature(feature: std.Target.wasm.Feature) Tag { - return @intToEnum(Tag, @enumToInt(feature)); + return @enumFromInt(Tag, @intFromEnum(feature)); } pub fn format(tag: Tag, comptime fmt: []const u8, opt: std.fmt.FormatOptions, writer: anytype) !void { diff --git a/src/main.zig b/src/main.zig index 2f56cad133..e7cd48a3da 100644 --- a/src/main.zig +++ b/src/main.zig @@ -140,8 +140,8 @@ pub fn log( // Hide debug messages unless: // * logging enabled with `-Dlog`. // * the --debug-log arg for the scope has been provided - if (@enumToInt(level) > @enumToInt(std.options.log_level) or - @enumToInt(level) > @enumToInt(std.log.Level.info)) + if (@intFromEnum(level) > @intFromEnum(std.options.log_level) or + @intFromEnum(level) > @intFromEnum(std.log.Level.info)) { if (!build_options.enable_logging) return; @@ -2424,8 +2424,8 @@ fn buildOutputType( fatal("shared memory is not allowed in object files", .{}); } - if (!target_info.target.cpu.features.isEnabled(@enumToInt(std.Target.wasm.Feature.atomics)) or - !target_info.target.cpu.features.isEnabled(@enumToInt(std.Target.wasm.Feature.bulk_memory))) + if (!target_info.target.cpu.features.isEnabled(@intFromEnum(std.Target.wasm.Feature.atomics)) or + !target_info.target.cpu.features.isEnabled(@intFromEnum(std.Target.wasm.Feature.bulk_memory))) { fatal("'atomics' and 'bulk-memory' features must be enabled to use shared memory", .{}); } @@ -2640,7 +2640,7 @@ fn buildOutputType( if (output_mode == .Obj and (object_format == .coff or object_format == .macho)) { const total_obj_count = c_source_files.items.len + - @boolToInt(root_src_file != null) + + @intFromBool(root_src_file != null) + link_objects.items.len; if (total_obj_count > 1) { fatal("{s} does not support linking multiple objects into one", .{@tagName(object_format)}); @@ -3466,7 +3466,7 @@ fn serve( } }, else => { - fatal("unrecognized message from client: 0x{x}", .{@enumToInt(hdr.tag)}); + fatal("unrecognized message from client: 0x{x}", .{@intFromEnum(hdr.tag)}); }, } } @@ -4706,7 +4706,7 @@ pub fn cmdFmt(gpa: Allocator, arena: Allocator, args: []const []const u8) !void defer gpa.free(formatted); if (check_flag) { - const code: u8 = @boolToInt(mem.eql(u8, formatted, source_code)); + const code: u8 = @intFromBool(mem.eql(u8, formatted, source_code)); process.exit(code); } @@ -5080,7 +5080,7 @@ pub fn lldMain( unreachable; } }; - return @boolToInt(!ok); + return @intFromBool(!ok); } const ArgIteratorResponseFile = process.ArgIteratorGeneral(.{ .comments = true, .single_quotes = true }); diff --git a/src/objcopy.zig b/src/objcopy.zig index 014208cc0d..ce7b03903a 100644 --- a/src/objcopy.zig +++ b/src/objcopy.zig @@ -539,7 +539,7 @@ const HexWriter = struct { const parts = addressParts(self.address); sum +%= parts[0]; sum +%= parts[1]; - sum +%= @enumToInt(self.payload); + sum +%= @intFromEnum(self.payload); for (payload_bytes) |byte| { sum +%= byte; } @@ -557,7 +557,7 @@ const HexWriter = struct { const line = try std.fmt.bufPrint(&outbuf, ":{0X:0>2}{1X:0>4}{2X:0>2}{3s}{4X:0>2}" ++ linesep, .{ @intCast(u8, payload_bytes.len), self.address, - @enumToInt(self.payload), + @intFromEnum(self.payload), std.fmt.fmtSliceHexUpper(payload_bytes), self.checksum(), }); diff --git a/src/print_air.zig b/src/print_air.zig index ddb63ac17c..d73ec30891 100644 --- a/src/print_air.zig +++ b/src/print_air.zig @@ -956,7 +956,7 @@ const Writer = struct { operand: Air.Inst.Ref, dies: bool, ) @TypeOf(s).Error!void { - const i = @enumToInt(operand); + const i = @intFromEnum(operand); if (i < InternPool.static_len) { return s.print("@{}", .{operand}); diff --git a/src/print_zir.zig b/src/print_zir.zig index b3359e2e31..0291578189 100644 --- a/src/print_zir.zig +++ b/src/print_zir.zig @@ -36,7 +36,7 @@ pub fn renderAsTextToFile( try stream.print("%{d} ", .{main_struct_inst}); try writer.writeInstToStream(stream, main_struct_inst); try stream.writeAll("\n"); - const imports_index = scope_file.zir.extra[@enumToInt(Zir.ExtraIndex.imports)]; + const imports_index = scope_file.zir.extra[@intFromEnum(Zir.ExtraIndex.imports)]; if (imports_index != 0) { try stream.writeAll("Imports:\n"); @@ -559,7 +559,7 @@ const Writer = struct { fn writeElemTypeIndex(self: *Writer, stream: anytype, inst: Zir.Inst.Index) !void { const inst_data = self.code.instructions.items(.data)[inst].bin; try self.writeInstRef(stream, inst_data.lhs); - try stream.print(", {d})", .{@enumToInt(inst_data.rhs)}); + try stream.print(", {d})", .{@intFromEnum(inst_data.rhs)}); } fn writeUnNode( @@ -632,25 +632,25 @@ const Writer = struct { var extra_index = extra.end; if (inst_data.flags.has_sentinel) { try stream.writeAll(", "); - try self.writeInstRef(stream, @intToEnum(Zir.Inst.Ref, self.code.extra[extra_index])); + try self.writeInstRef(stream, @enumFromInt(Zir.Inst.Ref, self.code.extra[extra_index])); extra_index += 1; } if (inst_data.flags.has_align) { try stream.writeAll(", align("); - try self.writeInstRef(stream, @intToEnum(Zir.Inst.Ref, self.code.extra[extra_index])); + try self.writeInstRef(stream, @enumFromInt(Zir.Inst.Ref, self.code.extra[extra_index])); extra_index += 1; if (inst_data.flags.has_bit_range) { - const bit_start = extra_index + @boolToInt(inst_data.flags.has_addrspace); + const bit_start = extra_index + @intFromBool(inst_data.flags.has_addrspace); try stream.writeAll(":"); - try self.writeInstRef(stream, @intToEnum(Zir.Inst.Ref, self.code.extra[bit_start])); + try self.writeInstRef(stream, @enumFromInt(Zir.Inst.Ref, self.code.extra[bit_start])); try stream.writeAll(":"); - try self.writeInstRef(stream, @intToEnum(Zir.Inst.Ref, self.code.extra[bit_start + 1])); + try self.writeInstRef(stream, @enumFromInt(Zir.Inst.Ref, self.code.extra[bit_start + 1])); } try stream.writeAll(")"); } if (inst_data.flags.has_addrspace) { try stream.writeAll(", addrspace("); - try self.writeInstRef(stream, @intToEnum(Zir.Inst.Ref, self.code.extra[extra_index])); + try self.writeInstRef(stream, @enumFromInt(Zir.Inst.Ref, self.code.extra[extra_index])); try stream.writeAll(")"); } try stream.writeAll(") "); @@ -1084,7 +1084,7 @@ const Writer = struct { try self.writeFlag(stream, "volatile, ", is_volatile); if (tmpl_is_expr) { - try self.writeInstRef(stream, @intToEnum(Zir.Inst.Ref, extra.data.asm_source)); + try self.writeInstRef(stream, @enumFromInt(Zir.Inst.Ref, extra.data.asm_source)); try stream.writeAll(", "); } else { const asm_source = self.code.nullTerminatedString(extra.data.asm_source); @@ -1179,7 +1179,7 @@ const Writer = struct { if (extra.data.flags.ensure_result_used) { try stream.writeAll("nodiscard "); } - try stream.print(".{s}, ", .{@tagName(@intToEnum(std.builtin.CallModifier, extra.data.flags.packed_modifier))}); + try stream.print(".{s}, ", .{@tagName(@enumFromInt(std.builtin.CallModifier, extra.data.flags.packed_modifier))}); switch (kind) { .direct => try self.writeInstRef(stream, extra.data.callee), .field => { @@ -1287,7 +1287,7 @@ const Writer = struct { extra_index += 1; try stream.writeAll("Packed("); if (backing_int_body_len == 0) { - const backing_int_ref = @intToEnum(Zir.Inst.Ref, self.code.extra[extra_index]); + const backing_int_ref = @enumFromInt(Zir.Inst.Ref, self.code.extra[extra_index]); extra_index += 1; try self.writeInstRef(stream, backing_int_ref); } else { @@ -1369,7 +1369,7 @@ const Writer = struct { if (has_type_body) { fields[field_i].type_len = self.code.extra[extra_index]; } else { - fields[field_i].type = @intToEnum(Zir.Inst.Ref, self.code.extra[extra_index]); + fields[field_i].type = @enumFromInt(Zir.Inst.Ref, self.code.extra[extra_index]); } extra_index += 1; @@ -1454,7 +1454,7 @@ const Writer = struct { } else null; const tag_type_ref = if (small.has_tag_type) blk: { - const tag_type_ref = @intToEnum(Zir.Inst.Ref, self.code.extra[extra_index]); + const tag_type_ref = @enumFromInt(Zir.Inst.Ref, self.code.extra[extra_index]); extra_index += 1; break :blk tag_type_ref; } else .none; @@ -1552,14 +1552,14 @@ const Writer = struct { try stream.print("{}", .{std.zig.fmtId(field_name)}); if (has_type) { - const field_type = @intToEnum(Zir.Inst.Ref, self.code.extra[extra_index]); + const field_type = @enumFromInt(Zir.Inst.Ref, self.code.extra[extra_index]); extra_index += 1; try stream.writeAll(": "); try self.writeInstRef(stream, field_type); } if (has_align) { - const align_ref = @intToEnum(Zir.Inst.Ref, self.code.extra[extra_index]); + const align_ref = @enumFromInt(Zir.Inst.Ref, self.code.extra[extra_index]); extra_index += 1; try stream.writeAll(" align("); @@ -1567,7 +1567,7 @@ const Writer = struct { try stream.writeAll(")"); } if (has_value) { - const default_ref = @intToEnum(Zir.Inst.Ref, self.code.extra[extra_index]); + const default_ref = @enumFromInt(Zir.Inst.Ref, self.code.extra[extra_index]); extra_index += 1; try stream.writeAll(" = "); @@ -1618,17 +1618,17 @@ const Writer = struct { extra_index += 1; const align_inst: Zir.Inst.Ref = if (!has_align) .none else inst: { - const inst = @intToEnum(Zir.Inst.Ref, self.code.extra[extra_index]); + const inst = @enumFromInt(Zir.Inst.Ref, self.code.extra[extra_index]); extra_index += 1; break :inst inst; }; const section_inst: Zir.Inst.Ref = if (!has_section_or_addrspace) .none else inst: { - const inst = @intToEnum(Zir.Inst.Ref, self.code.extra[extra_index]); + const inst = @enumFromInt(Zir.Inst.Ref, self.code.extra[extra_index]); extra_index += 1; break :inst inst; }; const addrspace_inst: Zir.Inst.Ref = if (!has_section_or_addrspace) .none else inst: { - const inst = @intToEnum(Zir.Inst.Ref, self.code.extra[extra_index]); + const inst = @enumFromInt(Zir.Inst.Ref, self.code.extra[extra_index]); extra_index += 1; break :inst inst; }; @@ -1712,7 +1712,7 @@ const Writer = struct { } else null; const tag_type_ref = if (small.has_tag_type) blk: { - const tag_type_ref = @intToEnum(Zir.Inst.Ref, self.code.extra[extra_index]); + const tag_type_ref = @enumFromInt(Zir.Inst.Ref, self.code.extra[extra_index]); extra_index += 1; break :blk tag_type_ref; } else .none; @@ -1797,7 +1797,7 @@ const Writer = struct { try stream.print("{}", .{std.zig.fmtId(field_name)}); if (has_tag_value) { - const tag_value_ref = @intToEnum(Zir.Inst.Ref, self.code.extra[extra_index]); + const tag_value_ref = @enumFromInt(Zir.Inst.Ref, self.code.extra[extra_index]); extra_index += 1; try stream.writeAll(" = "); @@ -1940,7 +1940,7 @@ const Writer = struct { const scalar_cases_len = extra.data.bits.scalar_cases_len; var scalar_i: usize = 0; while (scalar_i < scalar_cases_len) : (scalar_i += 1) { - const item_ref = @intToEnum(Zir.Inst.Ref, self.code.extra[extra_index]); + const item_ref = @enumFromInt(Zir.Inst.Ref, self.code.extra[extra_index]); extra_index += 1; const info = @bitCast(Zir.Inst.SwitchBlock.ProngInfo, self.code.extra[extra_index]); extra_index += 1; @@ -1988,9 +1988,9 @@ const Writer = struct { var range_i: usize = 0; while (range_i < ranges_len) : (range_i += 1) { - const item_first = @intToEnum(Zir.Inst.Ref, self.code.extra[extra_index]); + const item_first = @enumFromInt(Zir.Inst.Ref, self.code.extra[extra_index]); extra_index += 1; - const item_last = @intToEnum(Zir.Inst.Ref, self.code.extra[extra_index]); + const item_last = @enumFromInt(Zir.Inst.Ref, self.code.extra[extra_index]); extra_index += 1; if (range_i != 0 or items.len != 0) { @@ -2091,7 +2091,7 @@ const Writer = struct { ret_ty_ref = .void_type; }, 1 => { - ret_ty_ref = @intToEnum(Zir.Inst.Ref, self.code.extra[extra_index]); + ret_ty_ref = @enumFromInt(Zir.Inst.Ref, self.code.extra[extra_index]); extra_index += 1; }, else => { @@ -2162,7 +2162,7 @@ const Writer = struct { align_body = self.code.extra[extra_index..][0..body_len]; extra_index += align_body.len; } else if (extra.data.bits.has_align_ref) { - align_ref = @intToEnum(Zir.Inst.Ref, self.code.extra[extra_index]); + align_ref = @enumFromInt(Zir.Inst.Ref, self.code.extra[extra_index]); extra_index += 1; } if (extra.data.bits.has_addrspace_body) { @@ -2171,7 +2171,7 @@ const Writer = struct { addrspace_body = self.code.extra[extra_index..][0..body_len]; extra_index += addrspace_body.len; } else if (extra.data.bits.has_addrspace_ref) { - addrspace_ref = @intToEnum(Zir.Inst.Ref, self.code.extra[extra_index]); + addrspace_ref = @enumFromInt(Zir.Inst.Ref, self.code.extra[extra_index]); extra_index += 1; } if (extra.data.bits.has_section_body) { @@ -2180,7 +2180,7 @@ const Writer = struct { section_body = self.code.extra[extra_index..][0..body_len]; extra_index += section_body.len; } else if (extra.data.bits.has_section_ref) { - section_ref = @intToEnum(Zir.Inst.Ref, self.code.extra[extra_index]); + section_ref = @enumFromInt(Zir.Inst.Ref, self.code.extra[extra_index]); extra_index += 1; } if (extra.data.bits.has_cc_body) { @@ -2189,7 +2189,7 @@ const Writer = struct { cc_body = self.code.extra[extra_index..][0..body_len]; extra_index += cc_body.len; } else if (extra.data.bits.has_cc_ref) { - cc_ref = @intToEnum(Zir.Inst.Ref, self.code.extra[extra_index]); + cc_ref = @enumFromInt(Zir.Inst.Ref, self.code.extra[extra_index]); extra_index += 1; } if (extra.data.bits.has_ret_ty_body) { @@ -2198,7 +2198,7 @@ const Writer = struct { ret_ty_body = self.code.extra[extra_index..][0..body_len]; extra_index += ret_ty_body.len; } else if (extra.data.bits.has_ret_ty_ref) { - ret_ty_ref = @intToEnum(Zir.Inst.Ref, self.code.extra[extra_index]); + ret_ty_ref = @enumFromInt(Zir.Inst.Ref, self.code.extra[extra_index]); extra_index += 1; } @@ -2251,12 +2251,12 @@ const Writer = struct { try stream.print(", lib_name=\"{}\"", .{std.zig.fmtEscapes(lib_name)}); } const align_inst: Zir.Inst.Ref = if (!small.has_align) .none else blk: { - const align_inst = @intToEnum(Zir.Inst.Ref, self.code.extra[extra_index]); + const align_inst = @enumFromInt(Zir.Inst.Ref, self.code.extra[extra_index]); extra_index += 1; break :blk align_inst; }; const init_inst: Zir.Inst.Ref = if (!small.has_init) .none else blk: { - const init_inst = @intToEnum(Zir.Inst.Ref, self.code.extra[extra_index]); + const init_inst = @enumFromInt(Zir.Inst.Ref, self.code.extra[extra_index]); extra_index += 1; break :blk init_inst; }; @@ -2274,12 +2274,12 @@ const Writer = struct { var extra_index: usize = extra.end; const type_inst: Zir.Inst.Ref = if (!small.has_type) .none else blk: { - const type_inst = @intToEnum(Zir.Inst.Ref, self.code.extra[extra_index]); + const type_inst = @enumFromInt(Zir.Inst.Ref, self.code.extra[extra_index]); extra_index += 1; break :blk type_inst; }; const align_inst: Zir.Inst.Ref = if (!small.has_align) .none else blk: { - const align_inst = @intToEnum(Zir.Inst.Ref, self.code.extra[extra_index]); + const align_inst = @enumFromInt(Zir.Inst.Ref, self.code.extra[extra_index]); extra_index += 1; break :blk align_inst; }; @@ -2480,8 +2480,8 @@ const Writer = struct { } fn writeInstRef(self: *Writer, stream: anytype, ref: Zir.Inst.Ref) !void { - const i = @enumToInt(ref); - if (i < InternPool.static_len) return stream.print("@{}", .{@intToEnum(InternPool.Index, i)}); + const i = @intFromEnum(ref); + if (i < InternPool.static_len) return stream.print("@{}", .{@enumFromInt(InternPool.Index, i)}); return self.writeInstIndex(stream, i - InternPool.static_len); } diff --git a/src/register_manager.zig b/src/register_manager.zig index 841545bf09..f9e2daeab1 100644 --- a/src/register_manager.zig +++ b/src/register_manager.zig @@ -366,7 +366,7 @@ const MockRegister1 = enum(u2) { r3, pub fn id(reg: MockRegister1) u2 { - return @enumToInt(reg); + return @intFromEnum(reg); } const allocatable_registers = [_]MockRegister1{ .r2, .r3 }; @@ -394,7 +394,7 @@ const MockRegister2 = enum(u2) { r3, pub fn id(reg: MockRegister2) u2 { - return @enumToInt(reg); + return @intFromEnum(reg); } const allocatable_registers = [_]MockRegister2{ .r0, .r1, .r2, .r3 }; @@ -426,14 +426,14 @@ const MockRegister3 = enum(u3) { x3, pub fn id(reg: MockRegister3) u3 { - return switch (@enumToInt(reg)) { - 0...3 => @as(u3, @truncate(u2, @enumToInt(reg))), - 4...7 => @enumToInt(reg), + return switch (@intFromEnum(reg)) { + 0...3 => @as(u3, @truncate(u2, @intFromEnum(reg))), + 4...7 => @intFromEnum(reg), }; } pub fn enc(reg: MockRegister3) u2 { - return @truncate(u2, @enumToInt(reg)); + return @truncate(u2, @intFromEnum(reg)); } const gp_regs = [_]MockRegister3{ .r0, .r1, .r2, .r3 }; diff --git a/src/translate_c.zig b/src/translate_c.zig index 3771795062..8d5804c5e5 100644 --- a/src/translate_c.zig +++ b/src/translate_c.zig @@ -110,7 +110,7 @@ const Scope = struct { if (self.base.parent.?.id == .do_loop) { // We reserve 1 extra statement if the parent is a do_loop. This is in case of // do while, we want to put `if (cond) break;` at the end. - const alloc_len = self.statements.items.len + @boolToInt(self.base.parent.?.id == .do_loop); + const alloc_len = self.statements.items.len + @intFromBool(self.base.parent.?.id == .do_loop); var stmts = try c.arena.alloc(Node, alloc_len); stmts.len = self.statements.items.len; @memcpy(stmts[0..self.statements.items.len], self.statements.items); @@ -507,14 +507,14 @@ fn declVisitorNamesOnly(c: *Context, decl: *const clang.Decl) Error!void { const enum_decl = enum_ty.getDecl(); // check if this decl is unnamed if (@ptrCast(*const clang.NamedDecl, enum_decl).getName_bytes_begin()[0] != 0) return; - break @ptrToInt(enum_decl.getCanonicalDecl()); + break @intFromPtr(enum_decl.getCanonicalDecl()); }, .Record => { const record_ty = @ptrCast(*const clang.RecordType, child_ty); const record_decl = record_ty.getDecl(); // check if this decl is unnamed if (@ptrCast(*const clang.NamedDecl, record_decl).getName_bytes_begin()[0] != 0) return; - break @ptrToInt(record_decl.getCanonicalDecl()); + break @intFromPtr(record_decl.getCanonicalDecl()); }, .Elaborated => { const elaborated_ty = @ptrCast(*const clang.ElaboratedType, child_ty); @@ -543,7 +543,7 @@ fn declVisitorNamesOnly(c: *Context, decl: *const clang.Decl) Error!void { } result.value_ptr.* = decl_name; // Put this typedef in the decl_table to avoid redefinitions. - try c.decl_table.putNoClobber(c.gpa, @ptrToInt(typedef_decl.getCanonicalDecl()), decl_name); + try c.decl_table.putNoClobber(c.gpa, @intFromPtr(typedef_decl.getCanonicalDecl()), decl_name); try c.typedefs.put(c.gpa, decl_name, {}); } } @@ -913,7 +913,7 @@ const builtin_typedef_map = std.ComptimeStringMap([]const u8, .{ }); fn transTypeDef(c: *Context, scope: *Scope, typedef_decl: *const clang.TypedefNameDecl) Error!void { - if (c.decl_table.get(@ptrToInt(typedef_decl.getCanonicalDecl()))) |_| + if (c.decl_table.get(@intFromPtr(typedef_decl.getCanonicalDecl()))) |_| return; // Avoid processing this decl twice const toplevel = scope.id == .root; const bs: *Scope.Block = if (!toplevel) try scope.findBlockScope(c) else undefined; @@ -922,10 +922,10 @@ fn transTypeDef(c: *Context, scope: *Scope, typedef_decl: *const clang.TypedefNa try c.typedefs.put(c.gpa, name, {}); if (builtin_typedef_map.get(name)) |builtin| { - return c.decl_table.putNoClobber(c.gpa, @ptrToInt(typedef_decl.getCanonicalDecl()), builtin); + return c.decl_table.putNoClobber(c.gpa, @intFromPtr(typedef_decl.getCanonicalDecl()), builtin); } if (!toplevel) name = try bs.makeMangledName(c, name); - try c.decl_table.putNoClobber(c.gpa, @ptrToInt(typedef_decl.getCanonicalDecl()), name); + try c.decl_table.putNoClobber(c.gpa, @intFromPtr(typedef_decl.getCanonicalDecl()), name); const child_qt = typedef_decl.getUnderlyingType(); const typedef_loc = typedef_decl.getLocation(); @@ -938,7 +938,7 @@ fn transTypeDef(c: *Context, scope: *Scope, typedef_decl: *const clang.TypedefNa const payload = try c.arena.create(ast.Payload.SimpleVarDecl); payload.* = .{ - .base = .{ .tag = ([2]Tag{ .var_simple, .pub_var_simple })[@boolToInt(toplevel)] }, + .base = .{ .tag = ([2]Tag{ .var_simple, .pub_var_simple })[@intFromBool(toplevel)] }, .data = .{ .name = name, .init = init_node, @@ -1063,7 +1063,7 @@ fn hasFlexibleArrayField(c: *Context, record_def: *const clang.RecordDecl) bool } fn transRecordDecl(c: *Context, scope: *Scope, record_decl: *const clang.RecordDecl) Error!void { - if (c.decl_table.get(@ptrToInt(record_decl.getCanonicalDecl()))) |_| + if (c.decl_table.get(@intFromPtr(record_decl.getCanonicalDecl()))) |_| return; // Avoid processing this decl twice const record_loc = record_decl.getLocation(); const toplevel = scope.id == .root; @@ -1079,13 +1079,13 @@ fn transRecordDecl(c: *Context, scope: *Scope, record_decl: *const clang.RecordD } else if (record_decl.isStruct()) { container_kind_name = "struct"; } else { - try c.decl_table.putNoClobber(c.gpa, @ptrToInt(record_decl.getCanonicalDecl()), bare_name); + try c.decl_table.putNoClobber(c.gpa, @intFromPtr(record_decl.getCanonicalDecl()), bare_name); return failDecl(c, record_loc, bare_name, "record {s} is not a struct or union", .{bare_name}); } var is_unnamed = false; var name = bare_name; - if (c.unnamed_typedefs.get(@ptrToInt(record_decl.getCanonicalDecl()))) |typedef_name| { + if (c.unnamed_typedefs.get(@intFromPtr(record_decl.getCanonicalDecl()))) |typedef_name| { bare_name = typedef_name; name = typedef_name; } else { @@ -1098,12 +1098,12 @@ fn transRecordDecl(c: *Context, scope: *Scope, record_decl: *const clang.RecordD name = try std.fmt.allocPrint(c.arena, "{s}_{s}", .{ container_kind_name, bare_name }); } if (!toplevel) name = try bs.makeMangledName(c, name); - try c.decl_table.putNoClobber(c.gpa, @ptrToInt(record_decl.getCanonicalDecl()), name); + try c.decl_table.putNoClobber(c.gpa, @intFromPtr(record_decl.getCanonicalDecl()), name); const is_pub = toplevel and !is_unnamed; const init_node = blk: { const record_def = record_decl.getDefinition() orelse { - try c.opaque_demotes.put(c.gpa, @ptrToInt(record_decl.getCanonicalDecl()), {}); + try c.opaque_demotes.put(c.gpa, @intFromPtr(record_decl.getCanonicalDecl()), {}); break :blk Tag.opaque_literal.init(); }; @@ -1126,7 +1126,7 @@ fn transRecordDecl(c: *Context, scope: *Scope, record_decl: *const clang.RecordD const field_qt = field_decl.getType(); if (field_decl.isBitField()) { - try c.opaque_demotes.put(c.gpa, @ptrToInt(record_decl.getCanonicalDecl()), {}); + try c.opaque_demotes.put(c.gpa, @intFromPtr(record_decl.getCanonicalDecl()), {}); try warn(c, scope, field_loc, "{s} demoted to opaque type - has bitfield", .{container_kind_name}); break :blk Tag.opaque_literal.init(); } @@ -1142,7 +1142,7 @@ fn transRecordDecl(c: *Context, scope: *Scope, record_decl: *const clang.RecordD if (isFlexibleArrayFieldDecl(c, field_decl)) { const flexible_array_fn = buildFlexibleArrayFn(c, scope, layout, field_name, field_decl) catch |err| switch (err) { error.UnsupportedType => { - try c.opaque_demotes.put(c.gpa, @ptrToInt(record_decl.getCanonicalDecl()), {}); + try c.opaque_demotes.put(c.gpa, @intFromPtr(record_decl.getCanonicalDecl()), {}); try warn(c, scope, record_loc, "{s} demoted to opaque type - unable to translate type of flexible array field {s}", .{ container_kind_name, field_name }); break :blk Tag.opaque_literal.init(); }, @@ -1153,7 +1153,7 @@ fn transRecordDecl(c: *Context, scope: *Scope, record_decl: *const clang.RecordD } const field_type = transQualType(c, scope, field_qt, field_loc) catch |err| switch (err) { error.UnsupportedType => { - try c.opaque_demotes.put(c.gpa, @ptrToInt(record_decl.getCanonicalDecl()), {}); + try c.opaque_demotes.put(c.gpa, @intFromPtr(record_decl.getCanonicalDecl()), {}); try warn(c, scope, record_loc, "{s} demoted to opaque type - unable to translate type of field {s}", .{ container_kind_name, field_name }); break :blk Tag.opaque_literal.init(); }, @@ -1166,7 +1166,7 @@ fn transRecordDecl(c: *Context, scope: *Scope, record_decl: *const clang.RecordD ClangAlignment.forField(c, field_decl, record_def).zigAlignment(); if (is_anon) { - try c.decl_table.putNoClobber(c.gpa, @ptrToInt(field_decl.getCanonicalDecl()), field_name); + try c.decl_table.putNoClobber(c.gpa, @intFromPtr(field_decl.getCanonicalDecl()), field_name); } try fields.append(.{ @@ -1178,7 +1178,7 @@ fn transRecordDecl(c: *Context, scope: *Scope, record_decl: *const clang.RecordD const record_payload = try c.arena.create(ast.Payload.Record); record_payload.* = .{ - .base = .{ .tag = ([2]Tag{ .@"struct", .@"union" })[@boolToInt(is_union)] }, + .base = .{ .tag = ([2]Tag{ .@"struct", .@"union" })[@intFromBool(is_union)] }, .data = .{ .layout = .@"extern", .fields = try c.arena.dupe(ast.Payload.Record.Field, fields.items), @@ -1191,7 +1191,7 @@ fn transRecordDecl(c: *Context, scope: *Scope, record_decl: *const clang.RecordD const payload = try c.arena.create(ast.Payload.SimpleVarDecl); payload.* = .{ - .base = .{ .tag = ([2]Tag{ .var_simple, .pub_var_simple })[@boolToInt(is_pub)] }, + .base = .{ .tag = ([2]Tag{ .var_simple, .pub_var_simple })[@intFromBool(is_pub)] }, .data = .{ .name = name, .init = init_node, @@ -1211,7 +1211,7 @@ fn transRecordDecl(c: *Context, scope: *Scope, record_decl: *const clang.RecordD } fn transEnumDecl(c: *Context, scope: *Scope, enum_decl: *const clang.EnumDecl) Error!void { - if (c.decl_table.get(@ptrToInt(enum_decl.getCanonicalDecl()))) |_| + if (c.decl_table.get(@intFromPtr(enum_decl.getCanonicalDecl()))) |_| return; // Avoid processing this decl twice const enum_loc = enum_decl.getLocation(); const toplevel = scope.id == .root; @@ -1220,7 +1220,7 @@ fn transEnumDecl(c: *Context, scope: *Scope, enum_decl: *const clang.EnumDecl) E var is_unnamed = false; var bare_name: []const u8 = try c.str(@ptrCast(*const clang.NamedDecl, enum_decl).getName_bytes_begin()); var name = bare_name; - if (c.unnamed_typedefs.get(@ptrToInt(enum_decl.getCanonicalDecl()))) |typedef_name| { + if (c.unnamed_typedefs.get(@intFromPtr(enum_decl.getCanonicalDecl()))) |typedef_name| { bare_name = typedef_name; name = typedef_name; } else { @@ -1231,7 +1231,7 @@ fn transEnumDecl(c: *Context, scope: *Scope, enum_decl: *const clang.EnumDecl) E name = try std.fmt.allocPrint(c.arena, "enum_{s}", .{bare_name}); } if (!toplevel) name = try bs.makeMangledName(c, name); - try c.decl_table.putNoClobber(c.gpa, @ptrToInt(enum_decl.getCanonicalDecl()), name); + try c.decl_table.putNoClobber(c.gpa, @intFromPtr(enum_decl.getCanonicalDecl()), name); const enum_type_node = if (enum_decl.getDefinition()) |enum_def| blk: { var it = enum_def.enumerator_begin(); @@ -1280,14 +1280,14 @@ fn transEnumDecl(c: *Context, scope: *Scope, enum_decl: *const clang.EnumDecl) E else try Tag.type.create(c.arena, "c_int"); } else blk: { - try c.opaque_demotes.put(c.gpa, @ptrToInt(enum_decl.getCanonicalDecl()), {}); + try c.opaque_demotes.put(c.gpa, @intFromPtr(enum_decl.getCanonicalDecl()), {}); break :blk Tag.opaque_literal.init(); }; const is_pub = toplevel and !is_unnamed; const payload = try c.arena.create(ast.Payload.SimpleVarDecl); payload.* = .{ - .base = .{ .tag = ([2]Tag{ .var_simple, .pub_var_simple })[@boolToInt(is_pub)] }, + .base = .{ .tag = ([2]Tag{ .var_simple, .pub_var_simple })[@intFromBool(is_pub)] }, .data = .{ .init = enum_type_node, .name = name, @@ -1536,7 +1536,7 @@ fn transSimpleOffsetOfExpr(c: *Context, expr: *const clang.OffsetOfExpr) TransEr if (component.getKind() == .Field) { const field_decl = component.getField(); if (field_decl.getParent()) |record_decl| { - if (c.decl_table.get(@ptrToInt(record_decl.getCanonicalDecl()))) |type_name| { + if (c.decl_table.get(@intFromPtr(record_decl.getCanonicalDecl()))) |type_name| { const type_node = try Tag.type.create(c.arena, type_name); var raw_field_name = try c.str(@ptrCast(*const clang.NamedDecl, field_decl).getName_bytes_begin()); @@ -1768,7 +1768,7 @@ fn transBinaryOperator( const infixOpNode = try transCreateNodeInfixOp(c, op_id, lhs, rhs, result_used); if (isPointerDiffExpr) { - // @divExact(@bitCast(, @ptrToInt(lhs) -% @ptrToInt(rhs)), @sizeOf()) + // @divExact(@bitCast(, @intFromPtr(lhs) -% @intFromPtr(rhs)), @sizeOf()) const ptrdiff_type = try transQualTypeIntWidthOf(c, qt, true); // C standard requires that pointer subtraction operands are of the same type, @@ -2138,7 +2138,7 @@ fn transBoolExpr( return fail(c, error.UnsupportedTranslation, expr.getBeginLoc(), "invalid integer literal", .{}); } const is_zero = signum == 0; - return Node{ .tag_if_small_enough = @enumToInt(([2]Tag{ .true_literal, .false_literal })[@boolToInt(is_zero)]) }; + return Node{ .tag_if_small_enough = @intFromEnum(([2]Tag{ .true_literal, .false_literal })[@intFromBool(is_zero)]) }; } var res = try transExpr(c, scope, expr, used); @@ -2599,7 +2599,7 @@ fn literalFitsInType(c: *Context, expr: *const clang.Expr, qt: clang.QualType) b var width = qualTypeIntBitWidth(c, qt) catch 8; if (width == 0) width = 8; // Byte is the smallest type. const is_signed = cIsSignedInteger(qt); - const width_max_int = (@as(u64, 1) << math.lossyCast(u6, width - @boolToInt(is_signed))) - 1; + const width_max_int = (@as(u64, 1) << math.lossyCast(u6, width - @intFromBool(is_signed))) - 1; switch (@ptrCast(*const clang.Stmt, expr).getStmtClass()) { .CharacterLiteralClass => { @@ -2664,7 +2664,7 @@ fn transInitListExprRecord( // .field_name = expr var raw_name = try c.str(@ptrCast(*const clang.NamedDecl, field_decl).getName_bytes_begin()); if (field_decl.isAnonymousStructOrUnion()) { - const name = c.decl_table.get(@ptrToInt(field_decl.getCanonicalDecl())).?; + const name = c.decl_table.get(@intFromPtr(field_decl.getCanonicalDecl())).?; raw_name = try c.arena.dupe(u8, name); } @@ -3442,7 +3442,7 @@ fn transMemberExpr(c: *Context, scope: *Scope, stmt: *const clang.MemberExpr, re if (decl_kind == .Field) { const field_decl = @ptrCast(*const clang.FieldDecl, member_decl); if (field_decl.isAnonymousStructOrUnion()) { - const name = c.decl_table.get(@ptrToInt(field_decl.getCanonicalDecl())).?; + const name = c.decl_table.get(@intFromPtr(field_decl.getCanonicalDecl())).?; break :blk try c.arena.dupe(u8, name); } } @@ -4026,7 +4026,7 @@ fn transCreateCompoundAssign( return block_scope.complete(c); } -// Casting away const or volatile requires us to use @intToPtr +// Casting away const or volatile requires us to use @ptrFromInt fn removeCVQualifiers(c: *Context, dst_type_node: Node, expr: Node) Error!Node { const int_from_ptr = try Tag.int_from_ptr.create(c.arena, expr); return Tag.ptr_from_int.create(c.arena, .{ .lhs = dst_type_node, .rhs = int_from_ptr }); @@ -4835,7 +4835,7 @@ fn transType(c: *Context, scope: *Scope, ty: *const clang.Type, source_loc: clan if (builtin_typedef_map.get(decl_name)) |builtin| return Tag.type.create(c.arena, builtin); } try transTypeDef(c, trans_scope, typedef_decl); - const name = c.decl_table.get(@ptrToInt(typedef_decl.getCanonicalDecl())).?; + const name = c.decl_table.get(@intFromPtr(typedef_decl.getCanonicalDecl())).?; return Tag.identifier.create(c.arena, name); }, .Record => { @@ -4848,7 +4848,7 @@ fn transType(c: *Context, scope: *Scope, ty: *const clang.Type, source_loc: clan if (c.global_names.get(decl_name)) |_| trans_scope = &c.global_scope.base; } try transRecordDecl(c, trans_scope, record_decl); - const name = c.decl_table.get(@ptrToInt(record_decl.getCanonicalDecl())).?; + const name = c.decl_table.get(@intFromPtr(record_decl.getCanonicalDecl())).?; return Tag.identifier.create(c.arena, name); }, .Enum => { @@ -4861,7 +4861,7 @@ fn transType(c: *Context, scope: *Scope, ty: *const clang.Type, source_loc: clan if (c.global_names.get(decl_name)) |_| trans_scope = &c.global_scope.base; } try transEnumDecl(c, trans_scope, enum_decl); - const name = c.decl_table.get(@ptrToInt(enum_decl.getCanonicalDecl())).?; + const name = c.decl_table.get(@intFromPtr(enum_decl.getCanonicalDecl())).?; return Tag.identifier.create(c.arena, name); }, .Elaborated => { @@ -4928,7 +4928,7 @@ fn qualTypeWasDemotedToOpaque(c: *Context, qt: clang.QualType) bool { const record_ty = @ptrCast(*const clang.RecordType, ty); const record_decl = record_ty.getDecl(); - const canonical = @ptrToInt(record_decl.getCanonicalDecl()); + const canonical = @intFromPtr(record_decl.getCanonicalDecl()); if (c.opaque_demotes.contains(canonical)) return true; // check all childern for opaque types. @@ -4944,7 +4944,7 @@ fn qualTypeWasDemotedToOpaque(c: *Context, qt: clang.QualType) bool { const enum_ty = @ptrCast(*const clang.EnumType, ty); const enum_decl = enum_ty.getDecl(); - const canonical = @ptrToInt(enum_decl.getCanonicalDecl()); + const canonical = @intFromPtr(enum_decl.getCanonicalDecl()); return c.opaque_demotes.contains(canonical); }, .Elaborated => { @@ -5533,7 +5533,7 @@ fn getMacroText(unit: *const clang.ASTUnit, c: *const Context, macro: *const cla const begin_c = c.source_manager.getCharacterData(begin_loc); const end_c = c.source_manager.getCharacterData(end_loc); - const slice_len = @ptrToInt(end_c) - @ptrToInt(begin_c); + const slice_len = @intFromPtr(end_c) - @intFromPtr(begin_c); return begin_c[0..slice_len]; } @@ -6087,7 +6087,7 @@ fn parseCPrimaryExpr(c: *Context, m: *MacroCtx, scope: *Scope) ParseError!Node { return node; } -fn macroBoolToInt(c: *Context, node: Node) !Node { +fn macroIntFromBool(c: *Context, node: Node) !Node { if (!isBoolRes(node)) { return node; } @@ -6141,8 +6141,8 @@ fn parseCAndExpr(c: *Context, m: *MacroCtx, scope: *Scope) ParseError!Node { fn parseCBitOrExpr(c: *Context, m: *MacroCtx, scope: *Scope) ParseError!Node { var node = try parseCBitXorExpr(c, m, scope); while (m.next().? == .Pipe) { - const lhs = try macroBoolToInt(c, node); - const rhs = try macroBoolToInt(c, try parseCBitXorExpr(c, m, scope)); + const lhs = try macroIntFromBool(c, node); + const rhs = try macroIntFromBool(c, try parseCBitXorExpr(c, m, scope)); node = try Tag.bit_or.create(c.arena, .{ .lhs = lhs, .rhs = rhs }); } m.i -= 1; @@ -6152,8 +6152,8 @@ fn parseCBitOrExpr(c: *Context, m: *MacroCtx, scope: *Scope) ParseError!Node { fn parseCBitXorExpr(c: *Context, m: *MacroCtx, scope: *Scope) ParseError!Node { var node = try parseCBitAndExpr(c, m, scope); while (m.next().? == .Caret) { - const lhs = try macroBoolToInt(c, node); - const rhs = try macroBoolToInt(c, try parseCBitAndExpr(c, m, scope)); + const lhs = try macroIntFromBool(c, node); + const rhs = try macroIntFromBool(c, try parseCBitAndExpr(c, m, scope)); node = try Tag.bit_xor.create(c.arena, .{ .lhs = lhs, .rhs = rhs }); } m.i -= 1; @@ -6163,8 +6163,8 @@ fn parseCBitXorExpr(c: *Context, m: *MacroCtx, scope: *Scope) ParseError!Node { fn parseCBitAndExpr(c: *Context, m: *MacroCtx, scope: *Scope) ParseError!Node { var node = try parseCEqExpr(c, m, scope); while (m.next().? == .Ampersand) { - const lhs = try macroBoolToInt(c, node); - const rhs = try macroBoolToInt(c, try parseCEqExpr(c, m, scope)); + const lhs = try macroIntFromBool(c, node); + const rhs = try macroIntFromBool(c, try parseCEqExpr(c, m, scope)); node = try Tag.bit_and.create(c.arena, .{ .lhs = lhs, .rhs = rhs }); } m.i -= 1; @@ -6177,14 +6177,14 @@ fn parseCEqExpr(c: *Context, m: *MacroCtx, scope: *Scope) ParseError!Node { switch (m.peek().?) { .BangEqual => { _ = m.next(); - const lhs = try macroBoolToInt(c, node); - const rhs = try macroBoolToInt(c, try parseCRelExpr(c, m, scope)); + const lhs = try macroIntFromBool(c, node); + const rhs = try macroIntFromBool(c, try parseCRelExpr(c, m, scope)); node = try Tag.not_equal.create(c.arena, .{ .lhs = lhs, .rhs = rhs }); }, .EqualEqual => { _ = m.next(); - const lhs = try macroBoolToInt(c, node); - const rhs = try macroBoolToInt(c, try parseCRelExpr(c, m, scope)); + const lhs = try macroIntFromBool(c, node); + const rhs = try macroIntFromBool(c, try parseCRelExpr(c, m, scope)); node = try Tag.equal.create(c.arena, .{ .lhs = lhs, .rhs = rhs }); }, else => return node, @@ -6198,26 +6198,26 @@ fn parseCRelExpr(c: *Context, m: *MacroCtx, scope: *Scope) ParseError!Node { switch (m.peek().?) { .AngleBracketRight => { _ = m.next(); - const lhs = try macroBoolToInt(c, node); - const rhs = try macroBoolToInt(c, try parseCShiftExpr(c, m, scope)); + const lhs = try macroIntFromBool(c, node); + const rhs = try macroIntFromBool(c, try parseCShiftExpr(c, m, scope)); node = try Tag.greater_than.create(c.arena, .{ .lhs = lhs, .rhs = rhs }); }, .AngleBracketRightEqual => { _ = m.next(); - const lhs = try macroBoolToInt(c, node); - const rhs = try macroBoolToInt(c, try parseCShiftExpr(c, m, scope)); + const lhs = try macroIntFromBool(c, node); + const rhs = try macroIntFromBool(c, try parseCShiftExpr(c, m, scope)); node = try Tag.greater_than_equal.create(c.arena, .{ .lhs = lhs, .rhs = rhs }); }, .AngleBracketLeft => { _ = m.next(); - const lhs = try macroBoolToInt(c, node); - const rhs = try macroBoolToInt(c, try parseCShiftExpr(c, m, scope)); + const lhs = try macroIntFromBool(c, node); + const rhs = try macroIntFromBool(c, try parseCShiftExpr(c, m, scope)); node = try Tag.less_than.create(c.arena, .{ .lhs = lhs, .rhs = rhs }); }, .AngleBracketLeftEqual => { _ = m.next(); - const lhs = try macroBoolToInt(c, node); - const rhs = try macroBoolToInt(c, try parseCShiftExpr(c, m, scope)); + const lhs = try macroIntFromBool(c, node); + const rhs = try macroIntFromBool(c, try parseCShiftExpr(c, m, scope)); node = try Tag.less_than_equal.create(c.arena, .{ .lhs = lhs, .rhs = rhs }); }, else => return node, @@ -6231,14 +6231,14 @@ fn parseCShiftExpr(c: *Context, m: *MacroCtx, scope: *Scope) ParseError!Node { switch (m.peek().?) { .AngleBracketAngleBracketLeft => { _ = m.next(); - const lhs = try macroBoolToInt(c, node); - const rhs = try macroBoolToInt(c, try parseCAddSubExpr(c, m, scope)); + const lhs = try macroIntFromBool(c, node); + const rhs = try macroIntFromBool(c, try parseCAddSubExpr(c, m, scope)); node = try Tag.shl.create(c.arena, .{ .lhs = lhs, .rhs = rhs }); }, .AngleBracketAngleBracketRight => { _ = m.next(); - const lhs = try macroBoolToInt(c, node); - const rhs = try macroBoolToInt(c, try parseCAddSubExpr(c, m, scope)); + const lhs = try macroIntFromBool(c, node); + const rhs = try macroIntFromBool(c, try parseCAddSubExpr(c, m, scope)); node = try Tag.shr.create(c.arena, .{ .lhs = lhs, .rhs = rhs }); }, else => return node, @@ -6252,14 +6252,14 @@ fn parseCAddSubExpr(c: *Context, m: *MacroCtx, scope: *Scope) ParseError!Node { switch (m.peek().?) { .Plus => { _ = m.next(); - const lhs = try macroBoolToInt(c, node); - const rhs = try macroBoolToInt(c, try parseCMulExpr(c, m, scope)); + const lhs = try macroIntFromBool(c, node); + const rhs = try macroIntFromBool(c, try parseCMulExpr(c, m, scope)); node = try Tag.add.create(c.arena, .{ .lhs = lhs, .rhs = rhs }); }, .Minus => { _ = m.next(); - const lhs = try macroBoolToInt(c, node); - const rhs = try macroBoolToInt(c, try parseCMulExpr(c, m, scope)); + const lhs = try macroIntFromBool(c, node); + const rhs = try macroIntFromBool(c, try parseCMulExpr(c, m, scope)); node = try Tag.sub.create(c.arena, .{ .lhs = lhs, .rhs = rhs }); }, else => return node, @@ -6272,18 +6272,18 @@ fn parseCMulExpr(c: *Context, m: *MacroCtx, scope: *Scope) ParseError!Node { while (true) { switch (m.next().?) { .Asterisk => { - const lhs = try macroBoolToInt(c, node); - const rhs = try macroBoolToInt(c, try parseCCastExpr(c, m, scope)); + const lhs = try macroIntFromBool(c, node); + const rhs = try macroIntFromBool(c, try parseCCastExpr(c, m, scope)); node = try Tag.mul.create(c.arena, .{ .lhs = lhs, .rhs = rhs }); }, .Slash => { - const lhs = try macroBoolToInt(c, node); - const rhs = try macroBoolToInt(c, try parseCCastExpr(c, m, scope)); + const lhs = try macroIntFromBool(c, node); + const rhs = try macroIntFromBool(c, try parseCCastExpr(c, m, scope)); node = try Tag.macro_arithmetic.create(c.arena, .{ .op = .div, .lhs = lhs, .rhs = rhs }); }, .Percent => { - const lhs = try macroBoolToInt(c, node); - const rhs = try macroBoolToInt(c, try parseCCastExpr(c, m, scope)); + const lhs = try macroIntFromBool(c, node); + const rhs = try macroIntFromBool(c, try parseCCastExpr(c, m, scope)); node = try Tag.macro_arithmetic.create(c.arena, .{ .op = .rem, .lhs = lhs, .rhs = rhs }); }, else => { @@ -6512,7 +6512,7 @@ fn parseCPostfixExpr(c: *Context, m: *MacroCtx, scope: *Scope, type_name: ?Node) node = try Tag.field_access.create(c.arena, .{ .lhs = deref, .field_name = m.slice() }); }, .LBracket => { - const index_val = try macroBoolToInt(c, try parseCExpr(c, m, scope)); + const index_val = try macroIntFromBool(c, try parseCExpr(c, m, scope)); const index = try Tag.int_cast.create(c.arena, .{ .lhs = try Tag.type.create(c.arena, "usize"), .rhs = index_val, @@ -6610,12 +6610,12 @@ fn parseCUnaryExpr(c: *Context, m: *MacroCtx, scope: *Scope) ParseError!Node { return Tag.not.create(c.arena, operand); }, .Minus => { - const operand = try macroBoolToInt(c, try parseCCastExpr(c, m, scope)); + const operand = try macroIntFromBool(c, try parseCCastExpr(c, m, scope)); return Tag.negate.create(c.arena, operand); }, .Plus => return try parseCCastExpr(c, m, scope), .Tilde => { - const operand = try macroBoolToInt(c, try parseCCastExpr(c, m, scope)); + const operand = try macroIntFromBool(c, try parseCCastExpr(c, m, scope)); return Tag.bit_not.create(c.arena, operand); }, .Asterisk => { diff --git a/src/translate_c/ast.zig b/src/translate_c/ast.zig index 942844ec4e..c8ccfa497f 100644 --- a/src/translate_c/ast.zig +++ b/src/translate_c/ast.zig @@ -228,7 +228,7 @@ pub const Node = extern union { array_filler, pub const last_no_payload_tag = Tag.@"break"; - pub const no_payload_count = @enumToInt(last_no_payload_tag) + 1; + pub const no_payload_count = @intFromEnum(last_no_payload_tag) + 1; pub fn Type(comptime t: Tag) type { return switch (t) { @@ -381,8 +381,8 @@ pub const Node = extern union { } pub fn init(comptime t: Tag) Node { - comptime std.debug.assert(@enumToInt(t) < Tag.no_payload_count); - return .{ .tag_if_small_enough = @enumToInt(t) }; + comptime std.debug.assert(@intFromEnum(t) < Tag.no_payload_count); + return .{ .tag_if_small_enough = @intFromEnum(t) }; } pub fn create(comptime t: Tag, ally: Allocator, data: Data(t)) error{OutOfMemory}!Node { @@ -401,7 +401,7 @@ pub const Node = extern union { pub fn tag(self: Node) Tag { if (self.tag_if_small_enough < Tag.no_payload_count) { - return @intToEnum(Tag, @intCast(std.meta.Tag(Tag), self.tag_if_small_enough)); + return @enumFromInt(Tag, @intCast(std.meta.Tag(Tag), self.tag_if_small_enough)); } else { return self.ptr_otherwise.tag; } @@ -418,7 +418,7 @@ pub const Node = extern union { } pub fn initPayload(payload: *Payload) Node { - std.debug.assert(@enumToInt(payload.tag) >= Tag.no_payload_count); + std.debug.assert(@intFromEnum(payload.tag) >= Tag.no_payload_count); return .{ .ptr_otherwise = payload }; } diff --git a/src/type.zig b/src/type.zig index 1c3435dafd..ac5305b3f4 100644 --- a/src/type.zig +++ b/src/type.zig @@ -130,7 +130,7 @@ pub const Type = struct { // The InternPool data structure hashes based on Key to make interned objects // unique. An Index can be treated simply as u32 value for the // purpose of Type/Value hashing and equality. - return std.hash.uint32(@enumToInt(ty.toIntern())); + return std.hash.uint32(@intFromEnum(ty.toIntern())); } pub fn format(ty: Type, comptime unused_fmt_string: []const u8, options: std.fmt.FormatOptions, writer: anytype) !void { @@ -227,7 +227,7 @@ pub const Type = struct { if (info.vector_index == .runtime) { try writer.writeAll(":?"); } else if (info.vector_index != .none) { - try writer.print(":{d}", .{@enumToInt(info.vector_index)}); + try writer.print(":{d}", .{@intFromEnum(info.vector_index)}); } try writer.writeAll(") "); } @@ -1227,7 +1227,7 @@ pub const Type = struct { if (have_tag) { return abiAlignmentAdvanced(union_obj.tag_ty, mod, strat); } else { - return AbiAlignmentAdvanced{ .scalar = @boolToInt(union_obj.layout == .Extern) }; + return AbiAlignmentAdvanced{ .scalar = @intFromBool(union_obj.layout == .Extern) }; } } @@ -1307,7 +1307,7 @@ pub const Type = struct { .anyframe_type => return AbiSizeAdvanced{ .scalar = @divExact(target.ptrBitWidth(), 8) }, .array_type => |array_type| { - const len = array_type.len + @boolToInt(array_type.sentinel != .none); + const len = array_type.len + @intFromBool(array_type.sentinel != .none); switch (try array_type.child.toType().abiSizeAdvanced(mod, strat)) { .scalar => |elem_size| return .{ .scalar = len * elem_size }, .val => switch (strat) { @@ -1630,7 +1630,7 @@ pub const Type = struct { .anyframe_type => return target.ptrBitWidth(), .array_type => |array_type| { - const len = array_type.len + @boolToInt(array_type.sentinel != .none); + const len = array_type.len + @intFromBool(array_type.sentinel != .none); if (len == 0) return 0; const elem_ty = array_type.child.toType(); const elem_size = @max(elem_ty.abiAlignment(mod), elem_ty.abiSize(mod)); @@ -2182,7 +2182,7 @@ pub const Type = struct { } pub fn arrayLenIncludingSentinel(ty: Type, mod: *const Module) u64 { - return ty.arrayLen(mod) + @boolToInt(ty.sentinel(mod) != null); + return ty.arrayLen(mod) + @intFromBool(ty.sentinel(mod) != null); } pub fn vectorLen(ty: Type, mod: *const Module) u32 { @@ -2477,7 +2477,7 @@ pub const Type = struct { inline .array_type, .vector_type => |seq_type, seq_tag| { const has_sentinel = seq_tag == .array_type and seq_type.sentinel != .none; - if (seq_type.len + @boolToInt(has_sentinel) == 0) return (try mod.intern(.{ .aggregate = .{ + if (seq_type.len + @intFromBool(has_sentinel) == 0) return (try mod.intern(.{ .aggregate = .{ .ty = ty.toIntern(), .storage = .{ .elems = &.{} }, } })).toValue(); @@ -3540,7 +3540,7 @@ pub const Type = struct { if (max == 0) return 0; const base = std.math.log2(max); const upper = (@as(u64, 1) << @intCast(u6, base)) - 1; - return @intCast(u16, base + @boolToInt(upper < max)); + return @intCast(u16, base + @intFromBool(upper < max)); } /// This is only used for comptime asserts. Bump this number when you make a change diff --git a/src/value.zig b/src/value.zig index 8590aa8872..f348ce2edb 100644 --- a/src/value.zig +++ b/src/value.zig @@ -112,7 +112,7 @@ pub const Value = struct { return self.castTag(T.base_tag); } inline for (@typeInfo(Tag).Enum.fields) |field| { - const t = @intToEnum(Tag, field.value); + const t = @enumFromInt(Tag, field.value); if (self.legacy.ptr_otherwise.tag == t) { if (T == t.Type()) { return @fieldParentPtr(T, "base", self.legacy.ptr_otherwise); @@ -503,7 +503,7 @@ pub const Value = struct { return self.toIntern().toType(); } - pub fn enumToInt(val: Value, ty: Type, mod: *Module) Allocator.Error!Value { + pub fn intFromEnum(val: Value, ty: Type, mod: *Module) Allocator.Error!Value { const ip = &mod.intern_pool; return switch (ip.indexToKey(ip.typeOf(val.toIntern()))) { // Assume it is already an integer and return it directly. @@ -703,7 +703,7 @@ pub const Value = struct { switch (ty.zigTypeTag(mod)) { .Void => {}, .Bool => { - buffer[0] = @boolToInt(val.toBool()); + buffer[0] = @intFromBool(val.toBool()); }, .Int, .Enum => { const int_info = ty.intInfo(mod); @@ -836,7 +836,7 @@ pub const Value = struct { const bits = ty.intInfo(mod).bits; if (bits == 0) return; - switch (mod.intern_pool.indexToKey((try val.enumToInt(ty, mod)).toIntern()).int.storage) { + switch (mod.intern_pool.indexToKey((try val.intFromEnum(ty, mod)).toIntern()).int.storage) { inline .u64, .i64 => |int| std.mem.writeVarPackedInt(buffer, bit_offset, bits, int, endian), .big_int => |bigint| bigint.writePackedTwosComplement(buffer, bit_offset, bits, endian), else => unreachable, @@ -1170,10 +1170,10 @@ pub const Value = struct { if (T == f80) { @panic("TODO we can't lower this properly on non-x86 llvm backend yet"); } - return @intToFloat(T, x); + return @floatFromInt(T, x); }, - .lazy_align => |ty| @intToFloat(T, ty.toType().abiAlignment(mod)), - .lazy_size => |ty| @intToFloat(T, ty.toType().abiSize(mod)), + .lazy_align => |ty| @floatFromInt(T, ty.toType().abiAlignment(mod)), + .lazy_size => |ty| @floatFromInt(T, ty.toType().abiSize(mod)), }, .float => |float| switch (float.storage) { inline else => |x| @floatCast(T, x), @@ -1191,7 +1191,7 @@ pub const Value = struct { var i: usize = limbs.len; while (i != 0) { i -= 1; - const limb: f128 = @intToFloat(f128, limbs[i]); + const limb: f128 = @floatFromInt(f128, limbs[i]); result = @mulAdd(f128, base, result, limb); } if (positive) { @@ -1593,8 +1593,8 @@ pub const Value = struct { return a_type.eql(b_type, mod); }, .Enum => { - const a_val = try a.enumToInt(ty, mod); - const b_val = try b.enumToInt(ty, mod); + const a_val = try a.intFromEnum(ty, mod); + const b_val = try b.intFromEnum(ty, mod); const int_ty = ty.intTagType(mod); return eqlAdvanced(a_val, int_ty, b_val, int_ty, mod, opt_sema); }, @@ -2124,30 +2124,30 @@ pub const Value = struct { }; } - pub fn intToFloat(val: Value, arena: Allocator, int_ty: Type, float_ty: Type, mod: *Module) !Value { - return intToFloatAdvanced(val, arena, int_ty, float_ty, mod, null) catch |err| switch (err) { + pub fn floatFromInt(val: Value, arena: Allocator, int_ty: Type, float_ty: Type, mod: *Module) !Value { + return floatFromIntAdvanced(val, arena, int_ty, float_ty, mod, null) catch |err| switch (err) { error.OutOfMemory => return error.OutOfMemory, else => unreachable, }; } - pub fn intToFloatAdvanced(val: Value, arena: Allocator, int_ty: Type, float_ty: Type, mod: *Module, opt_sema: ?*Sema) !Value { + pub fn floatFromIntAdvanced(val: Value, arena: Allocator, int_ty: Type, float_ty: Type, mod: *Module, opt_sema: ?*Sema) !Value { if (int_ty.zigTypeTag(mod) == .Vector) { const result_data = try arena.alloc(InternPool.Index, int_ty.vectorLen(mod)); const scalar_ty = float_ty.scalarType(mod); for (result_data, 0..) |*scalar, i| { const elem_val = try val.elemValue(mod, i); - scalar.* = try (try intToFloatScalar(elem_val, scalar_ty, mod, opt_sema)).intern(scalar_ty, mod); + scalar.* = try (try floatFromIntScalar(elem_val, scalar_ty, mod, opt_sema)).intern(scalar_ty, mod); } return (try mod.intern(.{ .aggregate = .{ .ty = float_ty.toIntern(), .storage = .{ .elems = result_data }, } })).toValue(); } - return intToFloatScalar(val, float_ty, mod, opt_sema); + return floatFromIntScalar(val, float_ty, mod, opt_sema); } - pub fn intToFloatScalar(val: Value, float_ty: Type, mod: *Module, opt_sema: ?*Sema) !Value { + pub fn floatFromIntScalar(val: Value, float_ty: Type, mod: *Module, opt_sema: ?*Sema) !Value { return switch (mod.intern_pool.indexToKey(val.toIntern())) { .undef => (try mod.intern(.{ .undef = float_ty.toIntern() })).toValue(), .int => |int| switch (int.storage) { @@ -2155,30 +2155,30 @@ pub const Value = struct { const float = bigIntToFloat(big_int.limbs, big_int.positive); return mod.floatValue(float_ty, float); }, - inline .u64, .i64 => |x| intToFloatInner(x, float_ty, mod), + inline .u64, .i64 => |x| floatFromIntInner(x, float_ty, mod), .lazy_align => |ty| if (opt_sema) |sema| { - return intToFloatInner((try ty.toType().abiAlignmentAdvanced(mod, .{ .sema = sema })).scalar, float_ty, mod); + return floatFromIntInner((try ty.toType().abiAlignmentAdvanced(mod, .{ .sema = sema })).scalar, float_ty, mod); } else { - return intToFloatInner(ty.toType().abiAlignment(mod), float_ty, mod); + return floatFromIntInner(ty.toType().abiAlignment(mod), float_ty, mod); }, .lazy_size => |ty| if (opt_sema) |sema| { - return intToFloatInner((try ty.toType().abiSizeAdvanced(mod, .{ .sema = sema })).scalar, float_ty, mod); + return floatFromIntInner((try ty.toType().abiSizeAdvanced(mod, .{ .sema = sema })).scalar, float_ty, mod); } else { - return intToFloatInner(ty.toType().abiSize(mod), float_ty, mod); + return floatFromIntInner(ty.toType().abiSize(mod), float_ty, mod); }, }, else => unreachable, }; } - fn intToFloatInner(x: anytype, dest_ty: Type, mod: *Module) !Value { + fn floatFromIntInner(x: anytype, dest_ty: Type, mod: *Module) !Value { const target = mod.getTarget(); const storage: InternPool.Key.Float.Storage = switch (dest_ty.floatBits(target)) { - 16 => .{ .f16 = @intToFloat(f16, x) }, - 32 => .{ .f32 = @intToFloat(f32, x) }, - 64 => .{ .f64 = @intToFloat(f64, x) }, - 80 => .{ .f80 = @intToFloat(f80, x) }, - 128 => .{ .f128 = @intToFloat(f128, x) }, + 16 => .{ .f16 = @floatFromInt(f16, x) }, + 32 => .{ .f32 = @floatFromInt(f32, x) }, + 64 => .{ .f64 = @floatFromInt(f64, x) }, + 80 => .{ .f80 = @floatFromInt(f80, x) }, + 128 => .{ .f128 = @floatFromInt(f128, x) }, else => unreachable, }; return (try mod.intern(.{ .float = .{ @@ -2193,7 +2193,7 @@ pub const Value = struct { } const w_value = @fabs(scalar); - return @divFloor(@floatToInt(std.math.big.Limb, std.math.log2(w_value)), @typeInfo(std.math.big.Limb).Int.bits) + 1; + return @divFloor(@intFromFloat(std.math.big.Limb, std.math.log2(w_value)), @typeInfo(std.math.big.Limb).Int.bits) + 1; } pub const OverflowArithmeticResult = struct { @@ -2364,7 +2364,7 @@ pub const Value = struct { } return OverflowArithmeticResult{ - .overflow_bit = try mod.intValue(Type.u1, @boolToInt(overflowed)), + .overflow_bit = try mod.intValue(Type.u1, @intFromBool(overflowed)), .wrapped_result = try mod.intValue_big(ty, result_bigint.toConst()), }; } @@ -3177,7 +3177,7 @@ pub const Value = struct { result_bigint.truncate(result_bigint.toConst(), info.signedness, info.bits); } return OverflowArithmeticResult{ - .overflow_bit = try mod.intValue(Type.u1, @boolToInt(overflowed)), + .overflow_bit = try mod.intValue(Type.u1, @intFromBool(overflowed)), .wrapped_result = try mod.intValue_big(ty, result_bigint.toConst()), }; } diff --git a/test/behavior.zig b/test/behavior.zig index 017b5b4824..6e9435c49e 100644 --- a/test/behavior.zig +++ b/test/behavior.zig @@ -174,7 +174,7 @@ test { _ = @import("behavior/inline_switch.zig"); _ = @import("behavior/int128.zig"); _ = @import("behavior/int_comparison_elision.zig"); - _ = @import("behavior/inttoptr.zig"); + _ = @import("behavior/ptrfromint.zig"); _ = @import("behavior/ir_block_deps.zig"); _ = @import("behavior/lower_strlit_to_vector.zig"); _ = @import("behavior/math.zig"); diff --git a/test/behavior/align.zig b/test/behavior/align.zig index 4ce408e65d..d3e4d81250 100644 --- a/test/behavior/align.zig +++ b/test/behavior/align.zig @@ -24,7 +24,7 @@ test "slicing array of length 1 can not assume runtime index is always zero" { const slice = @as(*align(4) [1]u8, &foo)[runtime_index..]; try expect(@TypeOf(slice) == []u8); try expect(slice.len == 0); - try expect(@truncate(u2, @ptrToInt(slice.ptr) - 1) == 0); + try expect(@truncate(u2, @intFromPtr(slice.ptr) - 1) == 0); } test "default alignment allows unspecified in type syntax" { @@ -299,11 +299,11 @@ test "page aligned array on stack" { var number1: u8 align(16) = 42; var number2: u8 align(16) = 43; - try expect(@ptrToInt(&array[0]) & 0xFFF == 0); + try expect(@intFromPtr(&array[0]) & 0xFFF == 0); try expect(array[3] == 4); - try expect(@truncate(u4, @ptrToInt(&number1)) == 0); - try expect(@truncate(u4, @ptrToInt(&number2)) == 0); + try expect(@truncate(u4, @intFromPtr(&number1)) == 0); + try expect(@truncate(u4, @intFromPtr(&number2)) == 0); try expect(number1 == 42); try expect(number2 == 43); } @@ -518,7 +518,7 @@ test "struct field explicit alignment" { node.massive_byte = 100; try expect(node.massive_byte == 100); try comptime expect(@TypeOf(&node.massive_byte) == *align(64) u8); - try expect(@ptrToInt(&node.massive_byte) % 64 == 0); + try expect(@intFromPtr(&node.massive_byte) % 64 == 0); } test "align(@alignOf(T)) T does not force resolution of T" { @@ -561,7 +561,7 @@ test "align(N) on functions" { if (native_arch == .wasm32 or native_arch == .wasm64) return error.SkipZigTest; if (native_arch == .thumb) return error.SkipZigTest; - try expect((@ptrToInt(&overaligned_fn) & (0x1000 - 1)) == 0); + try expect((@intFromPtr(&overaligned_fn) & (0x1000 - 1)) == 0); } fn overaligned_fn() align(0x1000) i32 { return 42; @@ -578,7 +578,7 @@ test "comptime alloc alignment" { _ = bytes1; comptime var bytes2 align(256) = [_]u8{0}; - var bytes2_addr = @ptrToInt(&bytes2); + var bytes2_addr = @intFromPtr(&bytes2); try expect(bytes2_addr & 0xff == 0); } diff --git a/test/behavior/array.zig b/test/behavior/array.zig index cd4c81508a..9ef4a55b39 100644 --- a/test/behavior/array.zig +++ b/test/behavior/array.zig @@ -176,8 +176,8 @@ test "array with sentinels" { var arr: [3:0x55]u8 = undefined; // Make sure the sentinel pointer is pointing after the last element. if (!is_ct) { - const sentinel_ptr = @ptrToInt(&arr[3]); - const last_elem_ptr = @ptrToInt(&arr[2]); + const sentinel_ptr = @intFromPtr(&arr[3]); + const last_elem_ptr = @intFromPtr(&arr[2]); try expect((sentinel_ptr - last_elem_ptr) == 1); } // Make sure the sentinel is writeable. diff --git a/test/behavior/async_fn.zig b/test/behavior/async_fn.zig index 54609ac298..dcbe78b091 100644 --- a/test/behavior/async_fn.zig +++ b/test/behavior/async_fn.zig @@ -829,7 +829,7 @@ test "alignment of local variables in async functions" { var y: u8 = 123; _ = y; var x: u8 align(128) = 1; - try expect(@ptrToInt(&x) % 128 == 0); + try expect(@intFromPtr(&x) % 128 == 0); } }; try S.doTheTest(); @@ -1184,7 +1184,7 @@ test "using @TypeOf on a generic function call" { global_frame = @frame(); } const F = @TypeOf(async amain(x - 1)); - const frame = @intToPtr(*F, @ptrToInt(&buf)); + const frame = @ptrFromInt(*F, @intFromPtr(&buf)); return await @asyncCall(frame, {}, amain, .{x - 1}); } }; @@ -1212,7 +1212,7 @@ test "recursive call of await @asyncCall with struct return type" { global_frame = @frame(); } const F = @TypeOf(async amain(x - 1)); - const frame = @intToPtr(*F, @ptrToInt(&buf)); + const frame = @ptrFromInt(*F, @intFromPtr(&buf)); return await @asyncCall(frame, {}, amain, .{x - 1}); } diff --git a/test/behavior/bool.zig b/test/behavior/bool.zig index a2636ecf42..50a098c111 100644 --- a/test/behavior/bool.zig +++ b/test/behavior/bool.zig @@ -13,22 +13,22 @@ test "cast bool to int" { const t = true; const f = false; - try expectEqual(@as(u32, 1), @boolToInt(t)); - try expectEqual(@as(u32, 0), @boolToInt(f)); - try expectEqual(-1, @bitCast(i1, @boolToInt(t))); - try expectEqual(0, @bitCast(i1, @boolToInt(f))); - try expectEqual(u1, @TypeOf(@boolToInt(t))); - try expectEqual(u1, @TypeOf(@boolToInt(f))); - try nonConstCastBoolToInt(t, f); + try expectEqual(@as(u32, 1), @intFromBool(t)); + try expectEqual(@as(u32, 0), @intFromBool(f)); + try expectEqual(-1, @bitCast(i1, @intFromBool(t))); + try expectEqual(0, @bitCast(i1, @intFromBool(f))); + try expectEqual(u1, @TypeOf(@intFromBool(t))); + try expectEqual(u1, @TypeOf(@intFromBool(f))); + try nonConstCastIntFromBool(t, f); } -fn nonConstCastBoolToInt(t: bool, f: bool) !void { - try expectEqual(@as(u32, 1), @boolToInt(t)); - try expectEqual(@as(u32, 0), @boolToInt(f)); - try expectEqual(@as(i1, -1), @bitCast(i1, @boolToInt(t))); - try expectEqual(@as(i1, 0), @bitCast(i1, @boolToInt(f))); - try expectEqual(u1, @TypeOf(@boolToInt(t))); - try expectEqual(u1, @TypeOf(@boolToInt(f))); +fn nonConstCastIntFromBool(t: bool, f: bool) !void { + try expectEqual(@as(u32, 1), @intFromBool(t)); + try expectEqual(@as(u32, 0), @intFromBool(f)); + try expectEqual(@as(i1, -1), @bitCast(i1, @intFromBool(t))); + try expectEqual(@as(i1, 0), @bitCast(i1, @intFromBool(f))); + try expectEqual(u1, @TypeOf(@intFromBool(t))); + try expectEqual(u1, @TypeOf(@intFromBool(f))); } test "bool cmp" { diff --git a/test/behavior/bugs/10138.zig b/test/behavior/bugs/10138.zig index 1ea2954777..1c8ff7cf7c 100644 --- a/test/behavior/bugs/10138.zig +++ b/test/behavior/bugs/10138.zig @@ -17,7 +17,7 @@ fn open() usize { } fn write(fd: usize, a: [*]const u8, len: usize) usize { - return syscall4(.WRITE, fd, @ptrToInt(a), len); + return syscall4(.WRITE, fd, @intFromPtr(a), len); } fn syscall4(n: enum { WRITE }, a: usize, b: usize, c: usize) usize { diff --git a/test/behavior/bugs/12142.zig b/test/behavior/bugs/12142.zig index 4b9a4d9fa1..ca66b1f8f5 100644 --- a/test/behavior/bugs/12142.zig +++ b/test/behavior/bugs/12142.zig @@ -15,7 +15,7 @@ const Letter = enum(u8) { }; fn letter(e: Letter) u8 { - return @enumToInt(e); + return @intFromEnum(e); } test { diff --git a/test/behavior/bugs/12450.zig b/test/behavior/bugs/12450.zig index 368f055d05..db91529051 100644 --- a/test/behavior/bugs/12450.zig +++ b/test/behavior/bugs/12450.zig @@ -18,6 +18,6 @@ test { var f1: *align(16) Foo = @alignCast(16, @ptrCast(*align(1) Foo, &buffer[0])); try expect(@typeInfo(@TypeOf(f1)).Pointer.alignment == 16); - try expect(@ptrToInt(f1) == @ptrToInt(&f1.a)); + try expect(@intFromPtr(f1) == @intFromPtr(&f1.a)); try expect(@typeInfo(@TypeOf(&f1.a)).Pointer.alignment == 16); } diff --git a/test/behavior/bugs/12680_other_file.zig b/test/behavior/bugs/12680_other_file.zig index 32b9dc1b27..5bcc9e1c16 100644 --- a/test/behavior/bugs/12680_other_file.zig +++ b/test/behavior/bugs/12680_other_file.zig @@ -1,6 +1,6 @@ // export this function twice pub export fn testFunc() callconv(.C) usize { - return @ptrToInt(&testFunc); + return @intFromPtr(&testFunc); } comptime { diff --git a/test/behavior/bugs/12723.zig b/test/behavior/bugs/12723.zig index 81e276218a..abecf89025 100644 --- a/test/behavior/bugs/12723.zig +++ b/test/behavior/bugs/12723.zig @@ -3,6 +3,6 @@ const expect = @import("std").testing.expect; test "Non-exhaustive enum backed by comptime_int" { const E = enum(comptime_int) { a, b, c, _ }; comptime var e: E = .a; - e = @intToEnum(E, 378089457309184723749); - try expect(@enumToInt(e) == 378089457309184723749); + e = @enumFromInt(E, 378089457309184723749); + try expect(@intFromEnum(e) == 378089457309184723749); } diff --git a/test/behavior/bugs/1741.zig b/test/behavior/bugs/1741.zig index 6c36ba5e15..b4cf5577de 100644 --- a/test/behavior/bugs/1741.zig +++ b/test/behavior/bugs/1741.zig @@ -8,5 +8,5 @@ test "fixed" { if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; const x: f32 align(128) = 12.34; - try std.testing.expect(@ptrToInt(&x) % 128 == 0); + try std.testing.expect(@intFromPtr(&x) % 128 == 0); } diff --git a/test/behavior/bugs/9584.zig b/test/behavior/bugs/9584.zig index 49139db899..6f3223c362 100644 --- a/test/behavior/bugs/9584.zig +++ b/test/behavior/bugs/9584.zig @@ -35,7 +35,7 @@ pub fn a( _ = flag_a; // With this bug present, `flag_b` would actually contain the value 17. // Note: this bug only presents itself on debug mode. - const flag_b_byte: u8 = @boolToInt(flag_b); + const flag_b_byte: u8 = @intFromBool(flag_b); try std.testing.expect(flag_b_byte == 1); } diff --git a/test/behavior/builtin_functions_returning_void_or_noreturn.zig b/test/behavior/builtin_functions_returning_void_or_noreturn.zig index ea53658888..ae369c4e9d 100644 --- a/test/behavior/builtin_functions_returning_void_or_noreturn.zig +++ b/test/behavior/builtin_functions_returning_void_or_noreturn.zig @@ -17,8 +17,8 @@ test { try testing.expectEqual(void, @TypeOf(@breakpoint())); try testing.expectEqual({}, @export(x, .{ .name = "x" })); try testing.expectEqual({}, @fence(.Acquire)); - try testing.expectEqual({}, @memcpy(@intToPtr([*]u8, 1)[0..0], @intToPtr([*]u8, 1)[0..0])); - try testing.expectEqual({}, @memset(@intToPtr([*]u8, 1)[0..0], undefined)); + try testing.expectEqual({}, @memcpy(@ptrFromInt([*]u8, 1)[0..0], @ptrFromInt([*]u8, 1)[0..0])); + try testing.expectEqual({}, @memset(@ptrFromInt([*]u8, 1)[0..0], undefined)); try testing.expectEqual(noreturn, @TypeOf(if (true) @panic("") else {})); try testing.expectEqual({}, @prefetch(&val, .{})); try testing.expectEqual({}, @setAlignStack(16)); diff --git a/test/behavior/call.zig b/test/behavior/call.zig index 64eca08c82..627df37e9b 100644 --- a/test/behavior/call.zig +++ b/test/behavior/call.zig @@ -364,11 +364,11 @@ test "Enum constructed by @Type passed as generic argument" { alive: bool, }); fn foo(comptime a: E, b: u32) !void { - try expect(@enumToInt(a) == b); + try expect(@intFromEnum(a) == b); } }; inline for (@typeInfo(S.E).Enum.fields, 0..) |_, i| { - try S.foo(@intToEnum(S.E, i), i); + try S.foo(@enumFromInt(S.E, i), i); } } diff --git a/test/behavior/cast.zig b/test/behavior/cast.zig index 5123e190b6..d51d864ea1 100644 --- a/test/behavior/cast.zig +++ b/test/behavior/cast.zig @@ -10,14 +10,14 @@ const native_endian = builtin.target.cpu.arch.endian(); test "int to ptr cast" { const x = @as(usize, 13); - const y = @intToPtr(*u8, x); - const z = @ptrToInt(y); + const y = @ptrFromInt(*u8, x); + const z = @intFromPtr(y); try expect(z == 13); } test "integer literal to pointer cast" { - const vga_mem = @intToPtr(*u16, 0xB8000); - try expect(@ptrToInt(vga_mem) == 0xB8000); + const vga_mem = @ptrFromInt(*u16, 0xB8000); + try expect(@intFromPtr(vga_mem) == 0xB8000); } test "peer type resolution: ?T and T" { @@ -66,37 +66,37 @@ test "implicit cast comptime_int to comptime_float" { try expect(2 == 2.0); } -test "comptime_int @intToFloat" { +test "comptime_int @floatFromInt" { { - const result = @intToFloat(f16, 1234); + const result = @floatFromInt(f16, 1234); try expect(@TypeOf(result) == f16); try expect(result == 1234.0); } { - const result = @intToFloat(f32, 1234); + const result = @floatFromInt(f32, 1234); try expect(@TypeOf(result) == f32); try expect(result == 1234.0); } { - const result = @intToFloat(f64, 1234); + const result = @floatFromInt(f64, 1234); try expect(@TypeOf(result) == f64); try expect(result == 1234.0); } { - const result = @intToFloat(f128, 1234); + const result = @floatFromInt(f128, 1234); try expect(@TypeOf(result) == f128); try expect(result == 1234.0); } // big comptime_int (> 64 bits) to f128 conversion { - const result = @intToFloat(f128, 0x1_0000_0000_0000_0000); + const result = @floatFromInt(f128, 0x1_0000_0000_0000_0000); try expect(@TypeOf(result) == f128); try expect(result == 0x1_0000_0000_0000_0000.0); } } -test "@intToFloat" { +test "@floatFromInt" { if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO @@ -107,8 +107,8 @@ test "@intToFloat" { } fn testIntToFloat(k: i32) !void { - const f = @intToFloat(f32, k); - const i = @floatToInt(i32, f); + const f = @floatFromInt(f32, k); + const i = @intFromFloat(i32, f); try expect(i == k); } }; @@ -116,7 +116,7 @@ test "@intToFloat" { try comptime S.doTheTest(); } -test "@intToFloat(f80)" { +test "@floatFromInt(f80)" { if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO @@ -131,8 +131,8 @@ test "@intToFloat(f80)" { fn testIntToFloat(comptime Int: type, k: Int) !void { @setRuntimeSafety(false); // TODO - const f = @intToFloat(f80, k); - const i = @floatToInt(Int, f); + const f = @floatFromInt(f80, k); + const i = @intFromFloat(Int, f); try expect(i == k); } }; @@ -152,28 +152,28 @@ test "@intToFloat(f80)" { try comptime S.doTheTest(i256); } -test "@floatToInt" { +test "@intFromFloat" { if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO - try testFloatToInts(); - try comptime testFloatToInts(); + try testIntFromFloats(); + try comptime testIntFromFloats(); } -fn testFloatToInts() !void { +fn testIntFromFloats() !void { const x = @as(i32, 1e4); try expect(x == 10000); - const y = @floatToInt(i32, @as(f32, 1e4)); + const y = @intFromFloat(i32, @as(f32, 1e4)); try expect(y == 10000); - try expectFloatToInt(f32, 255.1, u8, 255); - try expectFloatToInt(f32, 127.2, i8, 127); - try expectFloatToInt(f32, -128.2, i8, -128); + try expectIntFromFloat(f32, 255.1, u8, 255); + try expectIntFromFloat(f32, 127.2, i8, 127); + try expectIntFromFloat(f32, -128.2, i8, -128); } -fn expectFloatToInt(comptime F: type, f: F, comptime I: type, i: I) !void { - try expect(@floatToInt(I, f) == i); +fn expectIntFromFloat(comptime F: type, f: F, comptime I: type, i: I) !void { + try expect(@intFromFloat(I, f) == i); } test "implicitly cast indirect pointer to maybe-indirect pointer" { @@ -280,9 +280,9 @@ test "*usize to *void" { v.* = {}; } -test "@intToEnum passed a comptime_int to an enum with one item" { +test "@enumFromInt passed a comptime_int to an enum with one item" { const E = enum { A }; - const x = @intToEnum(E, 0); + const x = @enumFromInt(E, 0); try expect(x == E.A); } @@ -420,8 +420,8 @@ test "explicit cast from integer to error type" { try comptime testCastIntToErr(error.ItBroke); } fn testCastIntToErr(err: anyerror) !void { - const x = @errorToInt(err); - const y = @intToError(x); + const x = @intFromError(err); + const y = @errorFromInt(x); try expect(error.ItBroke == y); } @@ -1093,15 +1093,15 @@ test "peer type resolve array pointer and unknown pointer" { test "comptime float casts" { if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; - const a = @intToFloat(comptime_float, 1); + const a = @floatFromInt(comptime_float, 1); try expect(a == 1); try expect(@TypeOf(a) == comptime_float); - const b = @floatToInt(comptime_int, 2); + const b = @intFromFloat(comptime_int, 2); try expect(b == 2); try expect(@TypeOf(b) == comptime_int); - try expectFloatToInt(comptime_int, 1234, i16, 1234); - try expectFloatToInt(comptime_float, 12.3, comptime_int, 12); + try expectIntFromFloat(comptime_int, 1234, i16, 1234); + try expectIntFromFloat(comptime_float, 12.3, comptime_int, 12); } test "pointer reinterpret const float to int" { @@ -1146,11 +1146,11 @@ test "compile time int to ptr of function" { // On some architectures function pointers must be aligned. const hardcoded_fn_addr = maxInt(usize) & ~@as(usize, 0xf); -pub const FUNCTION_CONSTANT = @intToPtr(PFN_void, hardcoded_fn_addr); +pub const FUNCTION_CONSTANT = @ptrFromInt(PFN_void, hardcoded_fn_addr); pub const PFN_void = *const fn (*anyopaque) callconv(.C) void; fn foobar(func: PFN_void) !void { - try std.testing.expect(@ptrToInt(func) == hardcoded_fn_addr); + try std.testing.expect(@intFromPtr(func) == hardcoded_fn_addr); } test "implicit ptr to *anyopaque" { @@ -1285,11 +1285,11 @@ test "implicit cast *[0]T to E![]const u8" { var global_array: [4]u8 = undefined; test "cast from array reference to fn: comptime fn ptr" { const f = @ptrCast(*align(1) const fn () callconv(.C) void, &global_array); - try expect(@ptrToInt(f) == @ptrToInt(&global_array)); + try expect(@intFromPtr(f) == @intFromPtr(&global_array)); } test "cast from array reference to fn: runtime fn ptr" { var f = @ptrCast(*align(1) const fn () callconv(.C) void, &global_array); - try expect(@ptrToInt(f) == @ptrToInt(&global_array)); + try expect(@intFromPtr(f) == @intFromPtr(&global_array)); } test "*const [N]null u8 to ?[]const u8" { @@ -1500,19 +1500,19 @@ test "coerce between pointers of compatible differently-named floats" { } test "peer type resolution of const and non-const pointer to array" { - const a = @intToPtr(*[1024]u8, 42); - const b = @intToPtr(*const [1024]u8, 42); + const a = @ptrFromInt(*[1024]u8, 42); + const b = @ptrFromInt(*const [1024]u8, 42); try std.testing.expect(@TypeOf(a, b) == *const [1024]u8); try std.testing.expect(a == b); } -test "floatToInt to zero-bit int" { +test "intFromFloat to zero-bit int" { if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO const a: f32 = 0.0; - try comptime std.testing.expect(@floatToInt(u0, a) == 0); + try comptime std.testing.expect(@intFromFloat(u0, a) == 0); } test "peer type resolution of function pointer and function body" { @@ -1560,9 +1560,9 @@ test "optional pointer coerced to optional allowzero pointer" { var p: ?*u32 = undefined; var q: ?*allowzero u32 = undefined; - p = @intToPtr(*u32, 4); + p = @ptrFromInt(*u32, 4); q = p; - try expect(@ptrToInt(q.?) == 4); + try expect(@intFromPtr(q.?) == 4); } test "single item pointer to pointer to array to slice" { @@ -1623,8 +1623,8 @@ test "peer type resolution: const sentinel slice and mutable non-sentinel slice" const S = struct { fn doTheTest(comptime T: type, comptime s: T) !void { - var a: [:s]const T = @intToPtr(*const [2:s]T, 0x1000); - var b: []T = @intToPtr(*[3]T, 0x2000); + var a: [:s]const T = @ptrFromInt(*const [2:s]T, 0x1000); + var b: []T = @ptrFromInt(*[3]T, 0x2000); comptime assert(@TypeOf(a, b) == []const T); comptime assert(@TypeOf(b, a) == []const T); @@ -1634,8 +1634,8 @@ test "peer type resolution: const sentinel slice and mutable non-sentinel slice" const R = @TypeOf(r1); - try expectEqual(@as(R, @intToPtr(*const [2:s]T, 0x1000)), r1); - try expectEqual(@as(R, @intToPtr(*const [3]T, 0x2000)), r2); + try expectEqual(@as(R, @ptrFromInt(*const [2:s]T, 0x1000)), r1); + try expectEqual(@as(R, @ptrFromInt(*const [3]T, 0x2000)), r2); } }; @@ -1815,7 +1815,7 @@ test "peer type resolution: three-way resolution combines error set and optional const E = error{Foo}; var a: E = error.Foo; - var b: *const [5:0]u8 = @intToPtr(*const [5:0]u8, 0x1000); + var b: *const [5:0]u8 = @ptrFromInt(*const [5:0]u8, 0x1000); var c: ?[*:0]u8 = null; comptime assert(@TypeOf(a, b, c) == E!?[*:0]const u8); comptime assert(@TypeOf(a, c, b) == E!?[*:0]const u8); @@ -1844,7 +1844,7 @@ test "peer type resolution: three-way resolution combines error set and optional const T = @TypeOf(r1); try expectEqual(@as(T, error.Foo), r1); - try expectEqual(@as(T, @intToPtr([*:0]u8, 0x1000)), r2); + try expectEqual(@as(T, @ptrFromInt([*:0]u8, 0x1000)), r2); try expectEqual(@as(T, null), r3); } diff --git a/test/behavior/comptime_memory.zig b/test/behavior/comptime_memory.zig index 646433a5c0..ade0f0dc42 100644 --- a/test/behavior/comptime_memory.zig +++ b/test/behavior/comptime_memory.zig @@ -192,9 +192,9 @@ test "basic pointer preservation" { } comptime { - const lazy_address = @ptrToInt(&imports.global_u32); - try testing.expectEqual(@ptrToInt(&imports.global_u32), lazy_address); - try testing.expectEqual(&imports.global_u32, @intToPtr(*u32, lazy_address)); + const lazy_address = @intFromPtr(&imports.global_u32); + try testing.expectEqual(@intFromPtr(&imports.global_u32), lazy_address); + try testing.expectEqual(&imports.global_u32, @ptrFromInt(*u32, lazy_address)); } } @@ -251,7 +251,7 @@ test "shuffle chunks of linker value" { return error.SkipZigTest; } - const lazy_address = @ptrToInt(&imports.global_u32); + const lazy_address = @intFromPtr(&imports.global_u32); const shuffled1_rt = shuffle(lazy_address, Bits, ShuffledBits); const unshuffled1_rt = shuffle(shuffled1_rt, ShuffledBits, Bits); try testing.expectEqual(lazy_address, unshuffled1_rt); @@ -271,8 +271,8 @@ test "dance on linker values" { comptime { var arr: [2]usize = undefined; - arr[0] = @ptrToInt(&imports.global_u32); - arr[1] = @ptrToInt(&imports.global_u32); + arr[0] = @intFromPtr(&imports.global_u32); + arr[1] = @intFromPtr(&imports.global_u32); const weird_ptr = @ptrCast([*]Bits, @ptrCast([*]u8, &arr) + @sizeOf(usize) - 3); try doTypePunBitsTest(&weird_ptr[0]); @@ -290,7 +290,7 @@ test "dance on linker values" { rebuilt_bytes[i] = arr_bytes[1][i]; } - try testing.expectEqual(&imports.global_u32, @intToPtr(*u32, @bitCast(usize, rebuilt_bytes))); + try testing.expectEqual(&imports.global_u32, @ptrFromInt(*u32, @bitCast(usize, rebuilt_bytes))); } } @@ -309,14 +309,14 @@ test "offset array ptr by element size" { .{ .x = bigToNativeEndian(u32, 0x03070b0f) }, }; - const address = @ptrToInt(&arr); - try testing.expectEqual(@ptrToInt(&arr[0]), address); - try testing.expectEqual(@ptrToInt(&arr[0]) + 10, address + 10); - try testing.expectEqual(@ptrToInt(&arr[1]), address + @sizeOf(VirtualStruct)); - try testing.expectEqual(@ptrToInt(&arr[2]), address + 2 * @sizeOf(VirtualStruct)); - try testing.expectEqual(@ptrToInt(&arr[3]), address + @sizeOf(VirtualStruct) * 3); + const address = @intFromPtr(&arr); + try testing.expectEqual(@intFromPtr(&arr[0]), address); + try testing.expectEqual(@intFromPtr(&arr[0]) + 10, address + 10); + try testing.expectEqual(@intFromPtr(&arr[1]), address + @sizeOf(VirtualStruct)); + try testing.expectEqual(@intFromPtr(&arr[2]), address + 2 * @sizeOf(VirtualStruct)); + try testing.expectEqual(@intFromPtr(&arr[3]), address + @sizeOf(VirtualStruct) * 3); - const secondElement = @intToPtr(*VirtualStruct, @ptrToInt(&arr[0]) + 2 * @sizeOf(VirtualStruct)); + const secondElement = @ptrFromInt(*VirtualStruct, @intFromPtr(&arr[0]) + 2 * @sizeOf(VirtualStruct)); try testing.expectEqual(bigToNativeEndian(u32, 0x02060a0e), secondElement.x); } } @@ -331,18 +331,18 @@ test "offset instance by field size" { const VirtualStruct = struct { x: u32, y: u32, z: u32, w: u32 }; var inst = VirtualStruct{ .x = 0, .y = 1, .z = 2, .w = 3 }; - var ptr = @ptrToInt(&inst); + var ptr = @intFromPtr(&inst); ptr -= 4; ptr += @offsetOf(VirtualStruct, "x"); - try testing.expectEqual(@as(u32, 0), @intToPtr([*]u32, ptr)[1]); + try testing.expectEqual(@as(u32, 0), @ptrFromInt([*]u32, ptr)[1]); ptr -= @offsetOf(VirtualStruct, "x"); ptr += @offsetOf(VirtualStruct, "y"); - try testing.expectEqual(@as(u32, 1), @intToPtr([*]u32, ptr)[1]); + try testing.expectEqual(@as(u32, 1), @ptrFromInt([*]u32, ptr)[1]); ptr = ptr - @offsetOf(VirtualStruct, "y") + @offsetOf(VirtualStruct, "z"); - try testing.expectEqual(@as(u32, 2), @intToPtr([*]u32, ptr)[1]); - ptr = @ptrToInt(&inst.z) - 4 - @offsetOf(VirtualStruct, "z"); + try testing.expectEqual(@as(u32, 2), @ptrFromInt([*]u32, ptr)[1]); + ptr = @intFromPtr(&inst.z) - 4 - @offsetOf(VirtualStruct, "z"); ptr += @offsetOf(VirtualStruct, "w"); - try testing.expectEqual(@as(u32, 3), @intToPtr(*u32, ptr + 4).*); + try testing.expectEqual(@as(u32, 3), @ptrFromInt(*u32, ptr + 4).*); } } diff --git a/test/behavior/enum.zig b/test/behavior/enum.zig index a795d5f4b8..12926800e3 100644 --- a/test/behavior/enum.zig +++ b/test/behavior/enum.zig @@ -8,7 +8,7 @@ const Tag = std.meta.Tag; const Number = enum { Zero, One, Two, Three, Four }; fn shouldEqual(n: Number, expected: u3) !void { - try expect(@enumToInt(n) == expected); + try expect(@intFromEnum(n) == expected); } test "enum to int" { @@ -20,7 +20,7 @@ test "enum to int" { } fn testIntToEnumEval(x: i32) !void { - try expect(@intToEnum(IntToEnumNumber, x) == IntToEnumNumber.Three); + try expect(@enumFromInt(IntToEnumNumber, x) == IntToEnumNumber.Three); } const IntToEnumNumber = enum { Zero, One, Two, Three, Four }; @@ -597,7 +597,7 @@ const MultipleChoice = enum(u32) { }; fn testEnumWithSpecifiedTagValues(x: MultipleChoice) !void { - try expect(@enumToInt(x) == 60); + try expect(@intFromEnum(x) == 60); try expect(1234 == switch (x) { MultipleChoice.A => 1, MultipleChoice.B => 2, @@ -629,7 +629,7 @@ test "non-exhaustive enum" { .b => true, _ => false, }); - e = @intToEnum(E, 12); + e = @enumFromInt(E, 12); try expect(switch (e) { .a => false, .b => false, @@ -648,10 +648,10 @@ test "non-exhaustive enum" { }); try expect(@typeInfo(E).Enum.fields.len == 2); - e = @intToEnum(E, 12); - try expect(@enumToInt(e) == 12); - e = @intToEnum(E, y); - try expect(@enumToInt(e) == 52); + e = @enumFromInt(E, 12); + try expect(@intFromEnum(e) == 12); + e = @enumFromInt(E, y); + try expect(@intFromEnum(e) == 52); try expect(@typeInfo(E).Enum.is_exhaustive == false); } }; @@ -666,11 +666,11 @@ test "empty non-exhaustive enum" { const E = enum(u8) { _ }; fn doTheTest(y: u8) !void { - var e = @intToEnum(E, y); + var e = @enumFromInt(E, y); try expect(switch (e) { _ => true, }); - try expect(@enumToInt(e) == y); + try expect(@intFromEnum(e) == y); try expect(@typeInfo(E).Enum.fields.len == 0); try expect(@typeInfo(E).Enum.is_exhaustive == false); @@ -693,7 +693,7 @@ test "single field non-exhaustive enum" { .a => true, _ => false, }); - e = @intToEnum(E, 12); + e = @enumFromInt(E, 12); try expect(switch (e) { .a => false, _ => true, @@ -709,7 +709,7 @@ test "single field non-exhaustive enum" { else => false, }); - try expect(@enumToInt(@intToEnum(E, y)) == y); + try expect(@intFromEnum(@enumFromInt(E, y)) == y); try expect(@typeInfo(E).Enum.fields.len == 1); try expect(@typeInfo(E).Enum.is_exhaustive == false); } @@ -725,7 +725,7 @@ const EnumWithTagValues = enum(u4) { D = 1 << 3, }; test "enum with tag values don't require parens" { - try expect(@enumToInt(EnumWithTagValues.C) == 0b0100); + try expect(@intFromEnum(EnumWithTagValues.C) == 0b0100); } const MultipleChoice2 = enum(u32) { @@ -741,8 +741,8 @@ const MultipleChoice2 = enum(u32) { }; test "cast integer literal to enum" { - try expect(@intToEnum(MultipleChoice2, 0) == MultipleChoice2.Unspecified1); - try expect(@intToEnum(MultipleChoice2, 40) == MultipleChoice2.B); + try expect(@enumFromInt(MultipleChoice2, 0) == MultipleChoice2.Unspecified1); + try expect(@enumFromInt(MultipleChoice2, 40) == MultipleChoice2.B); } test "enum with specified and unspecified tag values" { @@ -754,7 +754,7 @@ test "enum with specified and unspecified tag values" { } fn testEnumWithSpecifiedAndUnspecifiedTagValues(x: MultipleChoice2) !void { - try expect(@enumToInt(x) == 1000); + try expect(@intFromEnum(x) == 1000); try expect(1234 == switch (x) { MultipleChoice2.A => 1, MultipleChoice2.B => 2, @@ -790,7 +790,7 @@ test "casting enum to its tag type" { } fn testCastEnumTag(value: Small2) !void { - try expect(@enumToInt(value) == 1); + try expect(@intFromEnum(value) == 1); } test "enum with 1 field but explicit tag type should still have the tag type" { @@ -807,27 +807,27 @@ test "signed integer as enum tag" { A2 = 1, }; - try expect(@enumToInt(SignedEnum.A0) == -1); - try expect(@enumToInt(SignedEnum.A1) == 0); - try expect(@enumToInt(SignedEnum.A2) == 1); + try expect(@intFromEnum(SignedEnum.A0) == -1); + try expect(@intFromEnum(SignedEnum.A1) == 0); + try expect(@intFromEnum(SignedEnum.A2) == 1); } test "enum with one member and custom tag type" { const E = enum(u2) { One, }; - try expect(@enumToInt(E.One) == 0); + try expect(@intFromEnum(E.One) == 0); const E2 = enum(u2) { One = 2, }; - try expect(@enumToInt(E2.One) == 2); + try expect(@intFromEnum(E2.One) == 2); } -test "enum with one member and u1 tag type @enumToInt" { +test "enum with one member and u1 tag type @intFromEnum" { const Enum = enum(u1) { Test, }; - try expect(@enumToInt(Enum.Test) == 0); + try expect(@intFromEnum(Enum.Test) == 0); } test "enum with comptime_int tag type" { @@ -901,9 +901,9 @@ test "enum value allocation" { A2, }; - try expect(@enumToInt(LargeEnum.A0) == 0x80000000); - try expect(@enumToInt(LargeEnum.A1) == 0x80000001); - try expect(@enumToInt(LargeEnum.A2) == 0x80000002); + try expect(@intFromEnum(LargeEnum.A0) == 0x80000000); + try expect(@intFromEnum(LargeEnum.A1) == 0x80000001); + try expect(@intFromEnum(LargeEnum.A2) == 0x80000002); } test "enum literal casting to tagged union" { @@ -1183,7 +1183,7 @@ test "Non-exhaustive enum with nonstandard int size behaves correctly" { test "runtime int to enum with one possible value" { const E = enum { one }; var runtime: usize = 0; - if (@intToEnum(E, runtime) != .one) { + if (@enumFromInt(E, runtime) != .one) { @compileError("test failed"); } } @@ -1194,6 +1194,6 @@ test "enum tag from a local variable" { return enum(Inner) { _ }; } }; - const i = @intToEnum(S.Int(u32), 0); - try std.testing.expect(@enumToInt(i) == 0); + const i = @enumFromInt(S.Int(u32), 0); + try std.testing.expect(@intFromEnum(i) == 0); } diff --git a/test/behavior/error.zig b/test/behavior/error.zig index c61cd70e6b..14b0eca030 100644 --- a/test/behavior/error.zig +++ b/test/behavior/error.zig @@ -16,8 +16,8 @@ fn expectError(expected_err: anyerror, observed_err_union: anytype) !void { } test "error values" { - const a = @errorToInt(error.err1); - const b = @errorToInt(error.err2); + const a = @intFromError(error.err1); + const b = @intFromError(error.err2); try expect(a != b); } @@ -259,14 +259,14 @@ fn testComptimeTestErrorEmptySet(x: EmptyErrorSet!i32) !void { } test "comptime err to int of error set with only 1 possible value" { - testErrToIntWithOnePossibleValue(error.A, @errorToInt(error.A)); - comptime testErrToIntWithOnePossibleValue(error.A, @errorToInt(error.A)); + testErrToIntWithOnePossibleValue(error.A, @intFromError(error.A)); + comptime testErrToIntWithOnePossibleValue(error.A, @intFromError(error.A)); } fn testErrToIntWithOnePossibleValue( x: error{A}, comptime value: u32, ) void { - if (@errorToInt(x) != value) { + if (@intFromError(x) != value) { @compileError("bad"); } } diff --git a/test/behavior/eval.zig b/test/behavior/eval.zig index 2c2f1d72ff..85dc5e29b5 100644 --- a/test/behavior/eval.zig +++ b/test/behavior/eval.zig @@ -1372,7 +1372,7 @@ test "lazy value is resolved as slice operand" { const ptr1 = a[0..@sizeOf(A)]; const ptr2 = @ptrCast([*]u8, &a)[0..@sizeOf(A)]; - try expect(@ptrToInt(ptr1) == @ptrToInt(ptr2)); + try expect(@intFromPtr(ptr1) == @intFromPtr(ptr2)); try expect(ptr1.len == ptr2.len); } diff --git a/test/behavior/export.zig b/test/behavior/export.zig index 6123aa593b..4928e86725 100644 --- a/test/behavior/export.zig +++ b/test/behavior/export.zig @@ -7,7 +7,7 @@ const builtin = @import("builtin"); // can't really run this test but we can make sure it has no compile error // and generates code -const vram = @intToPtr([*]volatile u8, 0x20000000)[0..0x8000]; +const vram = @ptrFromInt([*]volatile u8, 0x20000000)[0..0x8000]; export fn writeToVRam() void { vram[0] = 'X'; } diff --git a/test/behavior/export_self_referential_type_info.zig b/test/behavior/export_self_referential_type_info.zig index 0982985cee..1b1bb35e5b 100644 --- a/test/behavior/export_self_referential_type_info.zig +++ b/test/behavior/export_self_referential_type_info.zig @@ -1 +1 @@ -export const self_referential_type_info: c_int = @boolToInt(@typeInfo(@This()).Struct.is_tuple); +export const self_referential_type_info: c_int = @intFromBool(@typeInfo(@This()).Struct.is_tuple); diff --git a/test/behavior/floatop.zig b/test/behavior/floatop.zig index 15033d5515..56f3885a4a 100644 --- a/test/behavior/floatop.zig +++ b/test/behavior/floatop.zig @@ -89,12 +89,12 @@ fn testDifferentSizedFloatComparisons() !void { // } //} -test "negative f128 floatToInt at compile-time" { +test "negative f128 intFromFloat at compile-time" { if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO const a: f128 = -2; - var b = @floatToInt(i64, a); + var b = @intFromFloat(i64, a); try expect(@as(i64, -2) == b); } diff --git a/test/behavior/fn_in_struct_in_comptime.zig b/test/behavior/fn_in_struct_in_comptime.zig index a7d8e779cc..b31b377c04 100644 --- a/test/behavior/fn_in_struct_in_comptime.zig +++ b/test/behavior/fn_in_struct_in_comptime.zig @@ -5,7 +5,7 @@ fn get_foo() fn (*u8) usize { comptime { return struct { fn func(ptr: *u8) usize { - var u = @ptrToInt(ptr); + var u = @intFromPtr(ptr); return u; } }.func; @@ -14,5 +14,5 @@ fn get_foo() fn (*u8) usize { test "define a function in an anonymous struct in comptime" { const foo = get_foo(); - try expect(foo(@intToPtr(*u8, 12345)) == 12345); + try expect(foo(@ptrFromInt(*u8, 12345)) == 12345); } diff --git a/test/behavior/generics.zig b/test/behavior/generics.zig index 7f22f63045..f0c8516f67 100644 --- a/test/behavior/generics.zig +++ b/test/behavior/generics.zig @@ -267,7 +267,7 @@ test "generic function instantiation turns into comptime call" { .Enum => std.builtin.Type.EnumField, else => void, } { - return @typeInfo(T).Enum.fields[@enumToInt(field)]; + return @typeInfo(T).Enum.fields[@intFromEnum(field)]; } pub fn FieldEnum(comptime T: type) type { @@ -425,10 +425,10 @@ test "null sentinel pointer passed as generic argument" { const S = struct { fn doTheTest(a: anytype) !void { - try std.testing.expect(@ptrToInt(a) == 8); + try std.testing.expect(@intFromPtr(a) == 8); } }; - try S.doTheTest((@intToPtr([*:null]const [*c]const u8, 8))); + try S.doTheTest((@ptrFromInt([*:null]const [*c]const u8, 8))); } test "generic function passed as comptime argument" { diff --git a/test/behavior/inline_switch.zig b/test/behavior/inline_switch.zig index 426026d826..fc2eae31be 100644 --- a/test/behavior/inline_switch.zig +++ b/test/behavior/inline_switch.zig @@ -103,7 +103,7 @@ test "inline else enum" { var a: E2 = .a; switch (a) { .a, .b => {}, - inline else => |val| comptime if (@enumToInt(val) < 4) @compileError("bad"), + inline else => |val| comptime if (@intFromEnum(val) < 4) @compileError("bad"), } } diff --git a/test/behavior/packed-struct.zig b/test/behavior/packed-struct.zig index 5a6e92403b..037fee74ee 100644 --- a/test/behavior/packed-struct.zig +++ b/test/behavior/packed-struct.zig @@ -375,7 +375,7 @@ test "load pointer from packed struct" { } } -test "@ptrToInt on a packed struct field" { +test "@intFromPtr on a packed struct field" { if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; @@ -394,7 +394,7 @@ test "@ptrToInt on a packed struct field" { .z = 0, }; }; - try expect(@ptrToInt(&S.p0.z) - @ptrToInt(&S.p0.x) == 2); + try expect(@intFromPtr(&S.p0.z) - @intFromPtr(&S.p0.x) == 2); } test "optional pointer in packed struct" { diff --git a/test/behavior/pointers.zig b/test/behavior/pointers.zig index 32c2dc13ac..4e04fe580c 100644 --- a/test/behavior/pointers.zig +++ b/test/behavior/pointers.zig @@ -184,8 +184,8 @@ test "implicit cast error unions with non-optional to optional pointer" { } test "compare equality of optional and non-optional pointer" { - const a = @intToPtr(*const usize, 0x12345678); - const b = @intToPtr(?*usize, 0x12345678); + const a = @ptrFromInt(*const usize, 0x12345678); + const b = @ptrFromInt(?*usize, 0x12345678); try expect(a == b); try expect(b == a); } @@ -197,14 +197,14 @@ test "allowzero pointer and slice" { if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; - var ptr = @intToPtr([*]allowzero i32, 0); + var ptr = @ptrFromInt([*]allowzero i32, 0); var opt_ptr: ?[*]allowzero i32 = ptr; try expect(opt_ptr != null); - try expect(@ptrToInt(ptr) == 0); + try expect(@intFromPtr(ptr) == 0); var runtime_zero: usize = 0; var slice = ptr[runtime_zero..10]; try comptime expect(@TypeOf(slice) == []allowzero i32); - try expect(@ptrToInt(&slice[5]) == 20); + try expect(@intFromPtr(&slice[5]) == 20); try comptime expect(@typeInfo(@TypeOf(ptr)).Pointer.is_allowzero); try comptime expect(@typeInfo(@TypeOf(slice)).Pointer.is_allowzero); @@ -367,10 +367,10 @@ test "pointer sentinel with +inf" { } test "pointer to array at fixed address" { - const array = @intToPtr(*volatile [2]u32, 0x10); + const array = @ptrFromInt(*volatile [2]u32, 0x10); // Silly check just to reference `array` - try expect(@ptrToInt(&array[0]) == 0x10); - try expect(@ptrToInt(&array[1]) == 0x14); + try expect(@intFromPtr(&array[0]) == 0x10); + try expect(@intFromPtr(&array[1]) == 0x14); } test "pointer arithmetic affects the alignment" { @@ -404,16 +404,16 @@ test "pointer arithmetic affects the alignment" { } } -test "@ptrToInt on null optional at comptime" { +test "@intFromPtr on null optional at comptime" { { - const pointer = @intToPtr(?*u8, 0x000); - const x = @ptrToInt(pointer); + const pointer = @ptrFromInt(?*u8, 0x000); + const x = @intFromPtr(pointer); _ = x; - try comptime expect(0 == @ptrToInt(pointer)); + try comptime expect(0 == @intFromPtr(pointer)); } { - const pointer = @intToPtr(?*u8, 0xf00); - try comptime expect(0xf00 == @ptrToInt(pointer)); + const pointer = @ptrFromInt(?*u8, 0xf00); + try comptime expect(0xf00 == @intFromPtr(pointer)); } } @@ -516,7 +516,7 @@ test "ptrCast comptime known slice to C pointer" { try std.testing.expectEqualStrings(s, std.mem.sliceTo(p, 0)); } -test "ptrToInt on a generic function" { +test "intFromPtr on a generic function" { if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO @@ -527,7 +527,7 @@ test "ptrToInt on a generic function" { return i; } fn doTheTest(a: anytype) !void { - try expect(@ptrToInt(a) != 0); + try expect(@intFromPtr(a) != 0); } }; try S.doTheTest(&S.generic); diff --git a/test/behavior/inttoptr.zig b/test/behavior/ptrfromint.zig similarity index 75% rename from test/behavior/inttoptr.zig rename to test/behavior/ptrfromint.zig index 5a3778b09f..c07a6df834 100644 --- a/test/behavior/inttoptr.zig +++ b/test/behavior/ptrfromint.zig @@ -9,10 +9,10 @@ test "casting integer address to function pointer" { fn addressToFunction() void { var addr: usize = 0xdeadbee0; - _ = @intToPtr(*const fn () void, addr); + _ = @ptrFromInt(*const fn () void, addr); } -test "mutate through ptr initialized with constant intToPtr value" { +test "mutate through ptr initialized with constant ptrFromInt value" { if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO @@ -21,7 +21,7 @@ test "mutate through ptr initialized with constant intToPtr value" { } fn forceCompilerAnalyzeBranchHardCodedPtrDereference(x: bool) void { - const hardCodedP = @intToPtr(*volatile u8, 0xdeadbeef); + const hardCodedP = @ptrFromInt(*volatile u8, 0xdeadbeef); if (x) { hardCodedP.* = hardCodedP.* | 10; } else { @@ -29,20 +29,20 @@ fn forceCompilerAnalyzeBranchHardCodedPtrDereference(x: bool) void { } } -test "@intToPtr creates null pointer" { +test "@ptrFromInt creates null pointer" { if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO - const ptr = @intToPtr(?*u32, 0); + const ptr = @ptrFromInt(?*u32, 0); try expectEqual(@as(?*u32, null), ptr); } -test "@intToPtr creates allowzero zero pointer" { +test "@ptrFromInt creates allowzero zero pointer" { if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO - const ptr = @intToPtr(*allowzero u32, 0); - try expectEqual(@as(usize, 0), @ptrToInt(ptr)); + const ptr = @ptrFromInt(*allowzero u32, 0); + try expectEqual(@as(usize, 0), @intFromPtr(ptr)); } diff --git a/test/behavior/sizeof_and_typeof.zig b/test/behavior/sizeof_and_typeof.zig index a14ae1c6e7..3657e77e50 100644 --- a/test/behavior/sizeof_and_typeof.zig +++ b/test/behavior/sizeof_and_typeof.zig @@ -92,15 +92,15 @@ test "@offsetOf" { // // Normal struct fields can be moved/padded var a: A = undefined; - try expect(@ptrToInt(&a.a) - @ptrToInt(&a) == @offsetOf(A, "a")); - try expect(@ptrToInt(&a.b) - @ptrToInt(&a) == @offsetOf(A, "b")); - try expect(@ptrToInt(&a.c) - @ptrToInt(&a) == @offsetOf(A, "c")); - try expect(@ptrToInt(&a.d) - @ptrToInt(&a) == @offsetOf(A, "d")); - try expect(@ptrToInt(&a.e) - @ptrToInt(&a) == @offsetOf(A, "e")); - try expect(@ptrToInt(&a.f) - @ptrToInt(&a) == @offsetOf(A, "f")); - try expect(@ptrToInt(&a.g) - @ptrToInt(&a) == @offsetOf(A, "g")); - try expect(@ptrToInt(&a.h) - @ptrToInt(&a) == @offsetOf(A, "h")); - try expect(@ptrToInt(&a.i) - @ptrToInt(&a) == @offsetOf(A, "i")); + try expect(@intFromPtr(&a.a) - @intFromPtr(&a) == @offsetOf(A, "a")); + try expect(@intFromPtr(&a.b) - @intFromPtr(&a) == @offsetOf(A, "b")); + try expect(@intFromPtr(&a.c) - @intFromPtr(&a) == @offsetOf(A, "c")); + try expect(@intFromPtr(&a.d) - @intFromPtr(&a) == @offsetOf(A, "d")); + try expect(@intFromPtr(&a.e) - @intFromPtr(&a) == @offsetOf(A, "e")); + try expect(@intFromPtr(&a.f) - @intFromPtr(&a) == @offsetOf(A, "f")); + try expect(@intFromPtr(&a.g) - @intFromPtr(&a) == @offsetOf(A, "g")); + try expect(@intFromPtr(&a.h) - @intFromPtr(&a) == @offsetOf(A, "h")); + try expect(@intFromPtr(&a.i) - @intFromPtr(&a) == @offsetOf(A, "i")); } test "@bitOffsetOf" { @@ -231,7 +231,7 @@ test "@sizeOf comparison against zero" { test "hardcoded address in typeof expression" { const S = struct { - fn func() @TypeOf(@intToPtr(*[]u8, 0x10).*[0]) { + fn func() @TypeOf(@ptrFromInt(*[]u8, 0x10).*[0]) { return 0; } }; @@ -252,7 +252,7 @@ test "array access of generic param in typeof expression" { test "lazy size cast to float" { { const S = struct { a: u8 }; - try expect(@intToFloat(f32, @sizeOf(S)) == 1.0); + try expect(@floatFromInt(f32, @sizeOf(S)) == 1.0); } { const S = struct { a: u8 }; diff --git a/test/behavior/slice.zig b/test/behavior/slice.zig index ae5fbf0951..fcbae214ac 100644 --- a/test/behavior/slice.zig +++ b/test/behavior/slice.zig @@ -138,10 +138,10 @@ fn memFree(comptime T: type, memory: []T) void { test "slice of hardcoded address to pointer" { const S = struct { fn doTheTest() !void { - const pointer = @intToPtr([*]u8, 0x04)[0..2]; + const pointer = @ptrFromInt([*]u8, 0x04)[0..2]; try comptime expect(@TypeOf(pointer) == *[2]u8); const slice: []const u8 = pointer; - try expect(@ptrToInt(slice.ptr) == 4); + try expect(@intFromPtr(slice.ptr) == 4); try expect(slice.len == 2); } }; @@ -197,13 +197,13 @@ test "slicing pointer by length" { } } -const x = @intToPtr([*]i32, 0x1000)[0..0x500]; +const x = @ptrFromInt([*]i32, 0x1000)[0..0x500]; const y = x[0x100..]; test "compile time slice of pointer to hard coded address" { - try expect(@ptrToInt(x) == 0x1000); + try expect(@intFromPtr(x) == 0x1000); try expect(x.len == 0x500); - try expect(@ptrToInt(y) == 0x1400); + try expect(@intFromPtr(y) == 0x1400); try expect(y.len == 0x400); } @@ -838,13 +838,13 @@ test "empty slice ptr is non null" { const empty_slice: []u8 = &[_]u8{}; const p: [*]u8 = empty_slice.ptr + 0; const t = @ptrCast([*]i8, p); - try expect(@ptrToInt(t) == @ptrToInt(empty_slice.ptr)); + try expect(@intFromPtr(t) == @intFromPtr(empty_slice.ptr)); } { const empty_slice: []u8 = &.{}; const p: [*]u8 = empty_slice.ptr + 0; const t = @ptrCast([*]i8, p); - try expect(@ptrToInt(t) == @ptrToInt(empty_slice.ptr)); + try expect(@intFromPtr(t) == @intFromPtr(empty_slice.ptr)); } } diff --git a/test/behavior/struct.zig b/test/behavior/struct.zig index 6686c911a5..6ced42998e 100644 --- a/test/behavior/struct.zig +++ b/test/behavior/struct.zig @@ -838,7 +838,7 @@ test "non-packed struct with u128 entry in union" { var sx: S = undefined; var s = &sx; - try expect(@ptrToInt(&s.f2) - @ptrToInt(&s.f1) == @offsetOf(S, "f2")); + try expect(@intFromPtr(&s.f2) - @intFromPtr(&s.f1) == @offsetOf(S, "f2")); var v2 = U{ .Num = 123 }; s.f2 = v2; try expect(s.f2.Num == 123); diff --git a/test/behavior/switch.zig b/test/behavior/switch.zig index 02e3ef4dce..f9fb9c7659 100644 --- a/test/behavior/switch.zig +++ b/test/behavior/switch.zig @@ -590,9 +590,9 @@ test "switch on pointer type" { field: u32, }; - const P1 = @intToPtr(*X, 0x400); - const P2 = @intToPtr(*X, 0x800); - const P3 = @intToPtr(*X, 0xC00); + const P1 = @ptrFromInt(*X, 0x400); + const P2 = @ptrFromInt(*X, 0x800); + const P3 = @ptrFromInt(*X, 0xC00); fn doTheTest(arg: *X) i32 { switch (arg) { @@ -682,9 +682,9 @@ test "enum value without tag name used as switch item" { b = 2, _, }; - var e: E = @intToEnum(E, 0); + var e: E = @enumFromInt(E, 0); switch (e) { - @intToEnum(E, 0) => {}, + @enumFromInt(E, 0) => {}, .a => return error.TestFailed, .b => return error.TestFailed, _ => return error.TestFailed, diff --git a/test/behavior/translate_c_macros.zig b/test/behavior/translate_c_macros.zig index b3d1a688fe..a69396c203 100644 --- a/test/behavior/translate_c_macros.zig +++ b/test/behavior/translate_c_macros.zig @@ -60,7 +60,7 @@ test "cast negative integer to pointer" { if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; - try expectEqual(@intToPtr(?*anyopaque, @bitCast(usize, @as(isize, -1))), h.MAP_FAILED); + try expectEqual(@ptrFromInt(?*anyopaque, @bitCast(usize, @as(isize, -1))), h.MAP_FAILED); } test "casting to union with a macro" { diff --git a/test/behavior/type.zig b/test/behavior/type.zig index 94a6b460e4..9420b5d2fd 100644 --- a/test/behavior/type.zig +++ b/test/behavior/type.zig @@ -363,8 +363,8 @@ test "Type.Enum" { }, }); try testing.expectEqual(true, @typeInfo(Foo).Enum.is_exhaustive); - try testing.expectEqual(@as(u8, 1), @enumToInt(Foo.a)); - try testing.expectEqual(@as(u8, 5), @enumToInt(Foo.b)); + try testing.expectEqual(@as(u8, 1), @intFromEnum(Foo.a)); + try testing.expectEqual(@as(u8, 5), @intFromEnum(Foo.b)); const Bar = @Type(.{ .Enum = .{ .tag_type = u32, @@ -377,9 +377,9 @@ test "Type.Enum" { }, }); try testing.expectEqual(false, @typeInfo(Bar).Enum.is_exhaustive); - try testing.expectEqual(@as(u32, 1), @enumToInt(Bar.a)); - try testing.expectEqual(@as(u32, 5), @enumToInt(Bar.b)); - try testing.expectEqual(@as(u32, 6), @enumToInt(@intToEnum(Bar, 6))); + try testing.expectEqual(@as(u32, 1), @intFromEnum(Bar.a)); + try testing.expectEqual(@as(u32, 5), @intFromEnum(Bar.b)); + try testing.expectEqual(@as(u32, 6), @intFromEnum(@enumFromInt(Bar, 6))); } test "Type.Union" { diff --git a/test/behavior/union.zig b/test/behavior/union.zig index c94695ff21..33cf1198ad 100644 --- a/test/behavior/union.zig +++ b/test/behavior/union.zig @@ -364,7 +364,7 @@ test "simple union(enum(u32))" { var x = MultipleChoice.C; try expect(x == MultipleChoice.C); - try expect(@enumToInt(@as(Tag(MultipleChoice), x)) == 60); + try expect(@intFromEnum(@as(Tag(MultipleChoice), x)) == 60); } const PackedPtrOrInt = packed union { @@ -655,7 +655,7 @@ const MultipleChoice2 = union(enum(u32)) { }; fn testEnumWithSpecifiedAndUnspecifiedTagValues(x: MultipleChoice2) !void { - try expect(@enumToInt(@as(Tag(MultipleChoice2), x)) == 60); + try expect(@intFromEnum(@as(Tag(MultipleChoice2), x)) == 60); try expect(1123 == switch (x) { MultipleChoice2.A => 1, MultipleChoice2.B => 2, @@ -721,11 +721,11 @@ test "union with only 1 field casted to its enum type which has enum value speci try comptime expect(Tag(ExprTag) == comptime_int); comptime var t = @as(ExprTag, e); try expect(t == Expr.Literal); - try expect(@enumToInt(t) == 33); - try comptime expect(@enumToInt(t) == 33); + try expect(@intFromEnum(t) == 33); + try comptime expect(@intFromEnum(t) == 33); } -test "@enumToInt works on unions" { +test "@intFromEnum works on unions" { if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO @@ -739,9 +739,9 @@ test "@enumToInt works on unions" { const a = Bar{ .A = true }; var b = Bar{ .B = undefined }; var c = Bar.C; - try expect(@enumToInt(a) == 0); - try expect(@enumToInt(b) == 1); - try expect(@enumToInt(c) == 2); + try expect(@intFromEnum(a) == 0); + try expect(@intFromEnum(b) == 1); + try expect(@intFromEnum(c) == 2); } test "comptime union field value equality" { @@ -1396,7 +1396,7 @@ test "@unionInit uses tag value instead of field index" { var a = &u.b; try expect(a.* == i); } - try expect(@enumToInt(u) == 255); + try expect(@intFromEnum(u) == 255); } test "union field ptr - zero sized payload" { diff --git a/test/behavior/vector.zig b/test/behavior/vector.zig index 367a21fc0a..47864a83c9 100644 --- a/test/behavior/vector.zig +++ b/test/behavior/vector.zig @@ -1173,7 +1173,7 @@ test "byte vector initialized in inline function" { if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; if (comptime builtin.zig_backend == .stage2_llvm and builtin.cpu.arch == .x86_64 and - builtin.cpu.features.isEnabled(@enumToInt(std.Target.x86.Feature.avx512f))) + builtin.cpu.features.isEnabled(@intFromEnum(std.Target.x86.Feature.avx512f))) { // TODO https://github.com/ziglang/zig/issues/13279 return error.SkipZigTest; diff --git a/test/c_abi/main.zig b/test/c_abi/main.zig index db76697473..f06d455060 100644 --- a/test/c_abi/main.zig +++ b/test/c_abi/main.zig @@ -143,11 +143,11 @@ export fn zig_longdouble(x: c_longdouble) void { extern fn c_ptr(*anyopaque) void; test "C ABI pointer" { - c_ptr(@intToPtr(*anyopaque, 0xdeadbeef)); + c_ptr(@ptrFromInt(*anyopaque, 0xdeadbeef)); } export fn zig_ptr(x: *anyopaque) void { - expect(@ptrToInt(x) == 0xdeadbeef) catch @panic("test failure: zig_ptr"); + expect(@intFromPtr(x) == 0xdeadbeef) catch @panic("test failure: zig_ptr"); } extern fn c_bool(bool) void; @@ -1058,14 +1058,14 @@ test "C function that takes byval struct called via function pointer" { var fn_ptr = &c_func_ptr_byval; fn_ptr( - @intToPtr(*anyopaque, 1), - @intToPtr(*anyopaque, 2), + @ptrFromInt(*anyopaque, 1), + @ptrFromInt(*anyopaque, 2), ByVal{ .origin = .{ .x = 9, .y = 10, .z = 11 }, .size = .{ .width = 12, .height = 13, .depth = 14 }, }, @as(c_ulong, 3), - @intToPtr(*anyopaque, 4), + @ptrFromInt(*anyopaque, 4), @as(c_ulong, 5), ); } diff --git a/test/cases/assert_function.18.zig b/test/cases/assert_function.18.zig index 5f05e4ae70..ac0f97c40f 100644 --- a/test/cases/assert_function.18.zig +++ b/test/cases/assert_function.18.zig @@ -7,7 +7,7 @@ pub fn main() void { } fn print() void { - _ = write(1, @ptrToInt("hello\n"), 6); + _ = write(1, @intFromPtr("hello\n"), 6); } // run diff --git a/test/cases/assert_function.7.zig b/test/cases/assert_function.7.zig index 0004435db6..9db604d3b9 100644 --- a/test/cases/assert_function.7.zig +++ b/test/cases/assert_function.7.zig @@ -7,7 +7,7 @@ pub fn main() void { } fn print() void { - _ = write(1, @ptrToInt("hello\n"), 6); + _ = write(1, @intFromPtr("hello\n"), 6); } pub fn assert(ok: bool) void { diff --git a/test/cases/assert_function.8.zig b/test/cases/assert_function.8.zig index 3e8e247dac..02b486a8cb 100644 --- a/test/cases/assert_function.8.zig +++ b/test/cases/assert_function.8.zig @@ -7,7 +7,7 @@ pub fn main() void { } fn print() void { - _ = write(1, @ptrToInt("hello\n"), 6); + _ = write(1, @intFromPtr("hello\n"), 6); } pub fn assert(ok: bool) void { diff --git a/test/cases/compile_errors/add_overflow_in_function_evaluation.zig b/test/cases/compile_errors/add_overflow_in_function_evaluation.zig index 2f8a4678d3..ef1a016711 100644 --- a/test/cases/compile_errors/add_overflow_in_function_evaluation.zig +++ b/test/cases/compile_errors/add_overflow_in_function_evaluation.zig @@ -3,7 +3,9 @@ fn add(a: u16, b: u16) u16 { return a + b; } -export fn entry() usize { return @sizeOf(@TypeOf(y)); } +export fn entry() usize { + return @sizeOf(@TypeOf(y)); +} // error // backend=stage2 diff --git a/test/cases/compile_errors/addition_with_non_numbers.zig b/test/cases/compile_errors/addition_with_non_numbers.zig index 3687df914f..1b60d1ba9a 100644 --- a/test/cases/compile_errors/addition_with_non_numbers.zig +++ b/test/cases/compile_errors/addition_with_non_numbers.zig @@ -1,12 +1,14 @@ const Foo = struct { field: i32, }; -const x = Foo {.field = 1} + Foo {.field = 2}; +const x = Foo{ .field = 1 } + Foo{ .field = 2 }; -export fn entry() usize { return @sizeOf(@TypeOf(x)); } +export fn entry() usize { + return @sizeOf(@TypeOf(x)); +} // error // backend=llvm // target=native // -// :4:28: error: invalid operands to binary expression: 'Struct' and 'Struct' +// :4:29: error: invalid operands to binary expression: 'Struct' and 'Struct' diff --git a/test/cases/compile_errors/address_of_number_literal.zig b/test/cases/compile_errors/address_of_number_literal.zig index c6b41a1495..e41fbd229c 100644 --- a/test/cases/compile_errors/address_of_number_literal.zig +++ b/test/cases/compile_errors/address_of_number_literal.zig @@ -1,12 +1,16 @@ const x = 3; const y = &x; -fn foo() *const i32 { return y; } -export fn entry() usize { return @sizeOf(@TypeOf(&foo)); } +fn foo() *const i32 { + return y; +} +export fn entry() usize { + return @sizeOf(@TypeOf(&foo)); +} // error // backend=stage2 // target=native // -// :3:30: error: expected type '*const i32', found '*const comptime_int' -// :3:30: note: pointer type child 'comptime_int' cannot cast into pointer type child 'i32' +// :4:12: error: expected type '*const i32', found '*const comptime_int' +// :4:12: note: pointer type child 'comptime_int' cannot cast into pointer type child 'i32' // :3:10: note: function return type declared here diff --git a/test/cases/compile_errors/alignment_of_enum_field_specified.zig b/test/cases/compile_errors/alignment_of_enum_field_specified.zig index 14ffa6f499..ecb06aa254 100644 --- a/test/cases/compile_errors/alignment_of_enum_field_specified.zig +++ b/test/cases/compile_errors/alignment_of_enum_field_specified.zig @@ -1,7 +1,10 @@ +// zig fmt: off const Number = enum { a, b align(i32), }; +// zig fmt: on + export fn entry1() void { var x: Number = undefined; _ = x; @@ -11,4 +14,4 @@ export fn entry1() void { // backend=stage2 // target=native // -// :3:13: error: enum fields cannot be aligned +// :4:13: error: enum fields cannot be aligned diff --git a/test/cases/compile_errors/array_concatenation_with_wrong_type.zig b/test/cases/compile_errors/array_concatenation_with_wrong_type.zig index 6f2648f74b..5c634eceb0 100644 --- a/test/cases/compile_errors/array_concatenation_with_wrong_type.zig +++ b/test/cases/compile_errors/array_concatenation_with_wrong_type.zig @@ -2,7 +2,9 @@ const src = "aoeu"; const derp: usize = 1234; const a = derp ++ "foo"; -export fn entry() usize { return @sizeOf(@TypeOf(a)); } +export fn entry() usize { + return @sizeOf(@TypeOf(a)); +} // error // backend=stage2 diff --git a/test/cases/compile_errors/array_mult_with_number_type.zig b/test/cases/compile_errors/array_mult_with_number_type.zig index d3ec870f4e..bd47c3b56f 100644 --- a/test/cases/compile_errors/array_mult_with_number_type.zig +++ b/test/cases/compile_errors/array_mult_with_number_type.zig @@ -7,4 +7,4 @@ export fn entry(base: f32, exponent: f32) f32 { // target=native // // :2:12: error: expected indexable; found 'f32' -// :2:17: note: this operator multiplies arrays; use std.math.pow for exponentiation \ No newline at end of file +// :2:17: note: this operator multiplies arrays; use std.math.pow for exponentiation diff --git a/test/cases/compile_errors/assign_inline_fn_to_non-comptime_var.zig b/test/cases/compile_errors/assign_inline_fn_to_non-comptime_var.zig index 857123eae5..b16cb8f66e 100644 --- a/test/cases/compile_errors/assign_inline_fn_to_non-comptime_var.zig +++ b/test/cases/compile_errors/assign_inline_fn_to_non-comptime_var.zig @@ -2,7 +2,7 @@ export fn entry() void { var a = &b; _ = a; } -fn b() callconv(.Inline) void { } +inline fn b() void {} // error // backend=stage2 diff --git a/test/cases/compile_errors/assign_null_to_non-optional_pointer.zig b/test/cases/compile_errors/assign_null_to_non-optional_pointer.zig index ca36dbfbfb..cc410e6228 100644 --- a/test/cases/compile_errors/assign_null_to_non-optional_pointer.zig +++ b/test/cases/compile_errors/assign_null_to_non-optional_pointer.zig @@ -1,6 +1,8 @@ const a: *u8 = null; -export fn entry() usize { return @sizeOf(@TypeOf(a)); } +export fn entry() usize { + return @sizeOf(@TypeOf(a)); +} // error // backend=stage2 diff --git a/test/cases/compile_errors/assign_through_constant_pointer.zig b/test/cases/compile_errors/assign_through_constant_pointer.zig index 674d0875aa..7cc7a4b6ab 100644 --- a/test/cases/compile_errors/assign_through_constant_pointer.zig +++ b/test/cases/compile_errors/assign_through_constant_pointer.zig @@ -1,10 +1,10 @@ export fn f() void { - var cstr = "Hat"; - cstr[0] = 'W'; + var cstr = "Hat"; + cstr[0] = 'W'; } // error // backend=stage2 // target=native // -// :3:7: error: cannot assign to constant +// :3:9: error: cannot assign to constant diff --git a/test/cases/compile_errors/assign_through_constant_slice.zig b/test/cases/compile_errors/assign_through_constant_slice.zig index 08910b6248..9ac006a1a4 100644 --- a/test/cases/compile_errors/assign_through_constant_slice.zig +++ b/test/cases/compile_errors/assign_through_constant_slice.zig @@ -1,10 +1,10 @@ export fn f() void { - var cstr: []const u8 = "Hat"; - cstr[0] = 'W'; + var cstr: []const u8 = "Hat"; + cstr[0] = 'W'; } // error // backend=stage2 // target=native // -// :3:7: error: cannot assign to constant +// :3:9: error: cannot assign to constant diff --git a/test/cases/compile_errors/assign_to_constant_field.zig b/test/cases/compile_errors/assign_to_constant_field.zig index 33f08344c4..312ff44e0e 100644 --- a/test/cases/compile_errors/assign_to_constant_field.zig +++ b/test/cases/compile_errors/assign_to_constant_field.zig @@ -2,7 +2,9 @@ const Foo = struct { field: i32, }; export fn derp() void { - const f = Foo {.field = 1234,}; + const f = Foo{ + .field = 1234, + }; f.field = 0; } @@ -10,4 +12,4 @@ export fn derp() void { // backend=stage2 // target=native // -// :6:6: error: cannot assign to constant +// :8:6: error: cannot assign to constant diff --git a/test/cases/compile_errors/async/non_async_function_pointer_passed_to_asyncCall.zig b/test/cases/compile_errors/async/non_async_function_pointer_passed_to_asyncCall.zig index d8ab4087e0..82cbb4469a 100644 --- a/test/cases/compile_errors/async/non_async_function_pointer_passed_to_asyncCall.zig +++ b/test/cases/compile_errors/async/non_async_function_pointer_passed_to_asyncCall.zig @@ -3,7 +3,7 @@ export fn entry() void { var bytes: [100]u8 align(16) = undefined; _ = @asyncCall(&bytes, {}, ptr, .{}); } -fn afunc() void { } +fn afunc() void {} // error // backend=stage1 diff --git a/test/cases/compile_errors/async/prevent_bad_implicit_casting_of_anyframe_types.zig b/test/cases/compile_errors/async/prevent_bad_implicit_casting_of_anyframe_types.zig index 066bf1c107..bdf7bec458 100644 --- a/test/cases/compile_errors/async/prevent_bad_implicit_casting_of_anyframe_types.zig +++ b/test/cases/compile_errors/async/prevent_bad_implicit_casting_of_anyframe_types.zig @@ -21,4 +21,4 @@ fn func() void {} // // :3:28: error: expected type 'anyframe->i32', found 'anyframe' // :8:28: error: expected type 'anyframe->i32', found 'i32' -// tmp.zig:13:29: error: expected type 'anyframe->i32', found '*@Frame(func)' \ No newline at end of file +// tmp.zig:13:29: error: expected type 'anyframe->i32', found '*@Frame(func)' diff --git a/test/cases/compile_errors/async/runtime-known_function_called_with_async_keyword.zig b/test/cases/compile_errors/async/runtime-known_function_called_with_async_keyword.zig index c66d0f9cbb..bfc22cca25 100644 --- a/test/cases/compile_errors/async/runtime-known_function_called_with_async_keyword.zig +++ b/test/cases/compile_errors/async/runtime-known_function_called_with_async_keyword.zig @@ -3,7 +3,7 @@ export fn entry() void { _ = async ptr(); } -fn afunc() callconv(.Async) void { } +fn afunc() callconv(.Async) void {} // error // backend=stage1 diff --git a/test/cases/compile_errors/bad_alignCast_at_comptime.zig b/test/cases/compile_errors/bad_alignCast_at_comptime.zig index 0d2d91ece3..885700ecac 100644 --- a/test/cases/compile_errors/bad_alignCast_at_comptime.zig +++ b/test/cases/compile_errors/bad_alignCast_at_comptime.zig @@ -1,5 +1,5 @@ comptime { - const ptr = @intToPtr(*align(1) i32, 0x1); + const ptr = @ptrFromInt(*align(1) i32, 0x1); const aligned = @alignCast(4, ptr); _ = aligned; } diff --git a/test/cases/compile_errors/bad_import.zig b/test/cases/compile_errors/bad_import.zig index e624d7104c..521331e345 100644 --- a/test/cases/compile_errors/bad_import.zig +++ b/test/cases/compile_errors/bad_import.zig @@ -1,4 +1,6 @@ -const bogus = @import("bogus-does-not-exist.zig",); +const bogus = @import( + "bogus-does-not-exist.zig", +); // error // backend=stage2 diff --git a/test/cases/compile_errors/binary_not_on_number_literal.zig b/test/cases/compile_errors/binary_not_on_number_literal.zig index cb57ca9ee1..455b79130a 100644 --- a/test/cases/compile_errors/binary_not_on_number_literal.zig +++ b/test/cases/compile_errors/binary_not_on_number_literal.zig @@ -2,7 +2,9 @@ const TINY_QUANTUM_SHIFT = 4; const TINY_QUANTUM_SIZE = 1 << TINY_QUANTUM_SHIFT; var block_aligned_stuff: usize = (4 + TINY_QUANTUM_SIZE) & ~(TINY_QUANTUM_SIZE - 1); -export fn entry() usize { return @sizeOf(@TypeOf(block_aligned_stuff)); } +export fn entry() usize { + return @sizeOf(@TypeOf(block_aligned_stuff)); +} // error // backend=stage2 diff --git a/test/cases/compile_errors/bitCast_to_enum_type.zig b/test/cases/compile_errors/bitCast_to_enum_type.zig index a8fedb7d54..b3bc72c21b 100644 --- a/test/cases/compile_errors/bitCast_to_enum_type.zig +++ b/test/cases/compile_errors/bitCast_to_enum_type.zig @@ -9,4 +9,4 @@ export fn entry() void { // target=native // // :3:24: error: cannot @bitCast to 'tmp.entry.E' -// :3:24: note: use @intToEnum to cast from 'u32' +// :3:24: note: use @enumFromInt to cast from 'u32' diff --git a/test/cases/compile_errors/bogus_compile_var.zig b/test/cases/compile_errors/bogus_compile_var.zig index be222e5393..4780423cae 100644 --- a/test/cases/compile_errors/bogus_compile_var.zig +++ b/test/cases/compile_errors/bogus_compile_var.zig @@ -1,5 +1,7 @@ const x = @import("builtin").bogus; -export fn entry() usize { return @sizeOf(@TypeOf(x)); } +export fn entry() usize { + return @sizeOf(@TypeOf(x)); +} // error // backend=stage2 diff --git a/test/cases/compile_errors/bogus_method_call_on_slice.zig b/test/cases/compile_errors/bogus_method_call_on_slice.zig index ed18f43f48..694993074c 100644 --- a/test/cases/compile_errors/bogus_method_call_on_slice.zig +++ b/test/cases/compile_errors/bogus_method_call_on_slice.zig @@ -2,7 +2,9 @@ var self = "aoeu"; fn f(m: []const u8) void { m.copy(u8, self[0..], m); } -export fn entry() usize { return @sizeOf(@TypeOf(&f)); } +export fn entry() usize { + return @sizeOf(@TypeOf(&f)); +} pub export fn entry1() void { .{}.bar(); } @@ -14,6 +16,6 @@ pub export fn entry2() void { // backend=stage2 // target=native // -// :7:8: error: no field or member function named 'bar' in '@TypeOf(.{})' -// :10:18: error: no field or member function named 'bar' in 'struct{comptime foo: comptime_int = 1}' +// :9:8: error: no field or member function named 'bar' in '@TypeOf(.{})' +// :12:18: error: no field or member function named 'bar' in 'struct{comptime foo: comptime_int = 1}' // :3:6: error: no field or member function named 'copy' in '[]const u8' diff --git a/test/cases/compile_errors/branch_on_undefined_value.zig b/test/cases/compile_errors/branch_on_undefined_value.zig index a0a3be83cf..fc30fe7d3c 100644 --- a/test/cases/compile_errors/branch_on_undefined_value.zig +++ b/test/cases/compile_errors/branch_on_undefined_value.zig @@ -1,6 +1,8 @@ const x = if (undefined) true else false; -export fn entry() usize { return @sizeOf(@TypeOf(x)); } +export fn entry() usize { + return @sizeOf(@TypeOf(x)); +} // error // backend=stage2 diff --git a/test/cases/compile_errors/calling_function_with_naked_calling_convention.zig b/test/cases/compile_errors/calling_function_with_naked_calling_convention.zig index 54bf585425..2bd0364d4f 100644 --- a/test/cases/compile_errors/calling_function_with_naked_calling_convention.zig +++ b/test/cases/compile_errors/calling_function_with_naked_calling_convention.zig @@ -1,7 +1,7 @@ export fn entry() void { foo(); } -fn foo() callconv(.Naked) void { } +fn foo() callconv(.Naked) void {} // error // backend=llvm diff --git a/test/cases/compile_errors/calling_var_args_extern_function_passing_array_instead_of_pointer.zig b/test/cases/compile_errors/calling_var_args_extern_function_passing_array_instead_of_pointer.zig index c9e2e2e5eb..0960c35074 100644 --- a/test/cases/compile_errors/calling_var_args_extern_function_passing_array_instead_of_pointer.zig +++ b/test/cases/compile_errors/calling_var_args_extern_function_passing_array_instead_of_pointer.zig @@ -1,5 +1,7 @@ export fn entry() void { - foo("hello".*,); + foo( + "hello".*, + ); } pub extern fn foo(format: *const u8, ...) void; @@ -7,5 +9,5 @@ pub extern fn foo(format: *const u8, ...) void; // backend=stage2 // target=native // -// :2:16: error: expected type '*const u8', found '[5:0]u8' -// :4:27: note: parameter type declared here +// :3:16: error: expected type '*const u8', found '[5:0]u8' +// :6:27: note: parameter type declared here diff --git a/test/cases/compile_errors/cast_unreachable.zig b/test/cases/compile_errors/cast_unreachable.zig index cf2331ff7e..39da655d7f 100644 --- a/test/cases/compile_errors/cast_unreachable.zig +++ b/test/cases/compile_errors/cast_unreachable.zig @@ -1,7 +1,9 @@ fn f() i32 { return @as(i32, return 1); } -export fn entry() void { _ = f(); } +export fn entry() void { + _ = f(); +} // error // backend=stage2 diff --git a/test/cases/compile_errors/casting_bit_offset_pointer_to_regular_pointer.zig b/test/cases/compile_errors/casting_bit_offset_pointer_to_regular_pointer.zig index f9df19802a..8cf62c8ec0 100644 --- a/test/cases/compile_errors/casting_bit_offset_pointer_to_regular_pointer.zig +++ b/test/cases/compile_errors/casting_bit_offset_pointer_to_regular_pointer.zig @@ -12,7 +12,9 @@ fn bar(x: *const u3) u3 { return x.*; } -export fn entry() usize { return @sizeOf(@TypeOf(&foo)); } +export fn entry() usize { + return @sizeOf(@TypeOf(&foo)); +} // error // backend=stage2 diff --git a/test/cases/compile_errors/colliding_invalid_top_level_functions.zig b/test/cases/compile_errors/colliding_invalid_top_level_functions.zig index ee0711088d..8a2adb2f07 100644 --- a/test/cases/compile_errors/colliding_invalid_top_level_functions.zig +++ b/test/cases/compile_errors/colliding_invalid_top_level_functions.zig @@ -1,6 +1,8 @@ fn func() bogus {} fn func() bogus {} -export fn entry() usize { return @sizeOf(@TypeOf(func)); } +export fn entry() usize { + return @sizeOf(@TypeOf(func)); +} // error // backend=stage2 diff --git a/test/cases/compile_errors/compileError_shows_traceback_of_references_that_caused_it.zig b/test/cases/compile_errors/compileError_shows_traceback_of_references_that_caused_it.zig index 092cbbd400..d5206671fb 100644 --- a/test/cases/compile_errors/compileError_shows_traceback_of_references_that_caused_it.zig +++ b/test/cases/compile_errors/compileError_shows_traceback_of_references_that_caused_it.zig @@ -1,4 +1,6 @@ -const foo = @compileError("aoeu",); +const foo = @compileError( + "aoeu", +); const bar = baz + foo; const baz = 1; diff --git a/test/cases/compile_errors/compile_log_statement_warning_deduplication_in_generic_fn.zig b/test/cases/compile_errors/compile_log_statement_warning_deduplication_in_generic_fn.zig index 4b31d9924a..2e2addbc2e 100644 --- a/test/cases/compile_errors/compile_log_statement_warning_deduplication_in_generic_fn.zig +++ b/test/cases/compile_errors/compile_log_statement_warning_deduplication_in_generic_fn.zig @@ -4,15 +4,17 @@ export fn entry() void { } fn inner(comptime n: usize) void { comptime var i = 0; - inline while (i < n) : (i += 1) { @compileLog("!@#$"); } + inline while (i < n) : (i += 1) { + @compileLog("!@#$"); + } } // error // backend=llvm // target=native // -// :7:39: error: found compile log statement -// :7:39: note: also here +// :8:9: error: found compile log statement +// :8:9: note: also here // // Compile Log Output: // @as(*const [4:0]u8, "!@#$") diff --git a/test/cases/compile_errors/compile_time_division_by_zero.zig b/test/cases/compile_errors/compile_time_division_by_zero.zig index 281ccf28a1..8954ace9ab 100644 --- a/test/cases/compile_errors/compile_time_division_by_zero.zig +++ b/test/cases/compile_errors/compile_time_division_by_zero.zig @@ -3,7 +3,9 @@ fn foo(x: u32) u32 { return 1 / x; } -export fn entry() usize { return @sizeOf(@TypeOf(y)); } +export fn entry() usize { + return @sizeOf(@TypeOf(y)); +} // error // backend=llvm diff --git a/test/cases/compile_errors/comptime_call_of_function_pointer.zig b/test/cases/compile_errors/comptime_call_of_function_pointer.zig index cf01f5ea2c..d6598aab39 100644 --- a/test/cases/compile_errors/comptime_call_of_function_pointer.zig +++ b/test/cases/compile_errors/comptime_call_of_function_pointer.zig @@ -1,5 +1,5 @@ export fn entry() void { - const fn_ptr = @intToPtr(*align(1) fn () void, 0xffd2); + const fn_ptr = @ptrFromInt(*align(1) fn () void, 0xffd2); comptime fn_ptr(); } diff --git a/test/cases/compile_errors/comptime_if_inside_runtime_for.zig b/test/cases/compile_errors/comptime_if_inside_runtime_for.zig index 6200776d18..40055a70b9 100644 --- a/test/cases/compile_errors/comptime_if_inside_runtime_for.zig +++ b/test/cases/compile_errors/comptime_if_inside_runtime_for.zig @@ -1,14 +1,14 @@ export fn entry() void { - var x: u32 = 0; - for(0..1, 1..2) |_, _| { - var y = x + if(x == 0) 1 else 0; - _ = y; - } + var x: u32 = 0; + for (0..1, 1..2) |_, _| { + var y = x + if (x == 0) 1 else 0; + _ = y; + } } // error // backend=stage2 // target=native // -// :4:15: error: value with comptime-only type 'comptime_int' depends on runtime control flow -// :3:6: note: runtime control flow here +// :4:21: error: value with comptime-only type 'comptime_int' depends on runtime control flow +// :3:10: note: runtime control flow here diff --git a/test/cases/compile_errors/constant_inside_comptime_function_has_compile_error.zig b/test/cases/compile_errors/constant_inside_comptime_function_has_compile_error.zig index 2b67390b05..1ce744d6d7 100644 --- a/test/cases/compile_errors/constant_inside_comptime_function_has_compile_error.zig +++ b/test/cases/compile_errors/constant_inside_comptime_function_has_compile_error.zig @@ -1,7 +1,9 @@ const ContextAllocator = MemoryPool(usize); pub fn MemoryPool(comptime T: type) type { - const free_list_t = @compileError("aoeu",); + const free_list_t = @compileError( + "aoeu", + ); _ = T; return struct { diff --git a/test/cases/compile_errors/container_init_with_non-type.zig b/test/cases/compile_errors/container_init_with_non-type.zig index aa62be6dc5..7bdf07a1ce 100644 --- a/test/cases/compile_errors/container_init_with_non-type.zig +++ b/test/cases/compile_errors/container_init_with_non-type.zig @@ -1,7 +1,9 @@ const zero: i32 = 0; const a = zero{1}; -export fn entry() usize { return @sizeOf(@TypeOf(a)); } +export fn entry() usize { + return @sizeOf(@TypeOf(a)); +} // error // backend=stage2 diff --git a/test/cases/compile_errors/control_flow_uses_comptime_var_at_runtime.zig b/test/cases/compile_errors/control_flow_uses_comptime_var_at_runtime.zig index a8058e8c75..5283239af6 100644 --- a/test/cases/compile_errors/control_flow_uses_comptime_var_at_runtime.zig +++ b/test/cases/compile_errors/control_flow_uses_comptime_var_at_runtime.zig @@ -5,7 +5,7 @@ export fn foo() void { } } -fn bar() void { } +fn bar() void {} export fn baz() void { comptime var idx: u32 = 0; while (idx < 1) { diff --git a/test/cases/compile_errors/dereference_an_array.zig b/test/cases/compile_errors/dereference_an_array.zig index f5aabf081c..27e4d81e55 100644 --- a/test/cases/compile_errors/dereference_an_array.zig +++ b/test/cases/compile_errors/dereference_an_array.zig @@ -5,7 +5,9 @@ pub fn pass(in: []u8) []u8 { return out.*[0..1]; } -export fn entry() usize { return @sizeOf(@TypeOf(&pass)); } +export fn entry() usize { + return @sizeOf(@TypeOf(&pass)); +} // error // backend=stage2 diff --git a/test/cases/compile_errors/direct_struct_loop.zig b/test/cases/compile_errors/direct_struct_loop.zig index 0abc1a4f73..9fdda1bdc7 100644 --- a/test/cases/compile_errors/direct_struct_loop.zig +++ b/test/cases/compile_errors/direct_struct_loop.zig @@ -1,9 +1,13 @@ -const A = struct { a : A, }; -export fn entry() usize { return @sizeOf(A); } +const A = struct { + a: A, +}; +export fn entry() usize { + return @sizeOf(A); +} // error // backend=stage2 // target=native // // :1:11: error: struct 'tmp.A' depends on itself -// :1:20: note: while checking this field +// :2:5: note: while checking this field diff --git a/test/cases/compile_errors/disallow_coercion_from_non-null-terminated_pointer_to_null-terminated_pointer.zig b/test/cases/compile_errors/disallow_coercion_from_non-null-terminated_pointer_to_null-terminated_pointer.zig index 3670def4ee..45fa4c14f5 100644 --- a/test/cases/compile_errors/disallow_coercion_from_non-null-terminated_pointer_to_null-terminated_pointer.zig +++ b/test/cases/compile_errors/disallow_coercion_from_non-null-terminated_pointer_to_null-terminated_pointer.zig @@ -1,6 +1,6 @@ extern fn puts(s: [*:0]const u8) c_int; pub export fn entry() void { - const no_zero_array = [_]u8{'h', 'e', 'l', 'l', 'o'}; + const no_zero_array = [_]u8{ 'h', 'e', 'l', 'l', 'o' }; const no_zero_ptr: [*]const u8 = &no_zero_array; _ = puts(no_zero_ptr); } diff --git a/test/cases/compile_errors/division_by_zero.zig b/test/cases/compile_errors/division_by_zero.zig index 2e2f7e2be2..3019554fb8 100644 --- a/test/cases/compile_errors/division_by_zero.zig +++ b/test/cases/compile_errors/division_by_zero.zig @@ -3,10 +3,18 @@ const lit_float_x = 1.0 / 0.0; const int_x = @as(u32, 1) / @as(u32, 0); const float_x = @as(f32, 1.0) / @as(f32, 0.0); -export fn entry1() usize { return @sizeOf(@TypeOf(lit_int_x)); } -export fn entry2() usize { return @sizeOf(@TypeOf(lit_float_x)); } -export fn entry3() usize { return @sizeOf(@TypeOf(int_x)); } -export fn entry4() usize { return @sizeOf(@TypeOf(float_x)); } // no error on purpose +export fn entry1() usize { + return @sizeOf(@TypeOf(lit_int_x)); +} +export fn entry2() usize { + return @sizeOf(@TypeOf(lit_float_x)); +} +export fn entry3() usize { + return @sizeOf(@TypeOf(int_x)); +} +export fn entry4() usize { + return @sizeOf(@TypeOf(float_x)); +} // no error on purpose // error // backend=stage2 diff --git a/test/cases/compile_errors/duplicate-unused_labels.zig b/test/cases/compile_errors/duplicate-unused_labels.zig index 4bfc6c5960..301d273bde 100644 --- a/test/cases/compile_errors/duplicate-unused_labels.zig +++ b/test/cases/compile_errors/duplicate-unused_labels.zig @@ -1,31 +1,37 @@ comptime { - blk: { blk: while (false) {} } + blk: { + blk: while (false) {} + } } comptime { - blk: while (false) { blk: for (@as([0]void, undefined)) |_| {} } + blk: while (false) { + blk: for (@as([0]void, undefined)) |_| {} + } } comptime { - blk: for (@as([0]void, undefined)) |_| { blk: {} } + blk: for (@as([0]void, undefined)) |_| { + blk: {} + } } comptime { blk: {} } comptime { - blk: while(false) {} + blk: while (false) {} } comptime { - blk: for(@as([0]void, undefined)) |_| {} + blk: for (@as([0]void, undefined)) |_| {} } // error // target=native // -// :2:12: error: redefinition of label 'blk' +// :3:9: error: redefinition of label 'blk' // :2:5: note: previous definition here -// :5:26: error: redefinition of label 'blk' -// :5:5: note: previous definition here -// :8:46: error: redefinition of label 'blk' -// :8:5: note: previous definition here -// :11:5: error: unused block label -// :14:5: error: unused while loop label -// :17:5: error: unused for loop label +// :8:9: error: redefinition of label 'blk' +// :7:5: note: previous definition here +// :13:9: error: redefinition of label 'blk' +// :12:5: note: previous definition here +// :17:5: error: unused block label +// :20:5: error: unused while loop label +// :23:5: error: unused for loop label diff --git a/test/cases/compile_errors/duplicate_error_value_in_error_set.zig b/test/cases/compile_errors/duplicate_error_value_in_error_set.zig index 5e9cddb975..927537d952 100644 --- a/test/cases/compile_errors/duplicate_error_value_in_error_set.zig +++ b/test/cases/compile_errors/duplicate_error_value_in_error_set.zig @@ -1,4 +1,4 @@ -const Foo = error { +const Foo = error{ Bar, Bar, }; diff --git a/test/cases/compile_errors/duplicate_field_in_struct_value_expression.zig b/test/cases/compile_errors/duplicate_field_in_struct_value_expression.zig index fa5bc6fb4e..eda001c086 100644 --- a/test/cases/compile_errors/duplicate_field_in_struct_value_expression.zig +++ b/test/cases/compile_errors/duplicate_field_in_struct_value_expression.zig @@ -1,10 +1,10 @@ const A = struct { - x : i32, - y : i32, - z : i32, + x: i32, + y: i32, + z: i32, }; export fn f() void { - const a = A { + const a = A{ .z = 1, .y = 2, .x = 3, diff --git a/test/cases/compile_errors/embedFile_with_bogus_file.zig b/test/cases/compile_errors/embedFile_with_bogus_file.zig index fa05d1ed49..956ea31f07 100644 --- a/test/cases/compile_errors/embedFile_with_bogus_file.zig +++ b/test/cases/compile_errors/embedFile_with_bogus_file.zig @@ -1,6 +1,8 @@ -const resource = @embedFile("bogus.txt",); +const resource = @embedFile("bogus.txt"); -export fn entry() usize { return @sizeOf(@TypeOf(resource)); } +export fn entry() usize { + return @sizeOf(@TypeOf(resource)); +} // error // backend=stage2 diff --git a/test/cases/compile_errors/empty_switch_on_an_integer.zig b/test/cases/compile_errors/empty_switch_on_an_integer.zig index de4d7e9c65..6ba69f8d3e 100644 --- a/test/cases/compile_errors/empty_switch_on_an_integer.zig +++ b/test/cases/compile_errors/empty_switch_on_an_integer.zig @@ -1,6 +1,6 @@ export fn entry() void { var x: u32 = 0; - switch(x) {} + switch (x) {} } // error diff --git a/test/cases/compile_errors/intToEnum_on_non-exhaustive_enums_checks_int_in_range.zig b/test/cases/compile_errors/enumFromInt_on_non-exhaustive_enums_checks_int_in_range.zig similarity index 85% rename from test/cases/compile_errors/intToEnum_on_non-exhaustive_enums_checks_int_in_range.zig rename to test/cases/compile_errors/enumFromInt_on_non-exhaustive_enums_checks_int_in_range.zig index b05c9f35d9..dfef66b628 100644 --- a/test/cases/compile_errors/intToEnum_on_non-exhaustive_enums_checks_int_in_range.zig +++ b/test/cases/compile_errors/enumFromInt_on_non-exhaustive_enums_checks_int_in_range.zig @@ -1,6 +1,6 @@ pub export fn entry() void { const E = enum(u3) { a, b, c, _ }; - @compileLog(@intToEnum(E, 100)); + @compileLog(@enumFromInt(E, 100)); } // error diff --git a/test/cases/compile_errors/enum_in_field_count_range_but_not_matching_tag.zig b/test/cases/compile_errors/enum_in_field_count_range_but_not_matching_tag.zig index e79f6d478f..0cf9fcce01 100644 --- a/test/cases/compile_errors/enum_in_field_count_range_but_not_matching_tag.zig +++ b/test/cases/compile_errors/enum_in_field_count_range_but_not_matching_tag.zig @@ -3,7 +3,7 @@ const Foo = enum(u32) { B = 11, }; export fn entry() void { - var x = @intToEnum(Foo, 0); + var x = @enumFromInt(Foo, 0); _ = x; } diff --git a/test/cases/compile_errors/enum_with_declarations_unavailable_for_reify_type.zig b/test/cases/compile_errors/enum_with_declarations_unavailable_for_reify_type.zig index f23718c2ca..fb55a733e5 100644 --- a/test/cases/compile_errors/enum_with_declarations_unavailable_for_reify_type.zig +++ b/test/cases/compile_errors/enum_with_declarations_unavailable_for_reify_type.zig @@ -1,5 +1,8 @@ export fn entry() void { - _ = @Type(@typeInfo(enum { foo, const bar = 1; })); + _ = @Type(@typeInfo(enum { + foo, + const bar = 1; + })); } // error diff --git a/test/cases/compile_errors/error_not_handled_in_switch.zig b/test/cases/compile_errors/error_not_handled_in_switch.zig index 8f0d26a4a9..04f122b11d 100644 --- a/test/cases/compile_errors/error_not_handled_in_switch.zig +++ b/test/cases/compile_errors/error_not_handled_in_switch.zig @@ -5,9 +5,9 @@ export fn entry() void { } fn foo(x: i32) !void { switch (x) { - 0 ... 10 => return error.Foo, - 11 ... 20 => return error.Bar, - 21 ... 30 => return error.Baz, + 0...10 => return error.Foo, + 11...20 => return error.Bar, + 21...30 => return error.Baz, else => {}, } } diff --git a/test/cases/compile_errors/error_note_for_function_parameter_incompatibility.zig b/test/cases/compile_errors/error_note_for_function_parameter_incompatibility.zig index 76543697a4..bbf8bcfa40 100644 --- a/test/cases/compile_errors/error_note_for_function_parameter_incompatibility.zig +++ b/test/cases/compile_errors/error_note_for_function_parameter_incompatibility.zig @@ -1,5 +1,9 @@ -fn do_the_thing(func: *const fn (arg: i32) void) void { _ = func; } -fn bar(arg: bool) void { _ = arg; } +fn do_the_thing(func: *const fn (arg: i32) void) void { + _ = func; +} +fn bar(arg: bool) void { + _ = arg; +} export fn entry() void { do_the_thing(bar); } @@ -8,6 +12,6 @@ export fn entry() void { // backend=stage2 // target=native // -// :4:18: error: expected type '*const fn(i32) void', found '*const fn(bool) void' -// :4:18: note: pointer type child 'fn(bool) void' cannot cast into pointer type child 'fn(i32) void' -// :4:18: note: parameter 0 'bool' cannot cast into 'i32' +// :8:18: error: expected type '*const fn(i32) void', found '*const fn(bool) void' +// :8:18: note: pointer type child 'fn(bool) void' cannot cast into pointer type child 'fn(i32) void' +// :8:18: note: parameter 0 'bool' cannot cast into 'i32' diff --git a/test/cases/compile_errors/explicitly_casting_non_tag_type_to_enum.zig b/test/cases/compile_errors/explicitly_casting_non_tag_type_to_enum.zig index aac876e614..6ae39489a0 100644 --- a/test/cases/compile_errors/explicitly_casting_non_tag_type_to_enum.zig +++ b/test/cases/compile_errors/explicitly_casting_non_tag_type_to_enum.zig @@ -7,7 +7,7 @@ const Small = enum(u2) { export fn entry() void { var y = @as(f32, 3); - var x = @intToEnum(Small, y); + var x = @enumFromInt(Small, y); _ = x; } @@ -15,4 +15,4 @@ export fn entry() void { // backend=stage2 // target=native // -// :10:31: error: expected integer type, found 'f32' +// :10:33: error: expected integer type, found 'f32' diff --git a/test/cases/compile_errors/export_function_with_comptime_parameter.zig b/test/cases/compile_errors/export_function_with_comptime_parameter.zig index 4491a98e9c..8d5dbef1c3 100644 --- a/test/cases/compile_errors/export_function_with_comptime_parameter.zig +++ b/test/cases/compile_errors/export_function_with_comptime_parameter.zig @@ -1,4 +1,4 @@ -export fn foo(comptime x: anytype, y: i32) i32{ +export fn foo(comptime x: anytype, y: i32) i32 { return x + y; } diff --git a/test/cases/compile_errors/export_with_empty_name_string.zig b/test/cases/compile_errors/export_with_empty_name_string.zig index f199c2632c..9f3b215bc2 100644 --- a/test/cases/compile_errors/export_with_empty_name_string.zig +++ b/test/cases/compile_errors/export_with_empty_name_string.zig @@ -1,4 +1,4 @@ -pub export fn entry() void { } +pub export fn entry() void {} comptime { @export(entry, .{ .name = "" }); } diff --git a/test/cases/compile_errors/extern_function_pointer_mismatch.zig b/test/cases/compile_errors/extern_function_pointer_mismatch.zig index f10a3dbdb3..f4371303fb 100644 --- a/test/cases/compile_errors/extern_function_pointer_mismatch.zig +++ b/test/cases/compile_errors/extern_function_pointer_mismatch.zig @@ -1,13 +1,21 @@ -const fns = [_](fn(i32)i32) { a, b, c }; -pub fn a(x: i32) i32 {return x + 0;} -pub fn b(x: i32) i32 {return x + 1;} -export fn c(x: i32) i32 {return x + 2;} +const fns = [_](fn (i32) i32){ a, b, c }; +pub fn a(x: i32) i32 { + return x + 0; +} +pub fn b(x: i32) i32 { + return x + 1; +} +export fn c(x: i32) i32 { + return x + 2; +} -export fn entry() usize { return @sizeOf(@TypeOf(fns)); } +export fn entry() usize { + return @sizeOf(@TypeOf(fns)); +} // error // backend=stage2 // target=native // -// :1:37: error: expected type 'fn(i32) i32', found 'fn(i32) callconv(.C) i32' -// :1:37: note: calling convention 'C' cannot cast into calling convention 'Unspecified' +// :1:38: error: expected type 'fn(i32) i32', found 'fn(i32) callconv(.C) i32' +// :1:38: note: calling convention 'C' cannot cast into calling convention 'Unspecified' diff --git a/test/cases/compile_errors/extern_function_with_comptime_parameter.zig b/test/cases/compile_errors/extern_function_with_comptime_parameter.zig index 8ade9ca2aa..fac09cc265 100644 --- a/test/cases/compile_errors/extern_function_with_comptime_parameter.zig +++ b/test/cases/compile_errors/extern_function_with_comptime_parameter.zig @@ -4,9 +4,15 @@ fn f() i32 { } pub extern fn entry1(b: u32, comptime a: [2]u8, c: i32) void; pub extern fn entry2(b: u32, noalias a: anytype, i43) void; -comptime { _ = &f; } -comptime { _ = &entry1; } -comptime { _ = &entry2; } +comptime { + _ = &f; +} +comptime { + _ = &entry1; +} +comptime { + _ = &entry2; +} // error // backend=stage2 diff --git a/test/cases/compile_errors/extern_struct_with_extern-compatible_but_inferred_integer_tag_type.zig b/test/cases/compile_errors/extern_struct_with_extern-compatible_but_inferred_integer_tag_type.zig index 6484e301a9..2faa7c8713 100644 --- a/test/cases/compile_errors/extern_struct_with_extern-compatible_but_inferred_integer_tag_type.zig +++ b/test/cases/compile_errors/extern_struct_with_extern-compatible_but_inferred_integer_tag_type.zig @@ -1,3 +1,4 @@ +// zig fmt: off pub const E = enum { @"0",@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9",@"10",@"11",@"12", @"13",@"14",@"15",@"16",@"17",@"18",@"19",@"20",@"21",@"22",@"23", @@ -27,6 +28,7 @@ pub const E = enum { @"245",@"246",@"247",@"248",@"249",@"250",@"251",@"252",@"253", @"254",@"255", @"256" }; +// zig fmt: on pub const S = extern struct { e: E, }; @@ -39,7 +41,7 @@ export fn entry() void { // backend=stage2 // target=native // -// :31:8: error: extern structs cannot contain fields of type 'tmp.E' -// :31:8: note: enum tag type 'u9' is not extern compatible -// :31:8: note: only integers with power of two bits are extern compatible -// :1:15: note: enum declared here +// :33:8: error: extern structs cannot contain fields of type 'tmp.E' +// :33:8: note: enum tag type 'u9' is not extern compatible +// :33:8: note: only integers with power of two bits are extern compatible +// :2:15: note: enum declared here diff --git a/test/cases/compile_errors/extern_union_field_missing_type.zig b/test/cases/compile_errors/extern_union_field_missing_type.zig index 6890e65714..fde58f69e5 100644 --- a/test/cases/compile_errors/extern_union_field_missing_type.zig +++ b/test/cases/compile_errors/extern_union_field_missing_type.zig @@ -2,7 +2,7 @@ const Letter = extern union { A, }; export fn entry() void { - var a = Letter { .A = {} }; + var a = Letter{ .A = {} }; _ = a; } diff --git a/test/cases/compile_errors/extern_union_given_enum_tag_type.zig b/test/cases/compile_errors/extern_union_given_enum_tag_type.zig index 6a691eb2e2..4aa0e623c7 100644 --- a/test/cases/compile_errors/extern_union_given_enum_tag_type.zig +++ b/test/cases/compile_errors/extern_union_given_enum_tag_type.zig @@ -9,7 +9,7 @@ const Payload = extern union(Letter) { C: bool, }; export fn entry() void { - var a = Payload { .A = 1234 }; + var a = Payload{ .A = 1234 }; _ = a; } diff --git a/test/cases/compile_errors/fieldParentPtr-comptime_field_ptr_not_based_on_struct.zig b/test/cases/compile_errors/fieldParentPtr-comptime_field_ptr_not_based_on_struct.zig index 7f57268f06..9fc8038d7a 100644 --- a/test/cases/compile_errors/fieldParentPtr-comptime_field_ptr_not_based_on_struct.zig +++ b/test/cases/compile_errors/fieldParentPtr-comptime_field_ptr_not_based_on_struct.zig @@ -2,10 +2,13 @@ const Foo = struct { a: i32, b: i32, }; -const foo = Foo { .a = 1, .b = 2, }; +const foo = Foo{ + .a = 1, + .b = 2, +}; comptime { - const field_ptr = @intToPtr(*i32, 0x1234); + const field_ptr = @ptrFromInt(*i32, 0x1234); const another_foo_ptr = @fieldParentPtr(Foo, "b", field_ptr); _ = another_foo_ptr; } @@ -14,4 +17,4 @@ comptime { // backend=stage2 // target=native // -// :9:55: error: pointer value not based on parent struct +// :12:55: error: pointer value not based on parent struct diff --git a/test/cases/compile_errors/fieldParentPtr-comptime_wrong_field_index.zig b/test/cases/compile_errors/fieldParentPtr-comptime_wrong_field_index.zig index a73409aea3..7a37eb2adc 100644 --- a/test/cases/compile_errors/fieldParentPtr-comptime_wrong_field_index.zig +++ b/test/cases/compile_errors/fieldParentPtr-comptime_wrong_field_index.zig @@ -2,7 +2,10 @@ const Foo = struct { a: i32, b: i32, }; -const foo = Foo { .a = 1, .b = 2, }; +const foo = Foo{ + .a = 1, + .b = 2, +}; comptime { const another_foo_ptr = @fieldParentPtr(Foo, "b", &foo.a); @@ -13,5 +16,5 @@ comptime { // backend=stage2 // target=native // -// :8:29: error: field 'b' has index '1' but pointer value is index '0' of struct 'tmp.Foo' +// :11:29: error: field 'b' has index '1' but pointer value is index '0' of struct 'tmp.Foo' // :1:13: note: struct declared here diff --git a/test/cases/compile_errors/floatToInt_comptime_safety.zig b/test/cases/compile_errors/floatToInt_comptime_safety.zig deleted file mode 100644 index 068d8e2d89..0000000000 --- a/test/cases/compile_errors/floatToInt_comptime_safety.zig +++ /dev/null @@ -1,17 +0,0 @@ -comptime { - _ = @floatToInt(i8, @as(f32, -129.1)); -} -comptime { - _ = @floatToInt(u8, @as(f32, -1.1)); -} -comptime { - _ = @floatToInt(u8, @as(f32, 256.1)); -} - -// error -// backend=stage2 -// target=native -// -// :2:25: error: float value '-129.10000610351562' cannot be stored in integer type 'i8' -// :5:25: error: float value '-1.100000023841858' cannot be stored in integer type 'u8' -// :8:25: error: float value '256.1000061035156' cannot be stored in integer type 'u8' diff --git a/test/cases/compile_errors/for.zig b/test/cases/compile_errors/for.zig index 435bb68607..568c416062 100644 --- a/test/cases/compile_errors/for.zig +++ b/test/cases/compile_errors/for.zig @@ -1,13 +1,15 @@ export fn a() void { for (0..10, 10..21) |i, j| { - _ = i; _ = j; + _ = i; + _ = j; } } export fn b() void { const s1 = "hello"; const s2 = true; for (s1, s2) |i, j| { - _ = i; _ = j; + _ = i; + _ = j; } } export fn c() void { @@ -20,7 +22,9 @@ export fn d() void { const x: [*]const u8 = "hello"; const y: [*]const u8 = "world"; for (x, 0.., y) |x1, x2, x3| { - _ = x1; _ = x2; _ = x3; + _ = x1; + _ = x2; + _ = x3; } } @@ -31,10 +35,10 @@ export fn d() void { // :2:5: error: non-matching for loop lengths // :2:11: note: length 10 here // :2:19: note: length 11 here -// :9:14: error: type 'bool' is not indexable and not a range -// :9:14: note: for loop operand must be a range, array, slice, tuple, or vector -// :15:16: error: pointer capture of non pointer type '[10]u8' -// :15:10: note: consider using '&' here -// :22:5: error: unbounded for loop -// :22:10: note: type '[*]const u8' has no upper bound -// :22:18: note: type '[*]const u8' has no upper bound +// :10:14: error: type 'bool' is not indexable and not a range +// :10:14: note: for loop operand must be a range, array, slice, tuple, or vector +// :17:16: error: pointer capture of non pointer type '[10]u8' +// :17:10: note: consider using '&' here +// :24:5: error: unbounded for loop +// :24:10: note: type '[*]const u8' has no upper bound +// :24:18: note: type '[*]const u8' has no upper bound diff --git a/test/cases/compile_errors/for_extra_capture.zig b/test/cases/compile_errors/for_extra_capture.zig index a137b57d51..0a4ed724ad 100644 --- a/test/cases/compile_errors/for_extra_capture.zig +++ b/test/cases/compile_errors/for_extra_capture.zig @@ -1,12 +1,15 @@ +// zig fmt: off export fn b() void { for (0..10) |i, j| { - _ = i; _ = j; + _ = i; + _ = j; } } +// zig fmt: on // error // backend=stage2 // target=native // -// :2:21: error: extra capture in for loop -// :2:21: note: run 'zig fmt' to upgrade your code automatically +// :3:21: error: extra capture in for loop +// :3:21: note: run 'zig fmt' to upgrade your code automatically diff --git a/test/cases/compile_errors/function_alignment_non_power_of_2.zig b/test/cases/compile_errors/function_alignment_non_power_of_2.zig index 11d6768dfd..e40ca022d2 100644 --- a/test/cases/compile_errors/function_alignment_non_power_of_2.zig +++ b/test/cases/compile_errors/function_alignment_non_power_of_2.zig @@ -1,5 +1,7 @@ extern fn foo() align(3) void; -export fn entry() void { return foo(); } +export fn entry() void { + return foo(); +} // error // backend=stage2 diff --git a/test/cases/compile_errors/function_call_assigned_to_incorrect_type.zig b/test/cases/compile_errors/function_call_assigned_to_incorrect_type.zig index fcbfabe297..1060987b9a 100644 --- a/test/cases/compile_errors/function_call_assigned_to_incorrect_type.zig +++ b/test/cases/compile_errors/function_call_assigned_to_incorrect_type.zig @@ -3,7 +3,7 @@ export fn entry() void { arr = concat(); } fn concat() [16]f32 { - return [1]f32{0}**16; + return [1]f32{0} ** 16; } // error diff --git a/test/cases/compile_errors/function_parameter_is_opaque.zig b/test/cases/compile_errors/function_parameter_is_opaque.zig index 57c89bd7f4..61e15f9ae6 100644 --- a/test/cases/compile_errors/function_parameter_is_opaque.zig +++ b/test/cases/compile_errors/function_parameter_is_opaque.zig @@ -9,12 +9,16 @@ export fn entry2() void { _ = someFuncPtr; } -fn foo(p: FooType) void {_ = p;} +fn foo(p: FooType) void { + _ = p; +} export fn entry3() void { _ = foo; } -fn bar(p: @TypeOf(null)) void {_ = p;} +fn bar(p: @TypeOf(null)) void { + _ = p; +} export fn entry4() void { _ = bar; } @@ -28,4 +32,4 @@ export fn entry4() void { // :8:28: error: parameter of type '@TypeOf(null)' not allowed // :12:8: error: parameter of opaque type 'tmp.FooType' not allowed // :1:17: note: opaque declared here -// :17:8: error: parameter of type '@TypeOf(null)' not allowed +// :19:8: error: parameter of type '@TypeOf(null)' not allowed diff --git a/test/cases/compile_errors/function_with_non-extern_non-packed_enum_parameter.zig b/test/cases/compile_errors/function_with_non-extern_non-packed_enum_parameter.zig index c6412161e5..ae347470f2 100644 --- a/test/cases/compile_errors/function_with_non-extern_non-packed_enum_parameter.zig +++ b/test/cases/compile_errors/function_with_non-extern_non-packed_enum_parameter.zig @@ -1,5 +1,7 @@ const Foo = enum { A, B, C }; -export fn entry(foo: Foo) void { _ = foo; } +export fn entry(foo: Foo) void { + _ = foo; +} // error // backend=stage2 diff --git a/test/cases/compile_errors/function_with_non-extern_non-packed_struct_parameter.zig b/test/cases/compile_errors/function_with_non-extern_non-packed_struct_parameter.zig index 55ee277641..137037f9e7 100644 --- a/test/cases/compile_errors/function_with_non-extern_non-packed_struct_parameter.zig +++ b/test/cases/compile_errors/function_with_non-extern_non-packed_struct_parameter.zig @@ -3,7 +3,9 @@ const Foo = struct { B: f32, C: bool, }; -export fn entry(foo: Foo) void { _ = foo; } +export fn entry(foo: Foo) void { + _ = foo; +} // error // backend=stage2 diff --git a/test/cases/compile_errors/function_with_non-extern_non-packed_union_parameter.zig b/test/cases/compile_errors/function_with_non-extern_non-packed_union_parameter.zig index f848392c90..d651329f72 100644 --- a/test/cases/compile_errors/function_with_non-extern_non-packed_union_parameter.zig +++ b/test/cases/compile_errors/function_with_non-extern_non-packed_union_parameter.zig @@ -3,7 +3,9 @@ const Foo = union { B: f32, C: bool, }; -export fn entry(foo: Foo) void { _ = foo; } +export fn entry(foo: Foo) void { + _ = foo; +} // error // backend=stage2 diff --git a/test/cases/compile_errors/generic_function_call_assigned_to_incorrect_type.zig b/test/cases/compile_errors/generic_function_call_assigned_to_incorrect_type.zig index a2e303670d..4ff2841282 100644 --- a/test/cases/compile_errors/generic_function_call_assigned_to_incorrect_type.zig +++ b/test/cases/compile_errors/generic_function_call_assigned_to_incorrect_type.zig @@ -2,7 +2,7 @@ pub export fn entry() void { var res: []i32 = undefined; res = myAlloc(i32); } -fn myAlloc(comptime arg: type) anyerror!arg{ +fn myAlloc(comptime arg: type) anyerror!arg { unreachable; } diff --git a/test/cases/compile_errors/generic_function_instance_with_non-constant_expression.zig b/test/cases/compile_errors/generic_function_instance_with_non-constant_expression.zig index 1317c4376a..18c60cd4aa 100644 --- a/test/cases/compile_errors/generic_function_instance_with_non-constant_expression.zig +++ b/test/cases/compile_errors/generic_function_instance_with_non-constant_expression.zig @@ -1,13 +1,17 @@ -fn foo(comptime x: i32, y: i32) i32 { return x + y; } +fn foo(comptime x: i32, y: i32) i32 { + return x + y; +} fn test1(a: i32, b: i32) i32 { return foo(a, b); } -export fn entry() usize { return @sizeOf(@TypeOf(&test1)); } +export fn entry() usize { + return @sizeOf(@TypeOf(&test1)); +} // error // backend=stage2 // target=native // -// :3:16: error: unable to resolve comptime value -// :3:16: note: parameter is comptime +// :5:16: error: unable to resolve comptime value +// :5:16: note: parameter is comptime diff --git a/test/cases/compile_errors/generic_instantiation_failure_in_generic_function_return_type.zig b/test/cases/compile_errors/generic_instantiation_failure_in_generic_function_return_type.zig index 3146c38604..c730f80e6f 100644 --- a/test/cases/compile_errors/generic_instantiation_failure_in_generic_function_return_type.zig +++ b/test/cases/compile_errors/generic_instantiation_failure_in_generic_function_return_type.zig @@ -6,7 +6,6 @@ pub export fn entry() void { } fn sliceAsBytes(slice: anytype) std.meta.trait.isPtrTo(.Array)(@TypeOf(slice)) {} - // error // backend=llvm // target=native diff --git a/test/cases/compile_errors/global_variable_alignment_non_power_of_2.zig b/test/cases/compile_errors/global_variable_alignment_non_power_of_2.zig index b88d8aaf70..5110e41334 100644 --- a/test/cases/compile_errors/global_variable_alignment_non_power_of_2.zig +++ b/test/cases/compile_errors/global_variable_alignment_non_power_of_2.zig @@ -1,5 +1,7 @@ const some_data: [100]u8 align(3) = undefined; -export fn entry() usize { return @sizeOf(@TypeOf(some_data)); } +export fn entry() usize { + return @sizeOf(@TypeOf(some_data)); +} // error // backend=stage2 diff --git a/test/cases/compile_errors/global_variable_initializer_must_be_constant_expression.zig b/test/cases/compile_errors/global_variable_initializer_must_be_constant_expression.zig index e2694343e8..a87f628396 100644 --- a/test/cases/compile_errors/global_variable_initializer_must_be_constant_expression.zig +++ b/test/cases/compile_errors/global_variable_initializer_must_be_constant_expression.zig @@ -1,6 +1,8 @@ extern fn foo() i32; const x = foo(); -export fn entry() i32 { return x; } +export fn entry() i32 { + return x; +} // error // backend=stage2 diff --git a/test/cases/compile_errors/ignored_assert-err-ok_return_value.zig b/test/cases/compile_errors/ignored_assert-err-ok_return_value.zig index 39657badd4..1257636622 100644 --- a/test/cases/compile_errors/ignored_assert-err-ok_return_value.zig +++ b/test/cases/compile_errors/ignored_assert-err-ok_return_value.zig @@ -1,7 +1,9 @@ export fn foo() void { bar() catch unreachable; } -fn bar() anyerror!i32 { return 0; } +fn bar() anyerror!i32 { + return 0; +} // error // backend=stage2 diff --git a/test/cases/compile_errors/ignored_comptime_statement_value.zig b/test/cases/compile_errors/ignored_comptime_statement_value.zig index fc6cdfdd28..2067f3b716 100644 --- a/test/cases/compile_errors/ignored_comptime_statement_value.zig +++ b/test/cases/compile_errors/ignored_comptime_statement_value.zig @@ -1,11 +1,13 @@ export fn foo() void { - comptime {1;} + comptime { + 1; + } } // error // backend=stage2 // target=native // -// :2:15: error: value of type 'comptime_int' ignored -// :2:15: note: all non-void values must be used -// :2:15: note: this error can be suppressed by assigning the value to '_' +// :3:9: error: value of type 'comptime_int' ignored +// :3:9: note: all non-void values must be used +// :3:9: note: this error can be suppressed by assigning the value to '_' diff --git a/test/cases/compile_errors/ignored_deferred_function_call.zig b/test/cases/compile_errors/ignored_deferred_function_call.zig index b318baa16c..9537255d33 100644 --- a/test/cases/compile_errors/ignored_deferred_function_call.zig +++ b/test/cases/compile_errors/ignored_deferred_function_call.zig @@ -1,7 +1,9 @@ export fn foo() void { defer bar(); } -fn bar() anyerror!i32 { return 0; } +fn bar() anyerror!i32 { + return 0; +} // error // backend=stage2 diff --git a/test/cases/compile_errors/ignored_deferred_statement_value.zig b/test/cases/compile_errors/ignored_deferred_statement_value.zig index 9a270497af..1f42efc3f5 100644 --- a/test/cases/compile_errors/ignored_deferred_statement_value.zig +++ b/test/cases/compile_errors/ignored_deferred_statement_value.zig @@ -1,11 +1,13 @@ export fn foo() void { - defer {1;} + defer { + 1; + } } // error // backend=stage2 // target=native // -// :2:12: error: value of type 'comptime_int' ignored -// :2:12: note: all non-void values must be used -// :2:12: note: this error can be suppressed by assigning the value to '_' +// :3:9: error: value of type 'comptime_int' ignored +// :3:9: note: all non-void values must be used +// :3:9: note: this error can be suppressed by assigning the value to '_' diff --git a/test/cases/compile_errors/ignored_return_value.zig b/test/cases/compile_errors/ignored_return_value.zig index 57f859e3d3..08424c4fe9 100644 --- a/test/cases/compile_errors/ignored_return_value.zig +++ b/test/cases/compile_errors/ignored_return_value.zig @@ -1,7 +1,9 @@ export fn foo() void { bar(); } -fn bar() i32 { return 0; } +fn bar() i32 { + return 0; +} // error // backend=stage2 diff --git a/test/cases/compile_errors/illegal_comparison_of_types.zig b/test/cases/compile_errors/illegal_comparison_of_types.zig index 69d7a28fa4..5720aa05cc 100644 --- a/test/cases/compile_errors/illegal_comparison_of_types.zig +++ b/test/cases/compile_errors/illegal_comparison_of_types.zig @@ -9,8 +9,12 @@ fn bad_eql_2(a: *const EnumWithData, b: *const EnumWithData) bool { return a.* == b.*; } -export fn entry1() usize { return @sizeOf(@TypeOf(&bad_eql_1)); } -export fn entry2() usize { return @sizeOf(@TypeOf(&bad_eql_2)); } +export fn entry1() usize { + return @sizeOf(@TypeOf(&bad_eql_1)); +} +export fn entry2() usize { + return @sizeOf(@TypeOf(&bad_eql_2)); +} // error // backend=stage2 diff --git a/test/cases/compile_errors/implicit_cast_from_array_to_mutable_slice.zig b/test/cases/compile_errors/implicit_cast_from_array_to_mutable_slice.zig index e7ae5d7277..1efc375425 100644 --- a/test/cases/compile_errors/implicit_cast_from_array_to_mutable_slice.zig +++ b/test/cases/compile_errors/implicit_cast_from_array_to_mutable_slice.zig @@ -1,5 +1,7 @@ var global_array: [10]i32 = undefined; -fn foo(param: []i32) void {_ = param;} +fn foo(param: []i32) void { + _ = param; +} export fn entry() void { foo(global_array); } @@ -8,4 +10,4 @@ export fn entry() void { // backend=llvm // target=native // -// :4:9: error: array literal requires address-of operator (&) to coerce to slice type '[]i32' +// :6:9: error: array literal requires address-of operator (&) to coerce to slice type '[]i32' diff --git a/test/cases/compile_errors/implicitly_increasing_pointer_alignment.zig b/test/cases/compile_errors/implicitly_increasing_pointer_alignment.zig index 13adba1b91..fcecfa8611 100644 --- a/test/cases/compile_errors/implicitly_increasing_pointer_alignment.zig +++ b/test/cases/compile_errors/implicitly_increasing_pointer_alignment.zig @@ -4,7 +4,7 @@ const Foo = packed struct { }; export fn entry() void { - var foo = Foo { .a = 1, .b = 10 }; + var foo = Foo{ .a = 1, .b = 10 }; bar(&foo.b); } diff --git a/test/cases/compile_errors/implicitly_increasing_slice_alignment.zig b/test/cases/compile_errors/implicitly_increasing_slice_alignment.zig index 84ec6464f4..171936097d 100644 --- a/test/cases/compile_errors/implicitly_increasing_slice_alignment.zig +++ b/test/cases/compile_errors/implicitly_increasing_slice_alignment.zig @@ -4,7 +4,7 @@ const Foo = packed struct { }; export fn entry() void { - var foo = Foo { .a = 1, .b = 10 }; + var foo = Foo{ .a = 1, .b = 10 }; foo.b += 1; bar(@as(*[1]u32, &foo.b)[0..]); } diff --git a/test/cases/compile_errors/import_outside_package_path.zig b/test/cases/compile_errors/import_outside_package_path.zig index 0c0df59419..34044e3b0f 100644 --- a/test/cases/compile_errors/import_outside_package_path.zig +++ b/test/cases/compile_errors/import_outside_package_path.zig @@ -1,4 +1,4 @@ -comptime{ +comptime { _ = @import("../a.zig"); } diff --git a/test/cases/compile_errors/incorrect_return_type.zig b/test/cases/compile_errors/incorrect_return_type.zig index 57cf54a023..798b167dcb 100644 --- a/test/cases/compile_errors/incorrect_return_type.zig +++ b/test/cases/compile_errors/incorrect_return_type.zig @@ -1,24 +1,24 @@ - pub export fn entry() void{ - _ = foo(); - } - const A = struct { - a: u32, - }; - fn foo() A { - return bar(); - } - const B = struct { - a: u32, - }; - fn bar() B { - unreachable; - } +pub export fn entry() void { + _ = foo(); +} +const A = struct { + a: u32, +}; +fn foo() A { + return bar(); +} +const B = struct { + a: u32, +}; +fn bar() B { + unreachable; +} // error // backend=stage2 // target=native // -// :8:16: error: expected type 'tmp.A', found 'tmp.B' -// :10:12: note: struct declared here -// :4:12: note: struct declared here -// :7:11: note: function return type declared here +// :8:15: error: expected type 'tmp.A', found 'tmp.B' +// :10:11: note: struct declared here +// :4:11: note: struct declared here +// :7:10: note: function return type declared here diff --git a/test/cases/compile_errors/increase_pointer_alignment_in_ptrCast.zig b/test/cases/compile_errors/increase_pointer_alignment_in_ptrCast.zig index 242454e859..8d7e14acae 100644 --- a/test/cases/compile_errors/increase_pointer_alignment_in_ptrCast.zig +++ b/test/cases/compile_errors/increase_pointer_alignment_in_ptrCast.zig @@ -1,5 +1,5 @@ export fn entry() u32 { - var bytes: [4]u8 = [_]u8{0x01, 0x02, 0x03, 0x04}; + var bytes: [4]u8 = [_]u8{ 0x01, 0x02, 0x03, 0x04 }; const ptr = @ptrCast(*u32, &bytes[0]); return ptr.*; } diff --git a/test/cases/compile_errors/indirect_struct_loop.zig b/test/cases/compile_errors/indirect_struct_loop.zig index dca2b9c3f6..ef5526830e 100644 --- a/test/cases/compile_errors/indirect_struct_loop.zig +++ b/test/cases/compile_errors/indirect_struct_loop.zig @@ -1,13 +1,21 @@ -const A = struct { b : B, }; -const B = struct { c : C, }; -const C = struct { a : A, }; -export fn entry() usize { return @sizeOf(A); } +const A = struct { + b: B, +}; +const B = struct { + c: C, +}; +const C = struct { + a: A, +}; +export fn entry() usize { + return @sizeOf(A); +} // error // backend=stage2 // target=native // // :1:11: error: struct 'tmp.A' depends on itself -// :3:20: note: while checking this field -// :2:20: note: while checking this field -// :1:20: note: while checking this field +// :8:5: note: while checking this field +// :5:5: note: while checking this field +// :2:5: note: while checking this field diff --git a/test/cases/compile_errors/inferred_array_size_invalid_here.zig b/test/cases/compile_errors/inferred_array_size_invalid_here.zig index 084057dc8e..0791540ed2 100644 --- a/test/cases/compile_errors/inferred_array_size_invalid_here.zig +++ b/test/cases/compile_errors/inferred_array_size_invalid_here.zig @@ -4,7 +4,7 @@ export fn entry() void { } export fn entry2() void { const S = struct { a: *const [_]u8 }; - var a = .{ S{} }; + var a = .{S{}}; _ = a; } diff --git a/test/cases/compile_errors/inferring_error_set_of_function_pointer.zig b/test/cases/compile_errors/inferring_error_set_of_function_pointer.zig index 862e33906a..ce1b276360 100644 --- a/test/cases/compile_errors/inferring_error_set_of_function_pointer.zig +++ b/test/cases/compile_errors/inferring_error_set_of_function_pointer.zig @@ -1,9 +1,9 @@ comptime { - const z: ?fn()!void = null; + const z: ?fn () !void = null; } // error // backend=stage2 // target=native // -// :2:19: error: function prototype may not have inferred error set +// :2:21: error: function prototype may not have inferred error set diff --git a/test/cases/compile_errors/int-float_conversion_to_comptime_int-float.zig b/test/cases/compile_errors/int-float_conversion_to_comptime_int-float.zig index 4c3b3fc1ae..ecf8f61fc5 100644 --- a/test/cases/compile_errors/int-float_conversion_to_comptime_int-float.zig +++ b/test/cases/compile_errors/int-float_conversion_to_comptime_int-float.zig @@ -1,17 +1,17 @@ export fn foo() void { var a: f32 = 2; - _ = @floatToInt(comptime_int, a); + _ = @intFromFloat(comptime_int, a); } export fn bar() void { var a: u32 = 2; - _ = @intToFloat(comptime_float, a); + _ = @floatFromInt(comptime_float, a); } // error // backend=stage2 // target=native // -// :3:35: error: unable to resolve comptime value -// :3:35: note: value being casted to 'comptime_int' must be comptime-known -// :7:37: error: unable to resolve comptime value -// :7:37: note: value being casted to 'comptime_float' must be comptime-known +// :3:37: error: unable to resolve comptime value +// :3:37: note: value being casted to 'comptime_int' must be comptime-known +// :7:39: error: unable to resolve comptime value +// :7:39: note: value being casted to 'comptime_float' must be comptime-known diff --git a/test/cases/compile_errors/intFromFloat_comptime_safety.zig b/test/cases/compile_errors/intFromFloat_comptime_safety.zig new file mode 100644 index 0000000000..275f67006f --- /dev/null +++ b/test/cases/compile_errors/intFromFloat_comptime_safety.zig @@ -0,0 +1,17 @@ +comptime { + _ = @intFromFloat(i8, @as(f32, -129.1)); +} +comptime { + _ = @intFromFloat(u8, @as(f32, -1.1)); +} +comptime { + _ = @intFromFloat(u8, @as(f32, 256.1)); +} + +// error +// backend=stage2 +// target=native +// +// :2:27: error: float value '-129.10000610351562' cannot be stored in integer type 'i8' +// :5:27: error: float value '-1.100000023841858' cannot be stored in integer type 'u8' +// :8:27: error: float value '256.1000061035156' cannot be stored in integer type 'u8' diff --git a/test/cases/compile_errors/intFromPtr_0_to_non_optional_pointer.zig b/test/cases/compile_errors/intFromPtr_0_to_non_optional_pointer.zig new file mode 100644 index 0000000000..4a2ea05eaa --- /dev/null +++ b/test/cases/compile_errors/intFromPtr_0_to_non_optional_pointer.zig @@ -0,0 +1,10 @@ +export fn entry() void { + var b = @ptrFromInt(*i32, 0); + _ = b; +} + +// error +// backend=stage2 +// target=native +// +// :2:31: error: pointer type '*i32' does not allow address zero diff --git a/test/cases/compile_errors/intToPtr_with_misaligned_address.zig b/test/cases/compile_errors/intToPtr_with_misaligned_address.zig deleted file mode 100644 index 43f89ab3b5..0000000000 --- a/test/cases/compile_errors/intToPtr_with_misaligned_address.zig +++ /dev/null @@ -1,10 +0,0 @@ -pub export fn entry() void { - var y = @intToPtr([*]align(4) u8, 5); - _ = y; -} - -// error -// backend=stage2 -// target=native -// -// :2:39: error: pointer type '[*]align(4) u8' requires aligned address diff --git a/test/cases/compile_errors/int_to_err_global_invalid_number.zig b/test/cases/compile_errors/int_to_err_global_invalid_number.zig index 5bb9b75a8e..000b5d1e6a 100644 --- a/test/cases/compile_errors/int_to_err_global_invalid_number.zig +++ b/test/cases/compile_errors/int_to_err_global_invalid_number.zig @@ -4,7 +4,7 @@ const Set1 = error{ }; comptime { var x: u16 = 3; - var y = @intToError(x); + var y = @errorFromInt(x); _ = y; } @@ -12,4 +12,4 @@ comptime { // backend=stage2 // target=native // -// :7:25: error: integer value '3' represents no error +// :7:27: error: integer value '3' represents no error diff --git a/test/cases/compile_errors/int_to_err_non_global_invalid_number.zig b/test/cases/compile_errors/int_to_err_non_global_invalid_number.zig index f837ccd532..6a1f2db531 100644 --- a/test/cases/compile_errors/int_to_err_non_global_invalid_number.zig +++ b/test/cases/compile_errors/int_to_err_non_global_invalid_number.zig @@ -7,8 +7,8 @@ const Set2 = error{ C, }; comptime { - var x = @errorToInt(Set1.B); - var y = @errSetCast(Set2, @intToError(x)); + var x = @intFromError(Set1.B); + var y = @errSetCast(Set2, @errorFromInt(x)); _ = y; } diff --git a/test/cases/compile_errors/integer_overflow_error.zig b/test/cases/compile_errors/integer_overflow_error.zig index aa4725b7e7..9de1a2820f 100644 --- a/test/cases/compile_errors/integer_overflow_error.zig +++ b/test/cases/compile_errors/integer_overflow_error.zig @@ -1,8 +1,10 @@ -const x : u8 = 300; -export fn entry() usize { return @sizeOf(@TypeOf(x)); } +const x: u8 = 300; +export fn entry() usize { + return @sizeOf(@TypeOf(x)); +} // error // backend=stage2 // target=native // -// :1:16: error: type 'u8' cannot represent integer value '300' +// :1:15: error: type 'u8' cannot represent integer value '300' diff --git a/test/cases/compile_errors/integer_underflow_error.zig b/test/cases/compile_errors/integer_underflow_error.zig index 120edd0838..275b593ecc 100644 --- a/test/cases/compile_errors/integer_underflow_error.zig +++ b/test/cases/compile_errors/integer_underflow_error.zig @@ -1,9 +1,9 @@ export fn entry() void { - _ = @intToPtr(*anyopaque, ~@as(usize, @import("std").math.maxInt(usize)) - 1); + _ = @ptrFromInt(*anyopaque, ~@as(usize, @import("std").math.maxInt(usize)) - 1); } // error // backend=stage2 // target=native // -// :2:78: error: overflow of integer type 'usize' with value '-1' +// :2:80: error: overflow of integer type 'usize' with value '-1' diff --git a/test/cases/compile_errors/inttoptr_non_ptr_type.zig b/test/cases/compile_errors/inttoptr_non_ptr_type.zig deleted file mode 100644 index fa308f677d..0000000000 --- a/test/cases/compile_errors/inttoptr_non_ptr_type.zig +++ /dev/null @@ -1,15 +0,0 @@ -pub export fn entry() void { - _ = @intToPtr(i32, 10); -} - -pub export fn entry2() void { - _ = @intToPtr([]u8, 20); -} - -// error -// backend=stage2 -// target=native -// -// :2:19: error: expected pointer type, found 'i32' -// :6:19: error: integer cannot be converted to slice type '[]u8' -// :6:19: note: slice length cannot be inferred from address diff --git a/test/cases/compile_errors/invalid_builtin_fn.zig b/test/cases/compile_errors/invalid_builtin_fn.zig index 5b7b832177..3297525fd9 100644 --- a/test/cases/compile_errors/invalid_builtin_fn.zig +++ b/test/cases/compile_errors/invalid_builtin_fn.zig @@ -1,6 +1,7 @@ -fn f() @bogus(foo) { +fn f() @bogus(foo) {} +export fn entry() void { + _ = f(); } -export fn entry() void { _ = f(); } // error // backend=stage2 diff --git a/test/cases/compile_errors/invalid_capture_type.zig b/test/cases/compile_errors/invalid_capture_type.zig index 3813021c95..6f480df097 100644 --- a/test/cases/compile_errors/invalid_capture_type.zig +++ b/test/cases/compile_errors/invalid_capture_type.zig @@ -1,5 +1,7 @@ export fn f1() void { - if (true) |x| { _ = x; } + if (true) |x| { + _ = x; + } } export fn f2() void { if (@as(usize, 5)) |_| {} @@ -19,6 +21,6 @@ export fn f5() void { // target=native // // :2:9: error: expected optional type, found 'bool' -// :5:9: error: expected optional type, found 'usize' -// :8:9: error: expected error union type, found 'usize' -// :14:9: error: expected error union type, found 'error{Foo}' +// :7:9: error: expected optional type, found 'usize' +// :10:9: error: expected error union type, found 'usize' +// :16:9: error: expected error union type, found 'error{Foo}' diff --git a/test/cases/compile_errors/invalid_comparison_for_function_pointers.zig b/test/cases/compile_errors/invalid_comparison_for_function_pointers.zig index cd63c70259..3c76da2e38 100644 --- a/test/cases/compile_errors/invalid_comparison_for_function_pointers.zig +++ b/test/cases/compile_errors/invalid_comparison_for_function_pointers.zig @@ -1,7 +1,9 @@ fn foo() void {} const invalid = foo > foo; -export fn entry() usize { return @sizeOf(@TypeOf(invalid)); } +export fn entry() usize { + return @sizeOf(@TypeOf(invalid)); +} // error // backend=stage2 diff --git a/test/cases/compile_errors/invalid_field_access_in_comptime.zig b/test/cases/compile_errors/invalid_field_access_in_comptime.zig index 672c2b74c9..74fada311d 100644 --- a/test/cases/compile_errors/invalid_field_access_in_comptime.zig +++ b/test/cases/compile_errors/invalid_field_access_in_comptime.zig @@ -1,7 +1,10 @@ -comptime { var x = doesnt_exist.whatever; _ = x; } +comptime { + var x = doesnt_exist.whatever; + _ = x; +} // error // backend=stage2 // target=native // -// :1:20: error: use of undeclared identifier 'doesnt_exist' +// :2:13: error: use of undeclared identifier 'doesnt_exist' diff --git a/test/cases/compile_errors/invalid_field_in_struct_value_expression.zig b/test/cases/compile_errors/invalid_field_in_struct_value_expression.zig index 97f440da3b..f1cd96d8e7 100644 --- a/test/cases/compile_errors/invalid_field_in_struct_value_expression.zig +++ b/test/cases/compile_errors/invalid_field_in_struct_value_expression.zig @@ -1,10 +1,10 @@ const A = struct { - x : i32, - y : i32, - z : i32, + x: i32, + y: i32, + z: i32, }; export fn f() void { - const a = A { + const a = A{ .z = 4, .y = 2, .foo = 42, @@ -21,7 +21,6 @@ pub export fn entry() void { dump(.{ .field_1 = 123, .field_3 = 456 }); } - // error // backend=stage2 // target=native diff --git a/test/cases/compile_errors/invalid_float_casts.zig b/test/cases/compile_errors/invalid_float_casts.zig index 152c98182b..507ced1e57 100644 --- a/test/cases/compile_errors/invalid_float_casts.zig +++ b/test/cases/compile_errors/invalid_float_casts.zig @@ -4,11 +4,11 @@ export fn foo() void { } export fn bar() void { var a: f32 = 2; - _ = @floatToInt(f32, a); + _ = @intFromFloat(f32, a); } export fn baz() void { var a: f32 = 2; - _ = @intToFloat(f32, a); + _ = @floatFromInt(f32, a); } export fn qux() void { var a: u32 = 2; @@ -20,6 +20,6 @@ export fn qux() void { // target=native // // :3:36: error: unable to cast runtime value to 'comptime_float' -// :7:21: error: expected integer type, found 'f32' -// :11:26: error: expected integer type, found 'f32' +// :7:23: error: expected integer type, found 'f32' +// :11:28: error: expected integer type, found 'f32' // :15:25: error: expected float type, found 'u32' diff --git a/test/cases/compile_errors/invalid_int_casts.zig b/test/cases/compile_errors/invalid_int_casts.zig index d220869201..262a096bd9 100644 --- a/test/cases/compile_errors/invalid_int_casts.zig +++ b/test/cases/compile_errors/invalid_int_casts.zig @@ -4,11 +4,11 @@ export fn foo() void { } export fn bar() void { var a: u32 = 2; - _ = @intToFloat(u32, a); + _ = @floatFromInt(u32, a); } export fn baz() void { var a: u32 = 2; - _ = @floatToInt(u32, a); + _ = @intFromFloat(u32, a); } export fn qux() void { var a: f32 = 2; @@ -20,6 +20,6 @@ export fn qux() void { // target=native // // :3:32: error: unable to cast runtime value to 'comptime_int' -// :7:21: error: expected float type, found 'u32' -// :11:26: error: expected float type, found 'u32' +// :7:23: error: expected float type, found 'u32' +// :11:28: error: expected float type, found 'u32' // :15:23: error: expected integer or vector, found 'f32' diff --git a/test/cases/compile_errors/invalid_non-exhaustive_enum_to_union.zig b/test/cases/compile_errors/invalid_non-exhaustive_enum_to_union.zig index fa58c0845a..5457a61d3f 100644 --- a/test/cases/compile_errors/invalid_non-exhaustive_enum_to_union.zig +++ b/test/cases/compile_errors/invalid_non-exhaustive_enum_to_union.zig @@ -8,12 +8,12 @@ const U = union(E) { b, }; export fn foo() void { - var e = @intToEnum(E, 15); + var e = @enumFromInt(E, 15); var u: U = e; _ = u; } export fn bar() void { - const e = @intToEnum(E, 15); + const e = @enumFromInt(E, 15); var u: U = e; _ = u; } @@ -24,5 +24,5 @@ export fn bar() void { // // :12:16: error: runtime coercion to union 'tmp.U' from non-exhaustive enum // :1:11: note: enum declared here -// :17:16: error: union 'tmp.U' has no tag with value '@intToEnum(tmp.E, 15)' +// :17:16: error: union 'tmp.U' has no tag with value '@enumFromInt(tmp.E, 15)' // :6:11: note: union declared here diff --git a/test/cases/compile_errors/invalid_optional_type_in_extern_struct.zig b/test/cases/compile_errors/invalid_optional_type_in_extern_struct.zig index 10e140d881..c7d7b4233a 100644 --- a/test/cases/compile_errors/invalid_optional_type_in_extern_struct.zig +++ b/test/cases/compile_errors/invalid_optional_type_in_extern_struct.zig @@ -1,7 +1,9 @@ const stroo = extern struct { moo: ?[*c]u8, }; -export fn testf(fluff: *stroo) void { _ = fluff; } +export fn testf(fluff: *stroo) void { + _ = fluff; +} // error // backend=stage2 diff --git a/test/cases/compile_errors/invalid_pointer_with_reify_type.zig b/test/cases/compile_errors/invalid_pointer_with_reify_type.zig index cac9e32894..dce09234d4 100644 --- a/test/cases/compile_errors/invalid_pointer_with_reify_type.zig +++ b/test/cases/compile_errors/invalid_pointer_with_reify_type.zig @@ -8,7 +8,7 @@ export fn entry() void { .child = u8, .is_allowzero = false, .sentinel = &@as(u8, 0), - }}); + } }); } // error diff --git a/test/cases/compile_errors/invalid_shift_amount_error.zig b/test/cases/compile_errors/invalid_shift_amount_error.zig index 49852b5b7d..9ea4c55d29 100644 --- a/test/cases/compile_errors/invalid_shift_amount_error.zig +++ b/test/cases/compile_errors/invalid_shift_amount_error.zig @@ -1,8 +1,10 @@ -const x : u8 = 2; +const x: u8 = 2; fn f() u16 { return x << 8; } -export fn entry() u16 { return f(); } +export fn entry() u16 { + return f(); +} // error // backend=stage2 diff --git a/test/cases/compile_errors/invalid_type.zig b/test/cases/compile_errors/invalid_type.zig index 902d3652e7..a7c7d81094 100644 --- a/test/cases/compile_errors/invalid_type.zig +++ b/test/cases/compile_errors/invalid_type.zig @@ -1,5 +1,7 @@ fn a() bogus {} -export fn entry() void { _ = a(); } +export fn entry() void { + _ = a(); +} // error // backend=stage2 diff --git a/test/cases/compile_errors/invalid_type_in_builtin_extern.zig b/test/cases/compile_errors/invalid_type_in_builtin_extern.zig index c3d35958ae..882febbb73 100644 --- a/test/cases/compile_errors/invalid_type_in_builtin_extern.zig +++ b/test/cases/compile_errors/invalid_type_in_builtin_extern.zig @@ -1,4 +1,4 @@ -const x = @extern(*comptime_int, .{.name="foo"}); +const x = @extern(*comptime_int, .{ .name = "foo" }); pub export fn entry() void { _ = x; } diff --git a/test/cases/compile_errors/invalid_variadic_function.zig b/test/cases/compile_errors/invalid_variadic_function.zig index 997db9fee8..7652cb329a 100644 --- a/test/cases/compile_errors/invalid_variadic_function.zig +++ b/test/cases/compile_errors/invalid_variadic_function.zig @@ -1,8 +1,12 @@ fn foo(...) void {} fn bar(a: anytype, ...) callconv(a) void {} -comptime { _ = foo; } -comptime { _ = bar; } +comptime { + _ = foo; +} +comptime { + _ = bar; +} // error // backend=stage2 diff --git a/test/cases/compile_errors/issue_3818_bitcast_from_parray-slice_to_u16.zig b/test/cases/compile_errors/issue_3818_bitcast_from_parray-slice_to_u16.zig index 874f015ffb..7a4c0eb7e8 100644 --- a/test/cases/compile_errors/issue_3818_bitcast_from_parray-slice_to_u16.zig +++ b/test/cases/compile_errors/issue_3818_bitcast_from_parray-slice_to_u16.zig @@ -1,10 +1,10 @@ export fn foo1() void { - var bytes = [_]u8{1, 2}; + var bytes = [_]u8{ 1, 2 }; const word: u16 = @bitCast(u16, bytes[0..]); _ = word; } export fn foo2() void { - var bytes: []const u8 = &[_]u8{1, 2}; + var bytes: []const u8 = &[_]u8{ 1, 2 }; const word: u16 = @bitCast(u16, bytes); _ = word; } @@ -14,6 +14,6 @@ export fn foo2() void { // target=native // // :3:42: error: cannot @bitCast from '*[2]u8' -// :3:42: note: use @ptrToInt to cast to 'u16' +// :3:42: note: use @intFromPtr to cast to 'u16' // :8:37: error: cannot @bitCast from '[]const u8' -// :8:37: note: use @ptrToInt to cast to 'u16' +// :8:37: note: use @intFromPtr to cast to 'u16' diff --git a/test/cases/compile_errors/local_variable_redeclaration.zig b/test/cases/compile_errors/local_variable_redeclaration.zig index a0861ada49..5b81cd5fbc 100644 --- a/test/cases/compile_errors/local_variable_redeclaration.zig +++ b/test/cases/compile_errors/local_variable_redeclaration.zig @@ -1,5 +1,5 @@ export fn f() void { - const a : i32 = 0; + const a: i32 = 0; var a = 0; } diff --git a/test/cases/compile_errors/local_variable_redeclares_parameter.zig b/test/cases/compile_errors/local_variable_redeclares_parameter.zig index 6e523c2c8f..f49b7f137e 100644 --- a/test/cases/compile_errors/local_variable_redeclares_parameter.zig +++ b/test/cases/compile_errors/local_variable_redeclares_parameter.zig @@ -1,7 +1,9 @@ -fn f(a : i32) void { +fn f(a: i32) void { const a = 0; } -export fn entry() void { f(1); } +export fn entry() void { + f(1); +} // error // backend=stage2 diff --git a/test/cases/compile_errors/local_variable_shadowing_global.zig b/test/cases/compile_errors/local_variable_shadowing_global.zig index 91df6a7c3d..e3f221d0c5 100644 --- a/test/cases/compile_errors/local_variable_shadowing_global.zig +++ b/test/cases/compile_errors/local_variable_shadowing_global.zig @@ -2,7 +2,7 @@ const Foo = struct {}; const Bar = struct {}; export fn entry() void { - var Bar : i32 = undefined; + var Bar: i32 = undefined; _ = Bar; } diff --git a/test/cases/compile_errors/main_function_with_bogus_args_type.zig b/test/cases/compile_errors/main_function_with_bogus_args_type.zig index dd02e1af34..f0322e0484 100644 --- a/test/cases/compile_errors/main_function_with_bogus_args_type.zig +++ b/test/cases/compile_errors/main_function_with_bogus_args_type.zig @@ -1,4 +1,6 @@ -pub fn main(args: [][]bogus) !void {_ = args;} +pub fn main(args: [][]bogus) !void { + _ = args; +} // error // backend=stage2 diff --git a/test/cases/compile_errors/missing_const_in_slice_with_nested_array_type.zig b/test/cases/compile_errors/missing_const_in_slice_with_nested_array_type.zig index 1ef986935b..2f596db1ed 100644 --- a/test/cases/compile_errors/missing_const_in_slice_with_nested_array_type.zig +++ b/test/cases/compile_errors/missing_const_in_slice_with_nested_array_type.zig @@ -2,7 +2,7 @@ const Geo3DTex2D = struct { vertices: [][2]f32 }; pub fn getGeo3DTex2D() Geo3DTex2D { return Geo3DTex2D{ .vertices = [_][2]f32{ - [_]f32{ -0.5, -0.5}, + [_]f32{ -0.5, -0.5 }, }, }; } diff --git a/test/cases/compile_errors/missing_else_clause.zig b/test/cases/compile_errors/missing_else_clause.zig index e96363b9cd..13a164ddea 100644 --- a/test/cases/compile_errors/missing_else_clause.zig +++ b/test/cases/compile_errors/missing_else_clause.zig @@ -1,9 +1,13 @@ fn f(b: bool) void { - const x : i32 = if (b) h: { break :h 1; }; + const x: i32 = if (b) h: { + break :h 1; + }; _ = x; } fn g(b: bool) void { - const y = if (b) h: { break :h @as(i32, 1); }; + const y = if (b) h: { + break :h @as(i32, 1); + }; _ = y; } fn h() void { @@ -30,10 +34,10 @@ export fn entry() void { // backend=stage2 // target=native // -// :2:21: error: incompatible types: 'i32' and 'void' -// :2:31: note: type 'i32' here -// :6:15: error: incompatible types: 'i32' and 'void' -// :6:25: note: type 'i32' here -// :12:16: error: expected type 'tmp.h.T', found 'void' -// :11:15: note: struct declared here -// :18:9: error: incompatible types: 'void' and 'tmp.k.T' +// :2:20: error: incompatible types: 'i32' and 'void' +// :2:30: note: type 'i32' here +// :8:15: error: incompatible types: 'i32' and 'void' +// :8:25: note: type 'i32' here +// :16:16: error: expected type 'tmp.h.T', found 'void' +// :15:15: note: struct declared here +// :22:9: error: incompatible types: 'void' and 'tmp.k.T' diff --git a/test/cases/compile_errors/missing_field_in_struct_value_expression.zig b/test/cases/compile_errors/missing_field_in_struct_value_expression.zig index 600540d1e0..eec50ee1af 100644 --- a/test/cases/compile_errors/missing_field_in_struct_value_expression.zig +++ b/test/cases/compile_errors/missing_field_in_struct_value_expression.zig @@ -1,12 +1,12 @@ const A = struct { - x : i32, - y : i32, - z : i32, + x: i32, + y: i32, + z: i32, }; export fn f() void { // we want the error on the '{' not the 'A' because // the A could be a complicated expression - const a = A { + const a = A{ .z = 4, .y = 2, }; @@ -17,5 +17,5 @@ export fn f() void { // backend=stage2 // target=native // -// :9:17: error: missing struct field: x +// :9:16: error: missing struct field: x // :1:11: note: struct 'tmp.A' declared here diff --git a/test/cases/compile_errors/missing_main_fn_in_executable.zig b/test/cases/compile_errors/missing_main_fn_in_executable.zig index 3c1ae631ac..9f243356b7 100644 --- a/test/cases/compile_errors/missing_main_fn_in_executable.zig +++ b/test/cases/compile_errors/missing_main_fn_in_executable.zig @@ -1,5 +1,3 @@ - - // error // backend=llvm // target=x86_64-linux diff --git a/test/cases/compile_errors/missing_param_name.zig b/test/cases/compile_errors/missing_param_name.zig index 88da902ea2..1f679ea1d8 100644 --- a/test/cases/compile_errors/missing_param_name.zig +++ b/test/cases/compile_errors/missing_param_name.zig @@ -1,5 +1,7 @@ fn f(i32) void {} -export fn entry() usize { return @sizeOf(@TypeOf(f)); } +export fn entry() usize { + return @sizeOf(@TypeOf(f)); +} // error // backend=stage2 diff --git a/test/cases/compile_errors/misspelled_type_with_pointer_only_reference.zig b/test/cases/compile_errors/misspelled_type_with_pointer_only_reference.zig index ef8fce6c80..ca8adade01 100644 --- a/test/cases/compile_errors/misspelled_type_with_pointer_only_reference.zig +++ b/test/cases/compile_errors/misspelled_type_with_pointer_only_reference.zig @@ -24,11 +24,13 @@ pub const JsonNode = struct { fn foo() void { var jll: JasonList = undefined; jll.init(1234); - var jd = JsonNode {.kind = JsonType.JSONArray , .jobject = JsonOA.JSONArray {jll} }; + var jd = JsonNode{ .kind = JsonType.JSONArray, .jobject = JsonOA.JSONArray{jll} }; _ = jd; } -export fn entry() usize { return @sizeOf(@TypeOf(foo)); } +export fn entry() usize { + return @sizeOf(@TypeOf(foo)); +} // error // backend=stage2 diff --git a/test/cases/compile_errors/mul_overflow_in_function_evaluation.zig b/test/cases/compile_errors/mul_overflow_in_function_evaluation.zig index 6be57f770e..c484df7540 100644 --- a/test/cases/compile_errors/mul_overflow_in_function_evaluation.zig +++ b/test/cases/compile_errors/mul_overflow_in_function_evaluation.zig @@ -3,7 +3,9 @@ fn mul(a: u16, b: u16) u16 { return a * b; } -export fn entry() usize { return @sizeOf(@TypeOf(&y)); } +export fn entry() usize { + return @sizeOf(@TypeOf(&y)); +} // error // backend=stage2 @@ -11,4 +13,3 @@ export fn entry() usize { return @sizeOf(@TypeOf(&y)); } // // :3:14: error: overflow of integer type 'u16' with value '1800000' // :1:14: note: called from here - diff --git a/test/cases/compile_errors/multiple_function_definitions.zig b/test/cases/compile_errors/multiple_function_definitions.zig index d07eaee257..134daaeaa4 100644 --- a/test/cases/compile_errors/multiple_function_definitions.zig +++ b/test/cases/compile_errors/multiple_function_definitions.zig @@ -1,6 +1,8 @@ fn a() void {} fn a() void {} -export fn entry() void { a(); } +export fn entry() void { + a(); +} // error // backend=stage2 diff --git a/test/cases/compile_errors/negation_overflow_in_function_evaluation.zig b/test/cases/compile_errors/negation_overflow_in_function_evaluation.zig index abd8549fd2..208f761005 100644 --- a/test/cases/compile_errors/negation_overflow_in_function_evaluation.zig +++ b/test/cases/compile_errors/negation_overflow_in_function_evaluation.zig @@ -3,7 +3,9 @@ fn neg(x: i8) i8 { return -x; } -export fn entry() usize { return @sizeOf(@TypeOf(&y)); } +export fn entry() usize { + return @sizeOf(@TypeOf(&y)); +} // error // backend=stage2 diff --git a/test/cases/compile_errors/nested_vectors.zig b/test/cases/compile_errors/nested_vectors.zig index 11b09971e9..29934668b0 100644 --- a/test/cases/compile_errors/nested_vectors.zig +++ b/test/cases/compile_errors/nested_vectors.zig @@ -10,4 +10,3 @@ export fn entry() void { // target=native // // :3:16: error: expected integer, float, bool, or pointer for the vector element type; found '@Vector(4, u8)' - diff --git a/test/cases/compile_errors/noalias_on_non_pointer_param.zig b/test/cases/compile_errors/noalias_on_non_pointer_param.zig index 65e6e141ce..45641fcabc 100644 --- a/test/cases/compile_errors/noalias_on_non_pointer_param.zig +++ b/test/cases/compile_errors/noalias_on_non_pointer_param.zig @@ -1,11 +1,19 @@ -fn f(noalias x: i32) void { _ = x; } -export fn entry() void { f(1234); } +fn f(noalias x: i32) void { + _ = x; +} +export fn entry() void { + f(1234); +} -fn generic(comptime T: type, noalias _: [*]T, noalias _: [*]const T, _: usize) void {} -comptime { _ = &generic; } +fn generic(comptime T: type, noalias _: [*]T, noalias _: [*]const T, _: usize) void {} +comptime { + _ = &generic; +} -fn slice(noalias _: []u8) void {} -comptime { _ = &slice; } +fn slice(noalias _: []u8) void {} +comptime { + _ = &slice; +} // error // backend=stage2 diff --git a/test/cases/compile_errors/non-comptime-parameter-used-as-array-size.zig b/test/cases/compile_errors/non-comptime-parameter-used-as-array-size.zig index de5a3830eb..f5eba9ee62 100644 --- a/test/cases/compile_errors/non-comptime-parameter-used-as-array-size.zig +++ b/test/cases/compile_errors/non-comptime-parameter-used-as-array-size.zig @@ -5,8 +5,7 @@ export fn entry() void { _ = llamas2; } -fn makeLlamas(count: usize) [count]u8 { -} +fn makeLlamas(count: usize) [count]u8 {} // error // target=native diff --git a/test/cases/compile_errors/non-const_expression_function_call_with_struct_return_value_outside_function.zig b/test/cases/compile_errors/non-const_expression_function_call_with_struct_return_value_outside_function.zig index 4acd0afb81..d9bd0dd2b2 100644 --- a/test/cases/compile_errors/non-const_expression_function_call_with_struct_return_value_outside_function.zig +++ b/test/cases/compile_errors/non-const_expression_function_call_with_struct_return_value_outside_function.zig @@ -4,11 +4,13 @@ const Foo = struct { const a = get_it(); fn get_it() Foo { global_side_effect = true; - return Foo {.x = 13}; + return Foo{ .x = 13 }; } var global_side_effect = false; -export fn entry() usize { return @sizeOf(@TypeOf(a)); } +export fn entry() usize { + return @sizeOf(@TypeOf(a)); +} // error // backend=stage2 diff --git a/test/cases/compile_errors/non-const_expression_in_struct_literal_outside_function.zig b/test/cases/compile_errors/non-const_expression_in_struct_literal_outside_function.zig index 2e0043c5ec..c6d4e04fc1 100644 --- a/test/cases/compile_errors/non-const_expression_in_struct_literal_outside_function.zig +++ b/test/cases/compile_errors/non-const_expression_in_struct_literal_outside_function.zig @@ -1,10 +1,12 @@ const Foo = struct { x: i32, }; -const a = Foo {.x = get_it()}; +const a = Foo{ .x = get_it() }; extern fn get_it() i32; -export fn entry() usize { return @sizeOf(@TypeOf(a)); } +export fn entry() usize { + return @sizeOf(@TypeOf(a)); +} // error // backend=stage2 diff --git a/test/cases/compile_errors/non-const_variables_of_things_that_require_const_variables.zig b/test/cases/compile_errors/non-const_variables_of_things_that_require_const_variables.zig index cf65131a1f..48b92460c4 100644 --- a/test/cases/compile_errors/non-const_variables_of_things_that_require_const_variables.zig +++ b/test/cases/compile_errors/non-const_variables_of_things_that_require_const_variables.zig @@ -1,30 +1,30 @@ export fn entry1() void { - var m2 = &2; - _ = m2; + var m2 = &2; + _ = m2; } export fn entry2() void { - var a = undefined; - _ = a; + var a = undefined; + _ = a; } export fn entry3() void { - var b = 1; - _ = b; + var b = 1; + _ = b; } export fn entry4() void { - var c = 1.0; - _ = c; + var c = 1.0; + _ = c; } export fn entry5() void { - var d = null; - _ = d; + var d = null; + _ = d; } export fn entry6(opaque_: *Opaque) void { - var e = opaque_.*; - _ = e; + var e = opaque_.*; + _ = e; } export fn entry7() void { - var f = i32; - _ = f; + var f = i32; + _ = f; } const Opaque = opaque {}; @@ -32,14 +32,14 @@ const Opaque = opaque {}; // backend=stage2 // target=native // -// :2:8: error: variable of type '*const comptime_int' must be const or comptime -// :6:8: error: variable of type '@TypeOf(undefined)' must be const or comptime -// :10:8: error: variable of type 'comptime_int' must be const or comptime -// :10:8: note: to modify this variable at runtime, it must be given an explicit fixed-size number type -// :14:8: error: variable of type 'comptime_float' must be const or comptime -// :14:8: note: to modify this variable at runtime, it must be given an explicit fixed-size number type -// :18:8: error: variable of type '@TypeOf(null)' must be const or comptime -// :22:19: error: values of type 'tmp.Opaque' must be comptime-known, but operand value is runtime-known -// :22:19: note: opaque type 'tmp.Opaque' has undefined size -// :26:8: error: variable of type 'type' must be const or comptime -// :26:8: note: types are not available at runtime +// :2:9: error: variable of type '*const comptime_int' must be const or comptime +// :6:9: error: variable of type '@TypeOf(undefined)' must be const or comptime +// :10:9: error: variable of type 'comptime_int' must be const or comptime +// :10:9: note: to modify this variable at runtime, it must be given an explicit fixed-size number type +// :14:9: error: variable of type 'comptime_float' must be const or comptime +// :14:9: note: to modify this variable at runtime, it must be given an explicit fixed-size number type +// :18:9: error: variable of type '@TypeOf(null)' must be const or comptime +// :22:20: error: values of type 'tmp.Opaque' must be comptime-known, but operand value is runtime-known +// :22:20: note: opaque type 'tmp.Opaque' has undefined size +// :26:9: error: variable of type 'type' must be const or comptime +// :26:9: note: types are not available at runtime diff --git a/test/cases/compile_errors/non-exhaustive_enum_marker_assigned_a_value.zig b/test/cases/compile_errors/non-exhaustive_enum_marker_assigned_a_value.zig index c9ebb6af71..831845722b 100644 --- a/test/cases/compile_errors/non-exhaustive_enum_marker_assigned_a_value.zig +++ b/test/cases/compile_errors/non-exhaustive_enum_marker_assigned_a_value.zig @@ -8,7 +8,10 @@ const B = enum { b, _, }; -comptime { _ = A; _ = B; } +comptime { + _ = A; + _ = B; +} // error // backend=stage2 diff --git a/test/cases/compile_errors/non-inline_for_loop_on_a_type_that_requires_comptime.zig b/test/cases/compile_errors/non-inline_for_loop_on_a_type_that_requires_comptime.zig index ce72f912b8..2bb3f84cb9 100644 --- a/test/cases/compile_errors/non-inline_for_loop_on_a_type_that_requires_comptime.zig +++ b/test/cases/compile_errors/non-inline_for_loop_on_a_type_that_requires_comptime.zig @@ -4,7 +4,9 @@ const Foo = struct { }; export fn entry() void { const xx: [2]Foo = .{ .{ .name = "", .T = u8 }, .{ .name = "", .T = u8 } }; - for (xx) |f| { _ = f;} + for (xx) |f| { + _ = f; + } } // error diff --git a/test/cases/compile_errors/non_constant_expression_in_array_size.zig b/test/cases/compile_errors/non_constant_expression_in_array_size.zig index 07facfa0f2..7c4594a3e3 100644 --- a/test/cases/compile_errors/non_constant_expression_in_array_size.zig +++ b/test/cases/compile_errors/non_constant_expression_in_array_size.zig @@ -2,14 +2,18 @@ const Foo = struct { y: [get()]u8, }; var global_var: usize = 1; -fn get() usize { return global_var; } +fn get() usize { + return global_var; +} -export fn entry() usize { return @offsetOf(Foo, "y"); } +export fn entry() usize { + return @offsetOf(Foo, "y"); +} // error // backend=stage2 // target=native // -// :5:18: error: unable to resolve comptime value -// :5:18: note: value being returned at comptime must be comptime-known +// :6:5: error: unable to resolve comptime value +// :6:5: note: value being returned at comptime must be comptime-known // :2:12: note: called from here diff --git a/test/cases/compile_errors/non_float_passed_to_floatToInt.zig b/test/cases/compile_errors/non_float_passed_to_floatToInt.zig deleted file mode 100644 index 2d4e0315be..0000000000 --- a/test/cases/compile_errors/non_float_passed_to_floatToInt.zig +++ /dev/null @@ -1,10 +0,0 @@ -export fn entry() void { - const x = @floatToInt(i32, @as(i32, 54)); - _ = x; -} - -// error -// backend=stage2 -// target=native -// -// :2:32: error: expected float type, found 'i32' diff --git a/test/cases/compile_errors/non_float_passed_to_intFromFloat.zig b/test/cases/compile_errors/non_float_passed_to_intFromFloat.zig new file mode 100644 index 0000000000..fac51c59c8 --- /dev/null +++ b/test/cases/compile_errors/non_float_passed_to_intFromFloat.zig @@ -0,0 +1,10 @@ +export fn entry() void { + const x = @intFromFloat(i32, @as(i32, 54)); + _ = x; +} + +// error +// backend=stage2 +// target=native +// +// :2:34: error: expected float type, found 'i32' diff --git a/test/cases/compile_errors/non_int_passed_to_floatFromInt.zig b/test/cases/compile_errors/non_int_passed_to_floatFromInt.zig new file mode 100644 index 0000000000..63e6753a53 --- /dev/null +++ b/test/cases/compile_errors/non_int_passed_to_floatFromInt.zig @@ -0,0 +1,10 @@ +export fn entry() void { + const x = @floatFromInt(f32, 1.1); + _ = x; +} + +// error +// backend=stage2 +// target=native +// +// :2:34: error: expected integer type, found 'comptime_float' diff --git a/test/cases/compile_errors/non_int_passed_to_intToFloat.zig b/test/cases/compile_errors/non_int_passed_to_intToFloat.zig deleted file mode 100644 index f40fa93df0..0000000000 --- a/test/cases/compile_errors/non_int_passed_to_intToFloat.zig +++ /dev/null @@ -1,10 +0,0 @@ -export fn entry() void { - const x = @intToFloat(f32, 1.1); - _ = x; -} - -// error -// backend=stage2 -// target=native -// -// :2:32: error: expected integer type, found 'comptime_float' diff --git a/test/cases/compile_errors/non_pointer_given_to_ptrToInt.zig b/test/cases/compile_errors/non_pointer_given_to_intFromPtr.zig similarity index 52% rename from test/cases/compile_errors/non_pointer_given_to_ptrToInt.zig rename to test/cases/compile_errors/non_pointer_given_to_intFromPtr.zig index 27b5d6d1f7..cb8ea24f63 100644 --- a/test/cases/compile_errors/non_pointer_given_to_ptrToInt.zig +++ b/test/cases/compile_errors/non_pointer_given_to_intFromPtr.zig @@ -1,9 +1,9 @@ export fn entry(x: i32) usize { - return @ptrToInt(x); + return @intFromPtr(x); } // error // backend=stage2 // target=native // -// :2:22: error: expected pointer, found 'i32' +// :2:24: error: expected pointer, found 'i32' diff --git a/test/cases/compile_errors/offsetOf-bad_field_name.zig b/test/cases/compile_errors/offsetOf-bad_field_name.zig index eb04da3c68..ceded4f618 100644 --- a/test/cases/compile_errors/offsetOf-bad_field_name.zig +++ b/test/cases/compile_errors/offsetOf-bad_field_name.zig @@ -2,12 +2,15 @@ const Foo = struct { derp: i32, }; export fn foo() usize { - return @offsetOf(Foo, "a",); + return @offsetOf( + Foo, + "a", + ); } // error // backend=stage2 // target=native // -// :5:27: error: no field named 'a' in struct 'tmp.Foo' +// :7:9: error: no field named 'a' in struct 'tmp.Foo' // :1:13: note: struct declared here diff --git a/test/cases/compile_errors/offsetOf-non_struct.zig b/test/cases/compile_errors/offsetOf-non_struct.zig index 45e9cf9518..8970fa86d9 100644 --- a/test/cases/compile_errors/offsetOf-non_struct.zig +++ b/test/cases/compile_errors/offsetOf-non_struct.zig @@ -1,6 +1,6 @@ const Foo = i32; export fn foo() usize { - return @offsetOf(Foo, "a",); + return @offsetOf(Foo, "a"); } // error diff --git a/test/cases/compile_errors/old_fn_ptr_in_extern_context.zig b/test/cases/compile_errors/old_fn_ptr_in_extern_context.zig index 4f957a827c..7983ed8ec8 100644 --- a/test/cases/compile_errors/old_fn_ptr_in_extern_context.zig +++ b/test/cases/compile_errors/old_fn_ptr_in_extern_context.zig @@ -5,7 +5,7 @@ comptime { _ = @sizeOf(S) == 1; } comptime { - _ = [*c][4]fn() callconv(.C) void; + _ = [*c][4]fn () callconv(.C) void; } // error diff --git a/test/cases/compile_errors/out_of_int_range_comptime_float_passed_to_intFromFloat.zig b/test/cases/compile_errors/out_of_int_range_comptime_float_passed_to_intFromFloat.zig new file mode 100644 index 0000000000..574ffc5a20 --- /dev/null +++ b/test/cases/compile_errors/out_of_int_range_comptime_float_passed_to_intFromFloat.zig @@ -0,0 +1,10 @@ +export fn entry() void { + const x = @intFromFloat(i8, 200); + _ = x; +} + +// error +// backend=stage2 +// target=native +// +// :2:33: error: float value '200' cannot be stored in integer type 'i8' diff --git a/test/cases/compile_errors/out_of_range_comptime_int_passed_to_floatToInt.zig b/test/cases/compile_errors/out_of_range_comptime_int_passed_to_floatToInt.zig deleted file mode 100644 index 426e0c95cb..0000000000 --- a/test/cases/compile_errors/out_of_range_comptime_int_passed_to_floatToInt.zig +++ /dev/null @@ -1,10 +0,0 @@ -export fn entry() void { - const x = @floatToInt(i8, 200); - _ = x; -} - -// error -// backend=stage2 -// target=native -// -// :2:31: error: float value '200' cannot be stored in integer type 'i8' diff --git a/test/cases/compile_errors/overflow_in_enum_value_allocation.zig b/test/cases/compile_errors/overflow_in_enum_value_allocation.zig index 2a5b55e86d..821ac6c256 100644 --- a/test/cases/compile_errors/overflow_in_enum_value_allocation.zig +++ b/test/cases/compile_errors/overflow_in_enum_value_allocation.zig @@ -3,8 +3,8 @@ const Moo = enum(u8) { Over, }; pub export fn entry() void { - var y = Moo.Last; - _ = y; + var y = Moo.Last; + _ = y; } // error diff --git a/test/cases/compile_errors/packed_union_given_enum_tag_type.zig b/test/cases/compile_errors/packed_union_given_enum_tag_type.zig index 03aaef0d8c..2e69afd0a9 100644 --- a/test/cases/compile_errors/packed_union_given_enum_tag_type.zig +++ b/test/cases/compile_errors/packed_union_given_enum_tag_type.zig @@ -9,7 +9,7 @@ const Payload = packed union(Letter) { C: bool, }; export fn entry() void { - var a = Payload { .A = 1234 }; + var a = Payload{ .A = 1234 }; _ = a; } diff --git a/test/cases/compile_errors/packed_union_with_automatic_layout_field.zig b/test/cases/compile_errors/packed_union_with_automatic_layout_field.zig index 0db9d83dfb..26d224de85 100644 --- a/test/cases/compile_errors/packed_union_with_automatic_layout_field.zig +++ b/test/cases/compile_errors/packed_union_with_automatic_layout_field.zig @@ -7,7 +7,7 @@ const Payload = packed union { B: bool, }; export fn entry() void { - var a = Payload { .B = true }; + var a = Payload{ .B = true }; _ = a; } diff --git a/test/cases/compile_errors/panic_called_at_compile_time.zig b/test/cases/compile_errors/panic_called_at_compile_time.zig index 220161930b..8198cd8e5d 100644 --- a/test/cases/compile_errors/panic_called_at_compile_time.zig +++ b/test/cases/compile_errors/panic_called_at_compile_time.zig @@ -1,6 +1,8 @@ export fn entry() void { comptime { - @panic("aoeu",); + @panic( + "aoeu", + ); } } diff --git a/test/cases/compile_errors/parameter_redeclaration.zig b/test/cases/compile_errors/parameter_redeclaration.zig index 89c7c4bd2a..1805c9ac75 100644 --- a/test/cases/compile_errors/parameter_redeclaration.zig +++ b/test/cases/compile_errors/parameter_redeclaration.zig @@ -1,10 +1,11 @@ -fn f(a : i32, a : i32) void { +fn f(a: i32, a: i32) void {} +export fn entry() void { + f(1, 2); } -export fn entry() void { f(1, 2); } // error // backend=stage2 // target=native // -// :1:15: error: redeclaration of function parameter 'a' +// :1:14: error: redeclaration of function parameter 'a' // :1:6: note: previous declaration here diff --git a/test/cases/compile_errors/pass_const_ptr_to_mutable_ptr_fn.zig b/test/cases/compile_errors/pass_const_ptr_to_mutable_ptr_fn.zig index fd24b58f55..7914a82518 100644 --- a/test/cases/compile_errors/pass_const_ptr_to_mutable_ptr_fn.zig +++ b/test/cases/compile_errors/pass_const_ptr_to_mutable_ptr_fn.zig @@ -1,14 +1,17 @@ fn foo() bool { - const a = @as([]const u8, "a",); + const a = @as([]const u8, "a"); const b = &a; return ptrEql(b, b); } fn ptrEql(a: *[]const u8, b: *[]const u8) bool { - _ = a; _ = b; + _ = a; + _ = b; return true; } -export fn entry() usize { return @sizeOf(@TypeOf(&foo)); } +export fn entry() usize { + return @sizeOf(@TypeOf(&foo)); +} // error // backend=stage2 diff --git a/test/cases/compile_errors/passing_an_under-aligned_function_pointer.zig b/test/cases/compile_errors/passing_an_under-aligned_function_pointer.zig index 3e3500e71f..6d3e2e871d 100644 --- a/test/cases/compile_errors/passing_an_under-aligned_function_pointer.zig +++ b/test/cases/compile_errors/passing_an_under-aligned_function_pointer.zig @@ -4,7 +4,9 @@ export fn entry() void { fn testImplicitlyDecreaseFnAlign(ptr: *const fn () align(8) i32, answer: i32) void { if (ptr() != answer) unreachable; } -fn alignedSmall() align(4) i32 { return 1234; } +fn alignedSmall() align(4) i32 { + return 1234; +} // error // backend=stage2 diff --git a/test/cases/compile_errors/pointer_to_noreturn.zig b/test/cases/compile_errors/pointer_to_noreturn.zig index 0891fd3699..5d757f631b 100644 --- a/test/cases/compile_errors/pointer_to_noreturn.zig +++ b/test/cases/compile_errors/pointer_to_noreturn.zig @@ -1,5 +1,7 @@ fn a() *noreturn {} -export fn entry() void { _ = a(); } +export fn entry() void { + _ = a(); +} // error // backend=stage2 diff --git a/test/cases/compile_errors/ptrFromInt_non_ptr_type.zig b/test/cases/compile_errors/ptrFromInt_non_ptr_type.zig new file mode 100644 index 0000000000..f472789aff --- /dev/null +++ b/test/cases/compile_errors/ptrFromInt_non_ptr_type.zig @@ -0,0 +1,15 @@ +pub export fn entry() void { + _ = @ptrFromInt(i32, 10); +} + +pub export fn entry2() void { + _ = @ptrFromInt([]u8, 20); +} + +// error +// backend=stage2 +// target=native +// +// :2:21: error: expected pointer type, found 'i32' +// :6:21: error: integer cannot be converted to slice type '[]u8' +// :6:21: note: slice length cannot be inferred from address diff --git a/test/cases/compile_errors/ptrFromInt_with_misaligned_address.zig b/test/cases/compile_errors/ptrFromInt_with_misaligned_address.zig new file mode 100644 index 0000000000..c45e998d82 --- /dev/null +++ b/test/cases/compile_errors/ptrFromInt_with_misaligned_address.zig @@ -0,0 +1,10 @@ +pub export fn entry() void { + var y = @ptrFromInt([*]align(4) u8, 5); + _ = y; +} + +// error +// backend=stage2 +// target=native +// +// :2:41: error: pointer type '[*]align(4) u8' requires aligned address diff --git a/test/cases/compile_errors/ptrToInt_0_to_non_optional_pointer.zig b/test/cases/compile_errors/ptrToInt_0_to_non_optional_pointer.zig deleted file mode 100644 index 86a5dd6dca..0000000000 --- a/test/cases/compile_errors/ptrToInt_0_to_non_optional_pointer.zig +++ /dev/null @@ -1,10 +0,0 @@ -export fn entry() void { - var b = @intToPtr(*i32, 0); - _ = b; -} - -// error -// backend=stage2 -// target=native -// -// :2:29: error: pointer type '*i32' does not allow address zero diff --git a/test/cases/compile_errors/range_operator_in_switch_used_on_error_set.zig b/test/cases/compile_errors/range_operator_in_switch_used_on_error_set.zig index 859197929c..99dd773f32 100644 --- a/test/cases/compile_errors/range_operator_in_switch_used_on_error_set.zig +++ b/test/cases/compile_errors/range_operator_in_switch_used_on_error_set.zig @@ -1,13 +1,13 @@ export fn entry() void { foo(452) catch |err| switch (err) { - error.Foo ... error.Bar => {}, + error.Foo...error.Bar => {}, else => {}, }; } fn foo(x: i32) !void { switch (x) { - 0 ... 10 => return error.Foo, - 11 ... 20 => return error.Bar, + 0...10 => return error.Foo, + 11...20 => return error.Bar, else => {}, } } @@ -17,4 +17,4 @@ fn foo(x: i32) !void { // target=native // // :2:34: error: ranges not allowed when switching on type '@typeInfo(@typeInfo(@TypeOf(tmp.foo)).Fn.return_type.?).ErrorUnion.error_set' -// :3:19: note: range here +// :3:18: note: range here diff --git a/test/cases/compile_errors/reassign_to_array_parameter.zig b/test/cases/compile_errors/reassign_to_array_parameter.zig index 4927329970..380fd62154 100644 --- a/test/cases/compile_errors/reassign_to_array_parameter.zig +++ b/test/cases/compile_errors/reassign_to_array_parameter.zig @@ -1,8 +1,8 @@ fn reassign(a: [3]f32) void { - a = [3]f32{4, 5, 6}; + a = [3]f32{ 4, 5, 6 }; } export fn entry() void { - reassign(.{1, 2, 3}); + reassign(.{ 1, 2, 3 }); } // error diff --git a/test/cases/compile_errors/reassign_to_struct_parameter.zig b/test/cases/compile_errors/reassign_to_struct_parameter.zig index 963448f8fe..560de215b5 100644 --- a/test/cases/compile_errors/reassign_to_struct_parameter.zig +++ b/test/cases/compile_errors/reassign_to_struct_parameter.zig @@ -2,10 +2,10 @@ const S = struct { x: u32, }; fn reassign(s: S) void { - s = S{.x = 2}; + s = S{ .x = 2 }; } export fn entry() void { - reassign(S{.x = 3}); + reassign(S{ .x = 3 }); } // error diff --git a/test/cases/compile_errors/redefinition_of_enums.zig b/test/cases/compile_errors/redefinition_of_enums.zig index 641211872e..34d5efe8df 100644 --- a/test/cases/compile_errors/redefinition_of_enums.zig +++ b/test/cases/compile_errors/redefinition_of_enums.zig @@ -1,5 +1,5 @@ -const A = enum {x}; -const A = enum {x}; +const A = enum { x }; +const A = enum { x }; // error // backend=stage2 diff --git a/test/cases/compile_errors/redefinition_of_global_variables.zig b/test/cases/compile_errors/redefinition_of_global_variables.zig index ed0d6f3ed9..6f4ed225f7 100644 --- a/test/cases/compile_errors/redefinition_of_global_variables.zig +++ b/test/cases/compile_errors/redefinition_of_global_variables.zig @@ -1,5 +1,5 @@ -var a : i32 = 1; -var a : i32 = 2; +var a: i32 = 1; +var a: i32 = 2; // error // backend=stage2 diff --git a/test/cases/compile_errors/redefinition_of_struct.zig b/test/cases/compile_errors/redefinition_of_struct.zig index dc6d4abeeb..22852966db 100644 --- a/test/cases/compile_errors/redefinition_of_struct.zig +++ b/test/cases/compile_errors/redefinition_of_struct.zig @@ -1,5 +1,5 @@ -const A = struct { x : i32, }; -const A = struct { y : i32, }; +const A = struct { x: i32 }; +const A = struct { y: i32 }; // error // backend=stage2 diff --git a/test/cases/compile_errors/reference_to_const_data.zig b/test/cases/compile_errors/reference_to_const_data.zig index cbc0fe131c..e773cdb4a0 100644 --- a/test/cases/compile_errors/reference_to_const_data.zig +++ b/test/cases/compile_errors/reference_to_const_data.zig @@ -1,5 +1,5 @@ export fn foo() void { - var ptr = &[_]u8{0,0,0,0}; + var ptr = &[_]u8{ 0, 0, 0, 0 }; ptr[1] = 2; } export fn bar() void { @@ -11,11 +11,11 @@ export fn baz() void { ptr.* = false; } export fn qux() void { - const S = struct{ + const S = struct { x: usize, y: usize, }; - var ptr = &S{.x=1,.y=2}; + var ptr = &S{ .x = 1, .y = 2 }; ptr.x = 2; } export fn quux() void { diff --git a/test/cases/compile_errors/reify_type.Fn_with_is_generic_true.zig b/test/cases/compile_errors/reify_type.Fn_with_is_generic_true.zig index abdccdf36d..bb2c4bbe62 100644 --- a/test/cases/compile_errors/reify_type.Fn_with_is_generic_true.zig +++ b/test/cases/compile_errors/reify_type.Fn_with_is_generic_true.zig @@ -8,7 +8,9 @@ const Foo = @Type(.{ .params = &.{}, }, }); -comptime { _ = Foo; } +comptime { + _ = Foo; +} // error // backend=stage2 diff --git a/test/cases/compile_errors/reify_type.Fn_with_is_var_args_true_and_non-C_callconv.zig b/test/cases/compile_errors/reify_type.Fn_with_is_var_args_true_and_non-C_callconv.zig index f3542d583a..a341435b36 100644 --- a/test/cases/compile_errors/reify_type.Fn_with_is_var_args_true_and_non-C_callconv.zig +++ b/test/cases/compile_errors/reify_type.Fn_with_is_var_args_true_and_non-C_callconv.zig @@ -8,7 +8,9 @@ const Foo = @Type(.{ .params = &.{}, }, }); -comptime { _ = Foo; } +comptime { + _ = Foo; +} // error // backend=stage2 diff --git a/test/cases/compile_errors/reify_type.Fn_with_return_type_null.zig b/test/cases/compile_errors/reify_type.Fn_with_return_type_null.zig index 49335ab693..d348a0c908 100644 --- a/test/cases/compile_errors/reify_type.Fn_with_return_type_null.zig +++ b/test/cases/compile_errors/reify_type.Fn_with_return_type_null.zig @@ -8,7 +8,9 @@ const Foo = @Type(.{ .params = &.{}, }, }); -comptime { _ = Foo; } +comptime { + _ = Foo; +} // error // backend=stage2 diff --git a/test/cases/compile_errors/reify_type_for_exhaustive_enum_with_non-integer_tag_type.zig b/test/cases/compile_errors/reify_type_for_exhaustive_enum_with_non-integer_tag_type.zig index 60c6ce9a59..9b140a0923 100644 --- a/test/cases/compile_errors/reify_type_for_exhaustive_enum_with_non-integer_tag_type.zig +++ b/test/cases/compile_errors/reify_type_for_exhaustive_enum_with_non-integer_tag_type.zig @@ -7,7 +7,7 @@ const Tag = @Type(.{ }, }); export fn entry() void { - _ = @intToEnum(Tag, 0); + _ = @enumFromInt(Tag, 0); } // error diff --git a/test/cases/compile_errors/reify_type_for_exhaustive_enum_with_undefined_tag_type.zig b/test/cases/compile_errors/reify_type_for_exhaustive_enum_with_undefined_tag_type.zig index 896d689046..b2cd8e1214 100644 --- a/test/cases/compile_errors/reify_type_for_exhaustive_enum_with_undefined_tag_type.zig +++ b/test/cases/compile_errors/reify_type_for_exhaustive_enum_with_undefined_tag_type.zig @@ -7,7 +7,7 @@ const Tag = @Type(.{ }, }); export fn entry() void { - _ = @intToEnum(Tag, 0); + _ = @enumFromInt(Tag, 0); } // error diff --git a/test/cases/compile_errors/reify_type_union_payload_is_undefined.zig b/test/cases/compile_errors/reify_type_union_payload_is_undefined.zig index 410bb92658..886d443a00 100644 --- a/test/cases/compile_errors/reify_type_union_payload_is_undefined.zig +++ b/test/cases/compile_errors/reify_type_union_payload_is_undefined.zig @@ -1,7 +1,9 @@ const Foo = @Type(.{ .Struct = undefined, }); -comptime { _ = Foo; } +comptime { + _ = Foo; +} // error // backend=stage2 diff --git a/test/cases/compile_errors/return_from_defer_expression.zig b/test/cases/compile_errors/return_from_defer_expression.zig index 12aa08a11c..28d1b0c6c6 100644 --- a/test/cases/compile_errors/return_from_defer_expression.zig +++ b/test/cases/compile_errors/return_from_defer_expression.zig @@ -6,13 +6,15 @@ pub fn testTrickyDefer() !void { const a = maybeInt() orelse return; } -fn canFail() anyerror!void { } +fn canFail() anyerror!void {} pub fn maybeInt() ?i32 { return 0; } -export fn entry() usize { return @sizeOf(@TypeOf(testTrickyDefer)); } +export fn entry() usize { + return @sizeOf(@TypeOf(testTrickyDefer)); +} // error // backend=stage2 diff --git a/test/cases/compile_errors/runtime_assignment_to_comptime_struct_type.zig b/test/cases/compile_errors/runtime_assignment_to_comptime_struct_type.zig index 5949031fb9..39e9662679 100644 --- a/test/cases/compile_errors/runtime_assignment_to_comptime_struct_type.zig +++ b/test/cases/compile_errors/runtime_assignment_to_comptime_struct_type.zig @@ -4,7 +4,7 @@ const Foo = struct { }; export fn f() void { var x: u8 = 0; - const foo = Foo { .Bar = x, .Baz = u8 }; + const foo = Foo{ .Bar = x, .Baz = u8 }; _ = foo; } @@ -12,5 +12,5 @@ export fn f() void { // backend=stage2 // target=native // -// :7:30: error: unable to resolve comptime value -// :7:30: note: initializer of comptime only struct must be comptime-known +// :7:29: error: unable to resolve comptime value +// :7:29: note: initializer of comptime only struct must be comptime-known diff --git a/test/cases/compile_errors/runtime_assignment_to_comptime_union_type.zig b/test/cases/compile_errors/runtime_assignment_to_comptime_union_type.zig index 04e2a97e7a..71a490bc2f 100644 --- a/test/cases/compile_errors/runtime_assignment_to_comptime_union_type.zig +++ b/test/cases/compile_errors/runtime_assignment_to_comptime_union_type.zig @@ -4,7 +4,7 @@ const Foo = union { }; export fn f() void { var x: u8 = 0; - const foo = Foo { .Bar = x }; + const foo = Foo{ .Bar = x }; _ = foo; } @@ -12,5 +12,5 @@ export fn f() void { // backend=stage2 // target=native // -// :7:30: error: unable to resolve comptime value -// :7:30: note: initializer of comptime only union must be comptime-known +// :7:29: error: unable to resolve comptime value +// :7:29: note: initializer of comptime only union must be comptime-known diff --git a/test/cases/compile_errors/runtime_to_comptime_num.zig b/test/cases/compile_errors/runtime_to_comptime_num.zig index 972adb59bb..8d4a3fb999 100644 --- a/test/cases/compile_errors/runtime_to_comptime_num.zig +++ b/test/cases/compile_errors/runtime_to_comptime_num.zig @@ -2,16 +2,16 @@ pub export fn entry() void { var a: u32 = 0; _ = @as(comptime_int, a); } -pub export fn entry2() void{ +pub export fn entry2() void { var a: u32 = 0; _ = @as(comptime_float, a); } -pub export fn entry3() void{ +pub export fn entry3() void { comptime var aa: comptime_float = 0.0; var a: f32 = 4; aa = a; } -pub export fn entry4() void{ +pub export fn entry4() void { comptime var aa: comptime_int = 0.0; var a: f32 = 4; aa = a; diff --git a/test/cases/compile_errors/saturating_shl_assign_does_not_allow_negative_rhs_at_comptime.zig b/test/cases/compile_errors/saturating_shl_assign_does_not_allow_negative_rhs_at_comptime.zig index c8e95e3969..e835db2cdf 100644 --- a/test/cases/compile_errors/saturating_shl_assign_does_not_allow_negative_rhs_at_comptime.zig +++ b/test/cases/compile_errors/saturating_shl_assign_does_not_allow_negative_rhs_at_comptime.zig @@ -1,12 +1,12 @@ export fn a() void { comptime { - var x = @as(i32, 1); - x <<|= @as(i32, -2); - } + var x = @as(i32, 1); + x <<|= @as(i32, -2); + } } // error // backend=stage2 // target=native // -// :4:14: error: shift by negative amount '-2' +// :4:16: error: shift by negative amount '-2' diff --git a/test/cases/compile_errors/self_referential_struct_requires_comptime.zig b/test/cases/compile_errors/self_referential_struct_requires_comptime.zig index 3ce7571026..661a12df97 100644 --- a/test/cases/compile_errors/self_referential_struct_requires_comptime.zig +++ b/test/cases/compile_errors/self_referential_struct_requires_comptime.zig @@ -7,7 +7,6 @@ pub export fn entry() void { _ = s; } - // error // backend=stage2 // target=native diff --git a/test/cases/compile_errors/setAlignStack_in_inline_function.zig b/test/cases/compile_errors/setAlignStack_in_inline_function.zig index 62bbb3865c..a84424e368 100644 --- a/test/cases/compile_errors/setAlignStack_in_inline_function.zig +++ b/test/cases/compile_errors/setAlignStack_in_inline_function.zig @@ -1,7 +1,7 @@ export fn entry() void { foo(); } -fn foo() callconv(.Inline) void { +inline fn foo() void { @setAlignStack(16); } @@ -12,7 +12,6 @@ fn bar() void { @setAlignStack(16); } - // error // backend=stage2 // target=native diff --git a/test/cases/compile_errors/slice_passed_as_array_init_type_with_elems.zig b/test/cases/compile_errors/slice_passed_as_array_init_type_with_elems.zig index 7af505e20d..91dc5f5128 100644 --- a/test/cases/compile_errors/slice_passed_as_array_init_type_with_elems.zig +++ b/test/cases/compile_errors/slice_passed_as_array_init_type_with_elems.zig @@ -1,5 +1,5 @@ export fn entry() void { - const x = []u8{1, 2}; + const x = []u8{ 1, 2 }; _ = x; } diff --git a/test/cases/compile_errors/slice_sentinel_mismatch-2.zig b/test/cases/compile_errors/slice_sentinel_mismatch-2.zig index ea34805e32..42c1328bb6 100644 --- a/test/cases/compile_errors/slice_sentinel_mismatch-2.zig +++ b/test/cases/compile_errors/slice_sentinel_mismatch-2.zig @@ -2,7 +2,9 @@ fn foo() [:0]u8 { var x: []u8 = undefined; return x; } -comptime { _ = &foo; } +comptime { + _ = &foo; +} // error // backend=stage2 diff --git a/test/cases/compile_errors/slice_used_as_extern_fn_param.zig b/test/cases/compile_errors/slice_used_as_extern_fn_param.zig index 8391c3e21b..e6b065cd62 100644 --- a/test/cases/compile_errors/slice_used_as_extern_fn_param.zig +++ b/test/cases/compile_errors/slice_used_as_extern_fn_param.zig @@ -1,4 +1,4 @@ -extern fn Text(str: []const u8, num: i32) callconv(.C) void; +extern fn Text(str: []const u8, num: i32) callconv(.C) void; export fn entry() void { _ = Text; } diff --git a/test/cases/compile_errors/specify_enum_tag_type_that_is_too_small.zig b/test/cases/compile_errors/specify_enum_tag_type_that_is_too_small.zig index d878bec18b..3024f1dee8 100644 --- a/test/cases/compile_errors/specify_enum_tag_type_that_is_too_small.zig +++ b/test/cases/compile_errors/specify_enum_tag_type_that_is_too_small.zig @@ -1,4 +1,4 @@ -const Small = enum (u2) { +const Small = enum(u2) { One, Two, Three, diff --git a/test/cases/compile_errors/specify_non-integer_enum_tag_type.zig b/test/cases/compile_errors/specify_non-integer_enum_tag_type.zig index f2ff3e2cd1..4fa7691a11 100644 --- a/test/cases/compile_errors/specify_non-integer_enum_tag_type.zig +++ b/test/cases/compile_errors/specify_non-integer_enum_tag_type.zig @@ -1,4 +1,4 @@ -const Small = enum (f32) { +const Small = enum(f32) { One, Two, Three, @@ -13,4 +13,4 @@ export fn entry() void { // backend=stage2 // target=native // -// :1:21: error: expected integer tag type, found 'f32' +// :1:20: error: expected integer tag type, found 'f32' diff --git a/test/cases/compile_errors/src_fields_runtime.zig b/test/cases/compile_errors/src_fields_runtime.zig index 0bdb5af81c..a982831123 100644 --- a/test/cases/compile_errors/src_fields_runtime.zig +++ b/test/cases/compile_errors/src_fields_runtime.zig @@ -4,7 +4,10 @@ pub export fn entry1() void { comptime var b: []const u8 = s.fn_name; comptime var c: u32 = s.column; comptime var d: u32 = s.line; - _ = a; _ = b; _ = c; _ = d; + _ = a; + _ = b; + _ = c; + _ = d; } // error diff --git a/test/cases/compile_errors/stage1/obj/generic_function_where_return_type_is_self-referenced.zig b/test/cases/compile_errors/stage1/obj/generic_function_where_return_type_is_self-referenced.zig index c8d31ec8df..75f43ed914 100644 --- a/test/cases/compile_errors/stage1/obj/generic_function_where_return_type_is_self-referenced.zig +++ b/test/cases/compile_errors/stage1/obj/generic_function_where_return_type_is_self-referenced.zig @@ -1,10 +1,8 @@ fn Foo(comptime T: type) Foo(T) { - return struct{ x: T }; + return struct { x: T }; } export fn entry() void { - const t = Foo(u32) { - .x = 1 - }; + const t = Foo(u32){ .x = 1 }; _ = t; } diff --git a/test/cases/compile_errors/stage1/obj/unsupported_modifier_at_start_of_asm_output_constraint.zig b/test/cases/compile_errors/stage1/obj/unsupported_modifier_at_start_of_asm_output_constraint.zig index 7c70fc5095..5bcf30547b 100644 --- a/test/cases/compile_errors/stage1/obj/unsupported_modifier_at_start_of_asm_output_constraint.zig +++ b/test/cases/compile_errors/stage1/obj/unsupported_modifier_at_start_of_asm_output_constraint.zig @@ -1,6 +1,10 @@ export fn foo() void { var bar: u32 = 3; - asm volatile ("" : [baz]"+r"(bar) : : ""); + asm volatile ("" + : [baz] "+r" (bar), + : + : "" + ); } // error diff --git a/test/cases/compile_errors/std.fmt_error_for_unused_arguments.zig b/test/cases/compile_errors/std.fmt_error_for_unused_arguments.zig index a20f2798bc..6661fe54eb 100644 --- a/test/cases/compile_errors/std.fmt_error_for_unused_arguments.zig +++ b/test/cases/compile_errors/std.fmt_error_for_unused_arguments.zig @@ -1,5 +1,5 @@ export fn entry() void { - @import("std").debug.print("{d} {d} {d} {d} {d}", .{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}); + @import("std").debug.print("{d} {d} {d} {d} {d}", .{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }); } // error diff --git a/test/cases/compile_errors/struct_type_mismatch_in_arg.zig b/test/cases/compile_errors/struct_type_mismatch_in_arg.zig index d051966c52..32bbc65648 100644 --- a/test/cases/compile_errors/struct_type_mismatch_in_arg.zig +++ b/test/cases/compile_errors/struct_type_mismatch_in_arg.zig @@ -1,18 +1,18 @@ const Foo = struct { i: i32 }; const Bar = struct { j: i32 }; -pub fn helper(_: Foo, _: Bar) void { } +pub fn helper(_: Foo, _: Bar) void {} comptime { - helper(Bar { .j = 10 }, Bar { .j = 10 }); - helper(Bar { .i = 10 }, Bar { .j = 10 }); + helper(Bar{ .j = 10 }, Bar{ .j = 10 }); + helper(Bar{ .i = 10 }, Bar{ .j = 10 }); } // error // backend=stage2 // target=native // -// :7:16: error: expected type 'tmp.Foo', found 'tmp.Bar' +// :7:15: error: expected type 'tmp.Foo', found 'tmp.Bar' // :2:13: note: struct declared here // :1:13: note: struct declared here // :4:18: note: parameter type declared here diff --git a/test/cases/compile_errors/struct_type_returned_from_non-generic_function.zig b/test/cases/compile_errors/struct_type_returned_from_non-generic_function.zig index 27e2b7b1db..f5647625dd 100644 --- a/test/cases/compile_errors/struct_type_returned_from_non-generic_function.zig +++ b/test/cases/compile_errors/struct_type_returned_from_non-generic_function.zig @@ -1,5 +1,5 @@ pub export fn entry(param: usize) usize { - return struct{ param }; + return struct { param }; } // error diff --git a/test/cases/compile_errors/struct_with_declarations_unavailable_for_reify_type.zig b/test/cases/compile_errors/struct_with_declarations_unavailable_for_reify_type.zig index 81864160dc..f0a2463228 100644 --- a/test/cases/compile_errors/struct_with_declarations_unavailable_for_reify_type.zig +++ b/test/cases/compile_errors/struct_with_declarations_unavailable_for_reify_type.zig @@ -1,5 +1,7 @@ export fn entry() void { - _ = @Type(@typeInfo(struct { const foo = 1; })); + _ = @Type(@typeInfo(struct { + const foo = 1; + })); } // error diff --git a/test/cases/compile_errors/struct_with_invalid_field.zig b/test/cases/compile_errors/struct_with_invalid_field.zig index aa24b029bb..dbcf5243c2 100644 --- a/test/cases/compile_errors/struct_with_invalid_field.zig +++ b/test/cases/compile_errors/struct_with_invalid_field.zig @@ -1,10 +1,10 @@ -const std = @import("std",); +const std = @import( + "std", +); const Allocator = std.mem.Allocator; const ArrayList = std.ArrayList; -const HeaderWeight = enum { - H1, H2, H3, H4, H5, H6, -}; +const HeaderWeight = enum { H1, H2, H3, H4, H5, H6 }; const MdText = ArrayList(u8); @@ -16,7 +16,7 @@ const MdNode = union(enum) { }; export fn entry() void { - const a = MdNode.Header { + const a = MdNode.Header{ .text = MdText.init(std.testing.allocator), .weight = HeaderWeight.H1, }; diff --git a/test/cases/compile_errors/sub_overflow_in_function_evaluation.zig b/test/cases/compile_errors/sub_overflow_in_function_evaluation.zig index c87f998373..651ef34bdc 100644 --- a/test/cases/compile_errors/sub_overflow_in_function_evaluation.zig +++ b/test/cases/compile_errors/sub_overflow_in_function_evaluation.zig @@ -3,7 +3,9 @@ fn sub(a: u16, b: u16) u16 { return a - b; } -export fn entry() usize { return @sizeOf(@TypeOf(&y)); } +export fn entry() usize { + return @sizeOf(@TypeOf(&y)); +} // error // backend=stage2 diff --git a/test/cases/compile_errors/suspend_inside_suspend_block.zig b/test/cases/compile_errors/suspend_inside_suspend_block.zig index 80436bd07f..29a7968e0b 100644 --- a/test/cases/compile_errors/suspend_inside_suspend_block.zig +++ b/test/cases/compile_errors/suspend_inside_suspend_block.zig @@ -3,8 +3,7 @@ export fn entry() void { } fn foo() void { suspend { - suspend { - } + suspend {} } } diff --git a/test/cases/compile_errors/switch_expression-duplicate_enumeration_prong.zig b/test/cases/compile_errors/switch_expression-duplicate_enumeration_prong.zig index 7011f0a2d5..58f98a55f5 100644 --- a/test/cases/compile_errors/switch_expression-duplicate_enumeration_prong.zig +++ b/test/cases/compile_errors/switch_expression-duplicate_enumeration_prong.zig @@ -14,7 +14,9 @@ fn f(n: Number) i32 { } } -export fn entry() usize { return @sizeOf(@TypeOf(&f)); } +export fn entry() usize { + return @sizeOf(@TypeOf(&f)); +} // error // backend=stage2 diff --git a/test/cases/compile_errors/switch_expression-duplicate_enumeration_prong_when_else_present.zig b/test/cases/compile_errors/switch_expression-duplicate_enumeration_prong_when_else_present.zig index 89f1959375..045760e287 100644 --- a/test/cases/compile_errors/switch_expression-duplicate_enumeration_prong_when_else_present.zig +++ b/test/cases/compile_errors/switch_expression-duplicate_enumeration_prong_when_else_present.zig @@ -15,7 +15,9 @@ fn f(n: Number) i32 { } } -export fn entry() usize { return @sizeOf(@TypeOf(&f)); } +export fn entry() usize { + return @sizeOf(@TypeOf(&f)); +} // error // backend=stage2 diff --git a/test/cases/compile_errors/switch_expression-duplicate_or_overlapping_integer_value.zig b/test/cases/compile_errors/switch_expression-duplicate_or_overlapping_integer_value.zig index 60e361a47a..6e5bd53846 100644 --- a/test/cases/compile_errors/switch_expression-duplicate_or_overlapping_integer_value.zig +++ b/test/cases/compile_errors/switch_expression-duplicate_or_overlapping_integer_value.zig @@ -1,16 +1,18 @@ fn foo(x: u8) u8 { return switch (x) { - 0 ... 100 => @as(u8, 0), - 101 ... 200 => 1, - 201, 203 ... 207 => 2, - 206 ... 255 => 3, + 0...100 => @as(u8, 0), + 101...200 => 1, + 201, 203...207 => 2, + 206...255 => 3, }; } -export fn entry() usize { return @sizeOf(@TypeOf(&foo)); } +export fn entry() usize { + return @sizeOf(@TypeOf(&foo)); +} // error // backend=stage2 // target=native // -// :6:13: error: duplicate switch value -// :5:18: note: previous value here +// :6:12: error: duplicate switch value +// :5:17: note: previous value here diff --git a/test/cases/compile_errors/switch_expression-duplicate_type.zig b/test/cases/compile_errors/switch_expression-duplicate_type.zig index 59c9b0657a..44f745364c 100644 --- a/test/cases/compile_errors/switch_expression-duplicate_type.zig +++ b/test/cases/compile_errors/switch_expression-duplicate_type.zig @@ -7,7 +7,9 @@ fn foo(comptime T: type, x: T) u8 { else => 3, }; } -export fn entry() usize { return @sizeOf(@TypeOf(foo(u32, 0))); } +export fn entry() usize { + return @sizeOf(@TypeOf(foo(u32, 0))); +} // error // backend=stage2 diff --git a/test/cases/compile_errors/switch_expression-duplicate_type_struct_alias.zig b/test/cases/compile_errors/switch_expression-duplicate_type_struct_alias.zig index 797d2bd50d..4420e575c9 100644 --- a/test/cases/compile_errors/switch_expression-duplicate_type_struct_alias.zig +++ b/test/cases/compile_errors/switch_expression-duplicate_type_struct_alias.zig @@ -11,7 +11,9 @@ fn foo(comptime T: type, x: T) u8 { else => 3, }; } -export fn entry() usize { return @sizeOf(@TypeOf(foo(u32, 0))); } +export fn entry() usize { + return @sizeOf(@TypeOf(foo(u32, 0))); +} // error // backend=stage2 diff --git a/test/cases/compile_errors/switch_expression-missing_enumeration_prong.zig b/test/cases/compile_errors/switch_expression-missing_enumeration_prong.zig index 1075b837de..ca80d420ff 100644 --- a/test/cases/compile_errors/switch_expression-missing_enumeration_prong.zig +++ b/test/cases/compile_errors/switch_expression-missing_enumeration_prong.zig @@ -12,7 +12,9 @@ fn f(n: Number) i32 { } } -export fn entry() usize { return @sizeOf(@TypeOf(&f)); } +export fn entry() usize { + return @sizeOf(@TypeOf(&f)); +} // error // backend=stage2 diff --git a/test/cases/compile_errors/switch_expression-non_exhaustive_integer_prongs.zig b/test/cases/compile_errors/switch_expression-non_exhaustive_integer_prongs.zig index 6770b5a055..83097f2733 100644 --- a/test/cases/compile_errors/switch_expression-non_exhaustive_integer_prongs.zig +++ b/test/cases/compile_errors/switch_expression-non_exhaustive_integer_prongs.zig @@ -3,7 +3,9 @@ fn foo(x: u8) void { 0 => {}, } } -export fn entry() usize { return @sizeOf(@TypeOf(&foo)); } +export fn entry() usize { + return @sizeOf(@TypeOf(&foo)); +} // error // backend=stage2 diff --git a/test/cases/compile_errors/switch_expression-switch_on_pointer_type_with_no_else.zig b/test/cases/compile_errors/switch_expression-switch_on_pointer_type_with_no_else.zig index bbad58c74c..32491170eb 100644 --- a/test/cases/compile_errors/switch_expression-switch_on_pointer_type_with_no_else.zig +++ b/test/cases/compile_errors/switch_expression-switch_on_pointer_type_with_no_else.zig @@ -4,7 +4,9 @@ fn foo(x: *u8) void { } } var y: u8 = 100; -export fn entry() usize { return @sizeOf(@TypeOf(&foo)); } +export fn entry() usize { + return @sizeOf(@TypeOf(&foo)); +} // error // backend=stage2 diff --git a/test/cases/compile_errors/switch_expression-unreachable_else_prong_bool.zig b/test/cases/compile_errors/switch_expression-unreachable_else_prong_bool.zig index 5dfc839c13..859f97fa8a 100644 --- a/test/cases/compile_errors/switch_expression-unreachable_else_prong_bool.zig +++ b/test/cases/compile_errors/switch_expression-unreachable_else_prong_bool.zig @@ -5,7 +5,9 @@ fn foo(x: bool) void { else => {}, } } -export fn entry() usize { return @sizeOf(@TypeOf(&foo)); } +export fn entry() usize { + return @sizeOf(@TypeOf(&foo)); +} // error // backend=stage2 diff --git a/test/cases/compile_errors/switch_expression-unreachable_else_prong_enum.zig b/test/cases/compile_errors/switch_expression-unreachable_else_prong_enum.zig index cc837b8b5e..e7bb8d392f 100644 --- a/test/cases/compile_errors/switch_expression-unreachable_else_prong_enum.zig +++ b/test/cases/compile_errors/switch_expression-unreachable_else_prong_enum.zig @@ -1,4 +1,4 @@ -const TestEnum = enum{ T1, T2 }; +const TestEnum = enum { T1, T2 }; fn err(x: u8) TestEnum { switch (x) { @@ -15,7 +15,9 @@ fn foo(x: u8) void { } } -export fn entry() usize { return @sizeOf(@TypeOf(&foo)); } +export fn entry() usize { + return @sizeOf(@TypeOf(&foo)); +} // error // backend=llvm diff --git a/test/cases/compile_errors/switch_expression-unreachable_else_prong_range_i8.zig b/test/cases/compile_errors/switch_expression-unreachable_else_prong_range_i8.zig index bcb84eed12..861b0ceaee 100644 --- a/test/cases/compile_errors/switch_expression-unreachable_else_prong_range_i8.zig +++ b/test/cases/compile_errors/switch_expression-unreachable_else_prong_range_i8.zig @@ -8,7 +8,9 @@ fn foo(x: i8) void { else => {}, } } -export fn entry() usize { return @sizeOf(@TypeOf(&foo)); } +export fn entry() usize { + return @sizeOf(@TypeOf(&foo)); +} // error // backend=stage2 diff --git a/test/cases/compile_errors/switch_expression-unreachable_else_prong_range_u8.zig b/test/cases/compile_errors/switch_expression-unreachable_else_prong_range_u8.zig index 2230434ea0..16fdea91ea 100644 --- a/test/cases/compile_errors/switch_expression-unreachable_else_prong_range_u8.zig +++ b/test/cases/compile_errors/switch_expression-unreachable_else_prong_range_u8.zig @@ -8,7 +8,9 @@ fn foo(x: u8) void { else => {}, } } -export fn entry() usize { return @sizeOf(@TypeOf(&foo)); } +export fn entry() usize { + return @sizeOf(@TypeOf(&foo)); +} // error // backend=stage2 diff --git a/test/cases/compile_errors/switch_expression-unreachable_else_prong_u1.zig b/test/cases/compile_errors/switch_expression-unreachable_else_prong_u1.zig index 58458474a4..3d7988454e 100644 --- a/test/cases/compile_errors/switch_expression-unreachable_else_prong_u1.zig +++ b/test/cases/compile_errors/switch_expression-unreachable_else_prong_u1.zig @@ -5,7 +5,9 @@ fn foo(x: u1) void { else => {}, } } -export fn entry() usize { return @sizeOf(@TypeOf(&foo)); } +export fn entry() usize { + return @sizeOf(@TypeOf(&foo)); +} // error // backend=stage2 diff --git a/test/cases/compile_errors/switch_expression-unreachable_else_prong_u2.zig b/test/cases/compile_errors/switch_expression-unreachable_else_prong_u2.zig index 9e337cb200..dd8f315dcd 100644 --- a/test/cases/compile_errors/switch_expression-unreachable_else_prong_u2.zig +++ b/test/cases/compile_errors/switch_expression-unreachable_else_prong_u2.zig @@ -7,7 +7,9 @@ fn foo(x: u2) void { else => {}, } } -export fn entry() usize { return @sizeOf(@TypeOf(&foo)); } +export fn entry() usize { + return @sizeOf(@TypeOf(&foo)); +} // error // backend=stage2 diff --git a/test/cases/compile_errors/switching_with_exhaustive_enum_has___prong_.zig b/test/cases/compile_errors/switching_with_exhaustive_enum_has___prong_.zig index 3dad0be9df..e3d09bc133 100644 --- a/test/cases/compile_errors/switching_with_exhaustive_enum_has___prong_.zig +++ b/test/cases/compile_errors/switching_with_exhaustive_enum_has___prong_.zig @@ -1,4 +1,4 @@ -const E = enum{ +const E = enum { a, b, }; diff --git a/test/cases/compile_errors/switching_with_non-exhaustive_enums.zig b/test/cases/compile_errors/switching_with_non-exhaustive_enums.zig index 435d409dd4..5678102fc6 100644 --- a/test/cases/compile_errors/switching_with_non-exhaustive_enums.zig +++ b/test/cases/compile_errors/switching_with_non-exhaustive_enums.zig @@ -22,7 +22,7 @@ pub export fn entry2() void { } } pub export fn entry3() void { - var u = U{.a = 2}; + var u = U{ .a = 2 }; switch (u) { // error: `_` prong not allowed when switching on tagged union .a => {}, .b => {}, diff --git a/test/cases/compile_errors/tagName_on_invalid_value_of_non-exhaustive_enum.zig b/test/cases/compile_errors/tagName_on_invalid_value_of_non-exhaustive_enum.zig index 3523a36054..df454a38d0 100644 --- a/test/cases/compile_errors/tagName_on_invalid_value_of_non-exhaustive_enum.zig +++ b/test/cases/compile_errors/tagName_on_invalid_value_of_non-exhaustive_enum.zig @@ -1,6 +1,6 @@ test "enum" { const E = enum(u8) { A, B, _ }; - _ = @tagName(@intToEnum(E, 5)); + _ = @tagName(@enumFromInt(E, 5)); } // error @@ -8,5 +8,5 @@ test "enum" { // target=native // is_test=1 // -// :3:9: error: no field with value '@intToEnum(tmp.test.enum.E, 5)' in enum 'test.enum.E' +// :3:9: error: no field with value '@enumFromInt(tmp.test.enum.E, 5)' in enum 'test.enum.E' // :2:15: note: declared here diff --git a/test/cases/compile_errors/tagName_used_on_union_with_no_associated_enum_tag.zig b/test/cases/compile_errors/tagName_used_on_union_with_no_associated_enum_tag.zig index cbe0f642a5..28eaa9bad8 100644 --- a/test/cases/compile_errors/tagName_used_on_union_with_no_associated_enum_tag.zig +++ b/test/cases/compile_errors/tagName_used_on_union_with_no_associated_enum_tag.zig @@ -3,7 +3,7 @@ const FloatInt = extern union { Int: i32, }; export fn entry() void { - var fi = FloatInt{.Float = 123.45}; + var fi = FloatInt{ .Float = 123.45 }; var tagName = @tagName(fi); _ = tagName; } diff --git a/test/cases/compile_errors/top_level_decl_dependency_loop.zig b/test/cases/compile_errors/top_level_decl_dependency_loop.zig index 8ba3d98ea2..5657ca52fe 100644 --- a/test/cases/compile_errors/top_level_decl_dependency_loop.zig +++ b/test/cases/compile_errors/top_level_decl_dependency_loop.zig @@ -1,5 +1,5 @@ -const a : @TypeOf(b) = 0; -const b : @TypeOf(a) = 0; +const a: @TypeOf(b) = 0; +const b: @TypeOf(a) = 0; export fn entry() void { const c = a + b; _ = c; diff --git a/test/cases/compile_errors/try_in_function_with_non_error_return_type.zig b/test/cases/compile_errors/try_in_function_with_non_error_return_type.zig index 44d8b9ee56..96b0982370 100644 --- a/test/cases/compile_errors/try_in_function_with_non_error_return_type.zig +++ b/test/cases/compile_errors/try_in_function_with_non_error_return_type.zig @@ -1,7 +1,7 @@ export fn f() void { try something(); } -fn something() anyerror!void { } +fn something() anyerror!void {} // error // backend=stage2 diff --git a/test/cases/compile_errors/tuple_init_edge_cases.zig b/test/cases/compile_errors/tuple_init_edge_cases.zig index f093515a38..2ac275f2b7 100644 --- a/test/cases/compile_errors/tuple_init_edge_cases.zig +++ b/test/cases/compile_errors/tuple_init_edge_cases.zig @@ -1,44 +1,56 @@ pub export fn entry1() void { const T = @TypeOf(.{ 123, 3 }); - var b = T{ .@"1" = 3 }; _ = b; - var c = T{ 123, 3 }; _ = c; - var d = T{}; _ = d; + var b = T{ .@"1" = 3 }; + _ = b; + var c = T{ 123, 3 }; + _ = c; + var d = T{}; + _ = d; } pub export fn entry2() void { var a: u32 = 2; const T = @TypeOf(.{ 123, a }); - var b = T{ .@"1" = 3 }; _ = b; - var c = T{ 123, 3 }; _ = c; - var d = T{}; _ = d; + var b = T{ .@"1" = 3 }; + _ = b; + var c = T{ 123, 3 }; + _ = c; + var d = T{}; + _ = d; } pub export fn entry3() void { var a: u32 = 2; const T = @TypeOf(.{ 123, a }); - var b = T{ .@"0" = 123 }; _ = b; + var b = T{ .@"0" = 123 }; + _ = b; } comptime { var a: u32 = 2; const T = @TypeOf(.{ 123, a }); - var b = T{ .@"0" = 123 }; _ = b; - var c = T{ 123, 2 }; _ = c; - var d = T{}; _ = d; + var b = T{ .@"0" = 123 }; + _ = b; + var c = T{ 123, 2 }; + _ = c; + var d = T{}; + _ = d; } pub export fn entry4() void { var a: u32 = 2; const T = @TypeOf(.{ 123, a }); - var b = T{ 123, 4, 5 }; _ = b; + var b = T{ 123, 4, 5 }; + _ = b; } pub export fn entry5() void { var a: u32 = 2; const T = @TypeOf(.{ 123, a }); - var b = T{ .@"0" = 123, .@"2" = 123, .@"1" = 123 }; _ = b; + var b = T{ .@"0" = 123, .@"2" = 123, .@"1" = 123 }; + _ = b; } // error // backend=stage2 // target=native // -// :12:14: error: missing tuple field with index 1 // :17:14: error: missing tuple field with index 1 -// :29:14: error: expected at most 2 tuple fields; found 3 -// :34:30: error: index '2' out of bounds of tuple 'struct{comptime comptime_int = 123, u32}' +// :23:14: error: missing tuple field with index 1 +// :39:14: error: expected at most 2 tuple fields; found 3 +// :45:30: error: index '2' out of bounds of tuple 'struct{comptime comptime_int = 123, u32}' diff --git a/test/cases/compile_errors/type_checking_function_pointers.zig b/test/cases/compile_errors/type_checking_function_pointers.zig index f113309170..a0fea6b60f 100644 --- a/test/cases/compile_errors/type_checking_function_pointers.zig +++ b/test/cases/compile_errors/type_checking_function_pointers.zig @@ -1,7 +1,9 @@ fn a(b: *const fn (*const u8) void) void { _ = b; } -fn c(d: u8) void {_ = d;} +fn c(d: u8) void { + _ = d; +} export fn entry() void { a(c); } @@ -10,6 +12,6 @@ export fn entry() void { // backend=stage2 // target=native // -// :6:7: error: expected type '*const fn(*const u8) void', found '*const fn(u8) void' -// :6:7: note: pointer type child 'fn(u8) void' cannot cast into pointer type child 'fn(*const u8) void' -// :6:7: note: parameter 0 'u8' cannot cast into '*const u8' +// :8:7: error: expected type '*const fn(*const u8) void', found '*const fn(u8) void' +// :8:7: note: pointer type child 'fn(u8) void' cannot cast into pointer type child 'fn(*const u8) void' +// :8:7: note: parameter 0 'u8' cannot cast into '*const u8' diff --git a/test/cases/compile_errors/undeclared_identifier.zig b/test/cases/compile_errors/undeclared_identifier.zig index 7edc0d2896..86ba2e2be0 100644 --- a/test/cases/compile_errors/undeclared_identifier.zig +++ b/test/cases/compile_errors/undeclared_identifier.zig @@ -1,11 +1,9 @@ export fn a() void { - return - b + - c; + return b + c; } // error // backend=stage2 // target=native // -// :3:5: error: use of undeclared identifier 'b' +// :2:12: error: use of undeclared identifier 'b' diff --git a/test/cases/compile_errors/union_auto-enum_value_already_taken.zig b/test/cases/compile_errors/union_auto-enum_value_already_taken.zig index 36b52c96b9..da2fefbad5 100644 --- a/test/cases/compile_errors/union_auto-enum_value_already_taken.zig +++ b/test/cases/compile_errors/union_auto-enum_value_already_taken.zig @@ -6,7 +6,7 @@ const MultipleChoice = union(enum(u32)) { E = 60, }; export fn entry() void { - var x = MultipleChoice { .C = {} }; + var x = MultipleChoice{ .C = {} }; _ = x; } diff --git a/test/cases/compile_errors/union_enum_field_does_not_match_enum.zig b/test/cases/compile_errors/union_enum_field_does_not_match_enum.zig index 3c1e2d53ef..6b70c0eaf4 100644 --- a/test/cases/compile_errors/union_enum_field_does_not_match_enum.zig +++ b/test/cases/compile_errors/union_enum_field_does_not_match_enum.zig @@ -10,7 +10,7 @@ const Payload = union(Letter) { D: bool, }; export fn entry() void { - var a = Payload {.A = 1234}; + var a = Payload{ .A = 1234 }; _ = a; } diff --git a/test/cases/compile_errors/unreachable_parameter.zig b/test/cases/compile_errors/unreachable_parameter.zig index 3164974432..f00b24e07a 100644 --- a/test/cases/compile_errors/unreachable_parameter.zig +++ b/test/cases/compile_errors/unreachable_parameter.zig @@ -1,5 +1,9 @@ -fn f(a: noreturn) void { _ = a; } -export fn entry() void { f(); } +fn f(a: noreturn) void { + _ = a; +} +export fn entry() void { + f(); +} // error // backend=stage2 diff --git a/test/cases/compile_errors/unreachable_with_return.zig b/test/cases/compile_errors/unreachable_with_return.zig index 5293734c82..083f360873 100644 --- a/test/cases/compile_errors/unreachable_with_return.zig +++ b/test/cases/compile_errors/unreachable_with_return.zig @@ -1,9 +1,13 @@ -fn a() noreturn {return;} -export fn entry() void { a(); } +fn a() noreturn { + return; +} +export fn entry() void { + a(); +} // error // backend=stage2 // target=native // -// :1:18: error: function declared 'noreturn' returns +// :2:5: error: function declared 'noreturn' returns // :1:8: note: 'noreturn' declared here diff --git a/test/cases/compile_errors/while_expected_bool_got_error_union.zig b/test/cases/compile_errors/while_expected_bool_got_error_union.zig index ecf3dd0736..07b4411883 100644 --- a/test/cases/compile_errors/while_expected_bool_got_error_union.zig +++ b/test/cases/compile_errors/while_expected_bool_got_error_union.zig @@ -1,7 +1,9 @@ export fn foo() void { while (bar()) {} } -fn bar() anyerror!i32 { return 1; } +fn bar() anyerror!i32 { + return 1; +} // error // backend=stage2 diff --git a/test/cases/compile_errors/while_expected_bool_got_optional.zig b/test/cases/compile_errors/while_expected_bool_got_optional.zig index 3db4b7ae74..2a2af57ef3 100644 --- a/test/cases/compile_errors/while_expected_bool_got_optional.zig +++ b/test/cases/compile_errors/while_expected_bool_got_optional.zig @@ -1,7 +1,9 @@ export fn foo() void { while (bar()) {} } -fn bar() ?i32 { return 1; } +fn bar() ?i32 { + return 1; +} // error // backend=stage2 diff --git a/test/cases/compile_errors/while_expected_error_union_got_bool.zig b/test/cases/compile_errors/while_expected_error_union_got_bool.zig index f7960437ec..6d31d2055b 100644 --- a/test/cases/compile_errors/while_expected_error_union_got_bool.zig +++ b/test/cases/compile_errors/while_expected_error_union_got_bool.zig @@ -1,7 +1,13 @@ export fn foo() void { - while (bar()) |x| {_ = x;} else |err| {_ = err;} + while (bar()) |x| { + _ = x; + } else |err| { + _ = err; + } +} +fn bar() bool { + return true; } -fn bar() bool { return true; } // error // backend=stage2 diff --git a/test/cases/compile_errors/while_expected_error_union_got_optional.zig b/test/cases/compile_errors/while_expected_error_union_got_optional.zig index 5cabd76fce..6ebf96dc4c 100644 --- a/test/cases/compile_errors/while_expected_error_union_got_optional.zig +++ b/test/cases/compile_errors/while_expected_error_union_got_optional.zig @@ -1,7 +1,13 @@ export fn foo() void { - while (bar()) |x| {_ = x;} else |err| {_ = err;} + while (bar()) |x| { + _ = x; + } else |err| { + _ = err; + } +} +fn bar() ?i32 { + return 1; } -fn bar() ?i32 { return 1; } // error // backend=stage2 diff --git a/test/cases/compile_errors/while_expected_optional_got_bool.zig b/test/cases/compile_errors/while_expected_optional_got_bool.zig index 22b8c1e58c..5ced72b492 100644 --- a/test/cases/compile_errors/while_expected_optional_got_bool.zig +++ b/test/cases/compile_errors/while_expected_optional_got_bool.zig @@ -1,7 +1,11 @@ export fn foo() void { - while (bar()) |x| {_ = x;} + while (bar()) |x| { + _ = x; + } +} +fn bar() bool { + return true; } -fn bar() bool { return true; } // error // backend=stage2 diff --git a/test/cases/compile_errors/while_expected_optional_got_error_union.zig b/test/cases/compile_errors/while_expected_optional_got_error_union.zig index 38a8a0dd20..7bde2c866d 100644 --- a/test/cases/compile_errors/while_expected_optional_got_error_union.zig +++ b/test/cases/compile_errors/while_expected_optional_got_error_union.zig @@ -1,7 +1,11 @@ export fn foo() void { - while (bar()) |x| {_ = x;} + while (bar()) |x| { + _ = x; + } +} +fn bar() anyerror!i32 { + return 1; } -fn bar() anyerror!i32 { return 1; } // error // backend=stage2 diff --git a/test/cases/compile_errors/write_to_const_global_variable.zig b/test/cases/compile_errors/write_to_const_global_variable.zig index 5ffd3a305d..075854c454 100644 --- a/test/cases/compile_errors/write_to_const_global_variable.zig +++ b/test/cases/compile_errors/write_to_const_global_variable.zig @@ -1,8 +1,10 @@ -const x : i32 = 99; +const x: i32 = 99; fn f() void { x = 1; } -export fn entry() void { f(); } +export fn entry() void { + f(); +} // error // backend=stage2 diff --git a/test/cases/compile_errors/wrong_function_type.zig b/test/cases/compile_errors/wrong_function_type.zig index 867bdccc1a..6dfa9bd702 100644 --- a/test/cases/compile_errors/wrong_function_type.zig +++ b/test/cases/compile_errors/wrong_function_type.zig @@ -1,8 +1,16 @@ -const fns = [_]fn() void { a, b, c }; -fn a() i32 {return 0;} -fn b() i32 {return 1;} -fn c() i32 {return 2;} -export fn entry() usize { return @sizeOf(@TypeOf(fns)); } +const fns = [_]fn () void{ a, b, c }; +fn a() i32 { + return 0; +} +fn b() i32 { + return 1; +} +fn c() i32 { + return 2; +} +export fn entry() usize { + return @sizeOf(@TypeOf(fns)); +} // error // backend=stage2 diff --git a/test/cases/compile_errors/wrong_number_of_arguments.zig b/test/cases/compile_errors/wrong_number_of_arguments.zig index 05d761de18..b83a7a4a37 100644 --- a/test/cases/compile_errors/wrong_number_of_arguments.zig +++ b/test/cases/compile_errors/wrong_number_of_arguments.zig @@ -1,7 +1,11 @@ export fn a() void { c(1); } -fn c(d: i32, e: i32, f: i32) void { _ = d; _ = e; _ = f; } +fn c(d: i32, e: i32, f: i32) void { + _ = d; + _ = e; + _ = f; +} // error // backend=stage2 diff --git a/test/cases/compile_errors/wrong_number_of_arguments_for_method_fn_call.zig b/test/cases/compile_errors/wrong_number_of_arguments_for_method_fn_call.zig index da6a7be4fa..b0981e3d4d 100644 --- a/test/cases/compile_errors/wrong_number_of_arguments_for_method_fn_call.zig +++ b/test/cases/compile_errors/wrong_number_of_arguments_for_method_fn_call.zig @@ -1,15 +1,19 @@ const Foo = struct { - fn method(self: *const Foo, a: i32) void {_ = self; _ = a;} + fn method(self: *const Foo, a: i32) void { + _ = self; + _ = a; + } }; fn f(foo: *const Foo) void { - foo.method(1, 2); } -export fn entry() usize { return @sizeOf(@TypeOf(&f)); } +export fn entry() usize { + return @sizeOf(@TypeOf(&f)); +} // error // backend=stage2 // target=native // -// :6:8: error: member function expected 1 argument(s), found 2 +// :8:8: error: member function expected 1 argument(s), found 2 // :2:5: note: function declared here diff --git a/test/cases/compile_errors/wrong_size_to_an_array_literal.zig b/test/cases/compile_errors/wrong_size_to_an_array_literal.zig index a38d8d4d85..a58d6d9846 100644 --- a/test/cases/compile_errors/wrong_size_to_an_array_literal.zig +++ b/test/cases/compile_errors/wrong_size_to_an_array_literal.zig @@ -1,5 +1,5 @@ comptime { - const array = [2]u8{1, 2, 3}; + const array = [2]u8{ 1, 2, 3 }; _ = array; } diff --git a/test/cases/compile_errors/wrong_types_given_to_export.zig b/test/cases/compile_errors/wrong_types_given_to_export.zig index 2ae55b4a63..6e688d33d6 100644 --- a/test/cases/compile_errors/wrong_types_given_to_export.zig +++ b/test/cases/compile_errors/wrong_types_given_to_export.zig @@ -1,11 +1,11 @@ -fn entry() callconv(.C) void { } +fn entry() callconv(.C) void {} comptime { - @export(entry, .{.name = "entry", .linkage = @as(u32, 1234) }); + @export(entry, .{ .name = "entry", .linkage = @as(u32, 1234) }); } // error // backend=stage2 // target=native // -// :3:50: error: expected type 'builtin.GlobalLinkage', found 'u32' +// :3:51: error: expected type 'builtin.GlobalLinkage', found 'u32' // :?:?: note: enum declared here diff --git a/test/cases/comptime_var.2.zig b/test/cases/comptime_var.2.zig index 7c99aba625..2d717cb802 100644 --- a/test/cases/comptime_var.2.zig +++ b/test/cases/comptime_var.2.zig @@ -8,7 +8,7 @@ pub fn main() void { } fn print(len: usize) void { - _ = write(1, @ptrToInt("Hello, World!\n"), len); + _ = write(1, @intFromPtr("Hello, World!\n"), len); } // run diff --git a/test/cases/comptime_var.6.zig b/test/cases/comptime_var.6.zig index 3b655e381e..d4e96106bb 100644 --- a/test/cases/comptime_var.6.zig +++ b/test/cases/comptime_var.6.zig @@ -7,7 +7,7 @@ pub fn main() void { } } fn print(len: usize) void { - _ = write(1, @ptrToInt("Hello"), len); + _ = write(1, @intFromPtr("Hello"), len); } // run diff --git a/test/cases/conditional_branches.0.zig b/test/cases/conditional_branches.0.zig index 61c9fdd50e..d1fce95b2c 100644 --- a/test/cases/conditional_branches.0.zig +++ b/test/cases/conditional_branches.0.zig @@ -12,7 +12,7 @@ fn foo(x: u64) void { fn print() void { const str = "Hello, World!\n"; - _ = write(1, @ptrToInt(str.ptr), ptr.len); + _ = write(1, @intFromPtr(str.ptr), ptr.len); } // run diff --git a/test/cases/conditional_branches.1.zig b/test/cases/conditional_branches.1.zig index 2668133a7c..f402cd3bd4 100644 --- a/test/cases/conditional_branches.1.zig +++ b/test/cases/conditional_branches.1.zig @@ -15,7 +15,7 @@ fn foo(x: bool) void { fn print() void { const str = "Hello, World!\n"; - _ = write(1, @ptrToInt(str.ptr), ptr.len); + _ = write(1, @intFromPtr(str.ptr), ptr.len); } // run diff --git a/test/cases/decl_value_arena.zig b/test/cases/decl_value_arena.zig index 02062c4543..9c7c12903b 100644 --- a/test/cases/decl_value_arena.zig +++ b/test/cases/decl_value_arena.zig @@ -1,20 +1,20 @@ pub const Protocols: struct { - list: *const fn(*Connection) void = undefined, - handShake: type = struct { - const stepStart: u8 = 0; - }, + list: *const fn (*Connection) void = undefined, + handShake: type = struct { + const stepStart: u8 = 0; + }, } = .{}; pub const Connection = struct { - streamBuffer: [0]u8 = undefined, - __lastReceivedPackets: [0]u8 = undefined, + streamBuffer: [0]u8 = undefined, + __lastReceivedPackets: [0]u8 = undefined, - handShakeState: u8 = Protocols.handShake.stepStart, + handShakeState: u8 = Protocols.handShake.stepStart, }; pub fn main() void { - var conn: Connection = undefined; - _ = conn; + var conn: Connection = undefined; + _ = conn; } // run diff --git a/test/cases/enum_values.0.zig b/test/cases/enum_values.0.zig index d96841dd8c..2c44a095dd 100644 --- a/test/cases/enum_values.0.zig +++ b/test/cases/enum_values.0.zig @@ -7,8 +7,8 @@ pub fn main() void { number1; number2; } - const number3 = @intToEnum(Number, 2); - if (@enumToInt(number3) != 2) { + const number3 = @enumFromInt(Number, 2); + if (@intFromEnum(number3) != 2) { unreachable; } return; diff --git a/test/cases/enum_values.1.zig b/test/cases/enum_values.1.zig index 47b9e21a27..1b5a9836db 100644 --- a/test/cases/enum_values.1.zig +++ b/test/cases/enum_values.1.zig @@ -3,12 +3,12 @@ const Number = enum { One, Two, Three }; pub fn main() void { var number1 = Number.One; var number2: Number = .Two; - const number3 = @intToEnum(Number, 2); + const number3 = @enumFromInt(Number, 2); assert(number1 != number2); assert(number2 != number3); - assert(@enumToInt(number1) == 0); - assert(@enumToInt(number2) == 1); - assert(@enumToInt(number3) == 2); + assert(@intFromEnum(number1) == 0); + assert(@intFromEnum(number2) == 1); + assert(@intFromEnum(number3) == 2); var x: Number = .Two; assert(number2 == x); diff --git a/test/cases/error_in_nested_declaration.zig b/test/cases/error_in_nested_declaration.zig index 3fff746909..710b821e65 100644 --- a/test/cases/error_in_nested_declaration.zig +++ b/test/cases/error_in_nested_declaration.zig @@ -5,7 +5,7 @@ const S = struct { pub fn str(_: @This(), extra: []u32) []i32 { return @bitCast([]i32, extra); } - }, + }, }; pub export fn entry() void { diff --git a/test/cases/hello_world_with_updates.2.zig b/test/cases/hello_world_with_updates.2.zig index be6dc58c74..db5564e3a7 100644 --- a/test/cases/hello_world_with_updates.2.zig +++ b/test/cases/hello_world_with_updates.2.zig @@ -8,7 +8,7 @@ pub export fn main() noreturn { } fn print() void { - const msg = @ptrToInt("Hello, World!\n"); + const msg = @intFromPtr("Hello, World!\n"); const len = 14; _ = write(1, msg, len); } diff --git a/test/cases/hello_world_with_updates.3.zig b/test/cases/hello_world_with_updates.3.zig index f464c379aa..8c57d52924 100644 --- a/test/cases/hello_world_with_updates.3.zig +++ b/test/cases/hello_world_with_updates.3.zig @@ -5,7 +5,7 @@ pub fn main() void { } fn print() void { - const msg = @ptrToInt("Hello, World!\n"); + const msg = @intFromPtr("Hello, World!\n"); const len = 14; _ = write(1, msg, len); } diff --git a/test/cases/hello_world_with_updates.4.zig b/test/cases/hello_world_with_updates.4.zig index c9efbd0f35..54641a3ad5 100644 --- a/test/cases/hello_world_with_updates.4.zig +++ b/test/cases/hello_world_with_updates.4.zig @@ -8,7 +8,7 @@ pub fn main() void { } fn print() void { - const msg = @ptrToInt("Hello, World!\n"); + const msg = @intFromPtr("Hello, World!\n"); const len = 14; _ = write(1, msg, len); } diff --git a/test/cases/hello_world_with_updates.5.zig b/test/cases/hello_world_with_updates.5.zig index 5070ea457c..ae57d9b7b6 100644 --- a/test/cases/hello_world_with_updates.5.zig +++ b/test/cases/hello_world_with_updates.5.zig @@ -5,7 +5,7 @@ pub fn main() void { } fn print() void { - const msg = @ptrToInt("What is up? This is a longer message that will force the data to be relocated in virtual address space.\n"); + const msg = @intFromPtr("What is up? This is a longer message that will force the data to be relocated in virtual address space.\n"); const len = 104; _ = write(1, msg, len); } diff --git a/test/cases/hello_world_with_updates.6.zig b/test/cases/hello_world_with_updates.6.zig index a33f2954e5..76f006992e 100644 --- a/test/cases/hello_world_with_updates.6.zig +++ b/test/cases/hello_world_with_updates.6.zig @@ -8,7 +8,7 @@ pub fn main() void { } fn print() void { - const msg = @ptrToInt("What is up? This is a longer message that will force the data to be relocated in virtual address space.\n"); + const msg = @intFromPtr("What is up? This is a longer message that will force the data to be relocated in virtual address space.\n"); const len = 104; _ = write(1, msg, len); } diff --git a/test/cases/int_to_ptr.0.zig b/test/cases/int_to_ptr.0.zig index b7c70b90a4..ba14c03804 100644 --- a/test/cases/int_to_ptr.0.zig +++ b/test/cases/int_to_ptr.0.zig @@ -1,5 +1,5 @@ pub fn main() void { - _ = @intToPtr(*u8, 0); + _ = @ptrFromInt(*u8, 0); } // error diff --git a/test/cases/int_to_ptr.1.zig b/test/cases/int_to_ptr.1.zig index 72c8c8c9d6..e75ae81f6f 100644 --- a/test/cases/int_to_ptr.1.zig +++ b/test/cases/int_to_ptr.1.zig @@ -1,5 +1,5 @@ pub fn main() void { - _ = @intToPtr(*u32, 2); + _ = @ptrFromInt(*u32, 2); } // error diff --git a/test/cases/llvm/f_segment_address_space_reading_and_writing.zig b/test/cases/llvm/f_segment_address_space_reading_and_writing.zig index 62db92668b..507362a937 100644 --- a/test/cases/llvm/f_segment_address_space_reading_and_writing.zig +++ b/test/cases/llvm/f_segment_address_space_reading_and_writing.zig @@ -20,7 +20,7 @@ fn getFs() c_ulong { : : [number] "{rax}" (158), [code] "{rdi}" (0x1003), - [ptr] "{rsi}" (@ptrToInt(&result)), + [ptr] "{rsi}" (@intFromPtr(&result)), : "rcx", "r11", "memory" ); return result; @@ -31,10 +31,10 @@ var test_value: u64 = 12345; pub fn main() void { const orig_fs = getFs(); - setFs(@ptrToInt(&test_value)); - assert(getFs() == @ptrToInt(&test_value)); + setFs(@intFromPtr(&test_value)); + assert(getFs() == @intFromPtr(&test_value)); - var test_ptr = @intToPtr(*allowzero addrspace(.fs) u64, 0); + var test_ptr = @ptrFromInt(*allowzero addrspace(.fs) u64, 0); assert(test_ptr.* == 12345); test_ptr.* = 98765; assert(test_value == 98765); diff --git a/test/cases/safety/@alignCast misaligned.zig b/test/cases/safety/@alignCast misaligned.zig index aed805cf66..538e0ecdf6 100644 --- a/test/cases/safety/@alignCast misaligned.zig +++ b/test/cases/safety/@alignCast misaligned.zig @@ -9,7 +9,7 @@ pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usi } pub fn main() !void { - var array align(4) = [_]u32{0x11111111, 0x11111111}; + var array align(4) = [_]u32{ 0x11111111, 0x11111111 }; const bytes = std.mem.sliceAsBytes(array[0..]); if (foo(bytes) != 0x11111111) return error.Wrong; return error.TestFailed; diff --git a/test/cases/safety/@intToEnum - no matching tag value.zig b/test/cases/safety/@enumFromInt - no matching tag value.zig similarity index 93% rename from test/cases/safety/@intToEnum - no matching tag value.zig rename to test/cases/safety/@enumFromInt - no matching tag value.zig index c4967b413b..57f8954f93 100644 --- a/test/cases/safety/@intToEnum - no matching tag value.zig +++ b/test/cases/safety/@enumFromInt - no matching tag value.zig @@ -17,7 +17,7 @@ pub fn main() !void { return error.TestFailed; } fn bar(a: u2) Foo { - return @intToEnum(Foo, a); + return @enumFromInt(Foo, a); } fn baz(_: Foo) void {} diff --git a/test/cases/safety/@errSetCast error not present in destination.zig b/test/cases/safety/@errSetCast error not present in destination.zig index 2fd0a912e6..372bd80aa5 100644 --- a/test/cases/safety/@errSetCast error not present in destination.zig +++ b/test/cases/safety/@errSetCast error not present in destination.zig @@ -7,8 +7,8 @@ pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usi } std.process.exit(1); } -const Set1 = error{A, B}; -const Set2 = error{A, C}; +const Set1 = error{ A, B }; +const Set2 = error{ A, C }; pub fn main() !void { foo(Set1.B) catch {}; return error.TestFailed; diff --git a/test/cases/safety/@floatToInt cannot fit - negative out of range.zig b/test/cases/safety/@intFromFloat cannot fit - negative out of range.zig similarity index 88% rename from test/cases/safety/@floatToInt cannot fit - negative out of range.zig rename to test/cases/safety/@intFromFloat cannot fit - negative out of range.zig index fa7e628f4a..9a8853c0e9 100644 --- a/test/cases/safety/@floatToInt cannot fit - negative out of range.zig +++ b/test/cases/safety/@intFromFloat cannot fit - negative out of range.zig @@ -12,9 +12,9 @@ pub fn main() !void { return error.TestFailed; } fn bar(a: f32) i8 { - return @floatToInt(i8, a); + return @intFromFloat(i8, a); } -fn baz(_: i8) void { } +fn baz(_: i8) void {} // run // backend=llvm // target=native diff --git a/test/cases/safety/@floatToInt cannot fit - negative to unsigned.zig b/test/cases/safety/@intFromFloat cannot fit - negative to unsigned.zig similarity index 88% rename from test/cases/safety/@floatToInt cannot fit - negative to unsigned.zig rename to test/cases/safety/@intFromFloat cannot fit - negative to unsigned.zig index 5bab7710b1..caf7bbf0d6 100644 --- a/test/cases/safety/@floatToInt cannot fit - negative to unsigned.zig +++ b/test/cases/safety/@intFromFloat cannot fit - negative to unsigned.zig @@ -12,9 +12,9 @@ pub fn main() !void { return error.TestFailed; } fn bar(a: f32) u8 { - return @floatToInt(u8, a); + return @intFromFloat(u8, a); } -fn baz(_: u8) void { } +fn baz(_: u8) void {} // run // backend=llvm // target=native diff --git a/test/cases/safety/@floatToInt cannot fit - positive out of range.zig b/test/cases/safety/@intFromFloat cannot fit - positive out of range.zig similarity index 88% rename from test/cases/safety/@floatToInt cannot fit - positive out of range.zig rename to test/cases/safety/@intFromFloat cannot fit - positive out of range.zig index fe931e8751..d335238b65 100644 --- a/test/cases/safety/@floatToInt cannot fit - positive out of range.zig +++ b/test/cases/safety/@intFromFloat cannot fit - positive out of range.zig @@ -12,9 +12,9 @@ pub fn main() !void { return error.TestFailed; } fn bar(a: f32) u8 { - return @floatToInt(u8, a); + return @intFromFloat(u8, a); } -fn baz(_: u8) void { } +fn baz(_: u8) void {} // run // backend=llvm // target=native diff --git a/test/cases/safety/@intToPtr address zero to non-optional byte-aligned pointer.zig b/test/cases/safety/@ptrFromInt address zero to non-optional byte-aligned pointer.zig similarity index 91% rename from test/cases/safety/@intToPtr address zero to non-optional byte-aligned pointer.zig rename to test/cases/safety/@ptrFromInt address zero to non-optional byte-aligned pointer.zig index 413959706f..345d5cfc74 100644 --- a/test/cases/safety/@intToPtr address zero to non-optional byte-aligned pointer.zig +++ b/test/cases/safety/@ptrFromInt address zero to non-optional byte-aligned pointer.zig @@ -9,7 +9,7 @@ pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usi } pub fn main() !void { var zero: usize = 0; - var b = @intToPtr(*u8, zero); + var b = @ptrFromInt(*u8, zero); _ = b; return error.TestFailed; } diff --git a/test/cases/safety/@intToPtr address zero to non-optional pointer.zig b/test/cases/safety/@ptrFromInt address zero to non-optional pointer.zig similarity index 91% rename from test/cases/safety/@intToPtr address zero to non-optional pointer.zig rename to test/cases/safety/@ptrFromInt address zero to non-optional pointer.zig index 457b2d12c0..e7d3b66d6c 100644 --- a/test/cases/safety/@intToPtr address zero to non-optional pointer.zig +++ b/test/cases/safety/@ptrFromInt address zero to non-optional pointer.zig @@ -9,7 +9,7 @@ pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usi } pub fn main() !void { var zero: usize = 0; - var b = @intToPtr(*i32, zero); + var b = @ptrFromInt(*i32, zero); _ = b; return error.TestFailed; } diff --git a/test/cases/safety/intToPtr with misaligned address.zig b/test/cases/safety/@ptrFromInt with misaligned address.zig similarity index 89% rename from test/cases/safety/intToPtr with misaligned address.zig rename to test/cases/safety/@ptrFromInt with misaligned address.zig index e53c7e9087..c2e1d351eb 100644 --- a/test/cases/safety/intToPtr with misaligned address.zig +++ b/test/cases/safety/@ptrFromInt with misaligned address.zig @@ -9,7 +9,7 @@ pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usi } pub fn main() !void { var x: usize = 5; - var y = @intToPtr([*]align(4) u8, x); + var y = @ptrFromInt([*]align(4) u8, x); _ = y; return error.TestFailed; } diff --git a/test/cases/safety/bad union field access.zig b/test/cases/safety/bad union field access.zig index fbe7718c66..c6706d4176 100644 --- a/test/cases/safety/bad union field access.zig +++ b/test/cases/safety/bad union field access.zig @@ -14,7 +14,7 @@ const Foo = union { }; pub fn main() !void { - var f = Foo { .int = 42 }; + var f = Foo{ .int = 42 }; bar(&f); return error.TestFailed; } diff --git a/test/cases/safety/cast []u8 to bigger slice of wrong size.zig b/test/cases/safety/cast []u8 to bigger slice of wrong size.zig index 93d18178a8..a72b2fcca2 100644 --- a/test/cases/safety/cast []u8 to bigger slice of wrong size.zig +++ b/test/cases/safety/cast []u8 to bigger slice of wrong size.zig @@ -9,7 +9,7 @@ pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usi } pub fn main() !void { - const x = widenSlice(&[_]u8{1, 2, 3, 4, 5}); + const x = widenSlice(&[_]u8{ 1, 2, 3, 4, 5 }); if (x.len == 0) return error.Whatever; return error.TestFailed; } diff --git a/test/cases/safety/cast integer to global error and no code matches.zig b/test/cases/safety/cast integer to global error and no code matches.zig index 466bf8d2ca..61daf07a2b 100644 --- a/test/cases/safety/cast integer to global error and no code matches.zig +++ b/test/cases/safety/cast integer to global error and no code matches.zig @@ -12,7 +12,7 @@ pub fn main() !void { return error.TestFailed; } fn bar(x: u16) anyerror { - return @intToError(x); + return @errorFromInt(x); } // run // backend=llvm diff --git a/test/cases/safety/error return trace across suspend points.zig b/test/cases/safety/error return trace across suspend points.zig index 28c53cb6d1..2c31aacc9d 100644 --- a/test/cases/safety/error return trace across suspend points.zig +++ b/test/cases/safety/error return trace across suspend points.zig @@ -1,6 +1,5 @@ const std = @import("std"); - pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn { _ = message; _ = stack_trace; @@ -36,4 +35,4 @@ fn printTrace(p: anyframe->anyerror!void) void { } // run // backend=stage1 -// target=native \ No newline at end of file +// target=native diff --git a/test/cases/safety/exact division failure - vectors.zig b/test/cases/safety/exact division failure - vectors.zig index 3c515cbdf1..cc8c01db9e 100644 --- a/test/cases/safety/exact division failure - vectors.zig +++ b/test/cases/safety/exact division failure - vectors.zig @@ -9,8 +9,8 @@ pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usi } pub fn main() !void { - var a: @Vector(4, i32) = [4]i32{111, 222, 333, 444}; - var b: @Vector(4, i32) = [4]i32{111, 222, 333, 441}; + var a: @Vector(4, i32) = [4]i32{ 111, 222, 333, 444 }; + var b: @Vector(4, i32) = [4]i32{ 111, 222, 333, 441 }; const x = divExact(a, b); _ = x; return error.TestFailed; diff --git a/test/cases/safety/for_len_mismatch_three.zig b/test/cases/safety/for_len_mismatch_three.zig index 95bc244269..0cfcddbfee 100644 --- a/test/cases/safety/for_len_mismatch_three.zig +++ b/test/cases/safety/for_len_mismatch_three.zig @@ -21,4 +21,3 @@ pub fn main() !void { // run // backend=llvm // target=native - diff --git a/test/cases/safety/integer division by zero - vectors.zig b/test/cases/safety/integer division by zero - vectors.zig index ed7ac7777b..a376b66fdb 100644 --- a/test/cases/safety/integer division by zero - vectors.zig +++ b/test/cases/safety/integer division by zero - vectors.zig @@ -8,8 +8,8 @@ pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usi std.process.exit(1); } pub fn main() !void { - var a: @Vector(4, i32) = [4]i32{111, 222, 333, 444}; - var b: @Vector(4, i32) = [4]i32{111, 0, 333, 444}; + var a: @Vector(4, i32) = [4]i32{ 111, 222, 333, 444 }; + var b: @Vector(4, i32) = [4]i32{ 111, 0, 333, 444 }; const x = div0(a, b); _ = x; return error.TestFailed; diff --git a/test/cases/safety/pointer casting to null function pointer.zig b/test/cases/safety/pointer casting to null function pointer.zig index bedbcdda85..7736cb5034 100644 --- a/test/cases/safety/pointer casting to null function pointer.zig +++ b/test/cases/safety/pointer casting to null function pointer.zig @@ -13,7 +13,7 @@ fn getNullPtr() ?*const anyopaque { } pub fn main() !void { const null_ptr: ?*const anyopaque = getNullPtr(); - const required_ptr: *align(1) const fn() void = @ptrCast(*align(1) const fn() void, null_ptr); + const required_ptr: *align(1) const fn () void = @ptrCast(*align(1) const fn () void, null_ptr); _ = required_ptr; return error.TestFailed; } diff --git a/test/cases/safety/slice sentinel mismatch - optional pointers.zig b/test/cases/safety/slice sentinel mismatch - optional pointers.zig index 6be303d9aa..33f4a1099b 100644 --- a/test/cases/safety/slice sentinel mismatch - optional pointers.zig +++ b/test/cases/safety/slice sentinel mismatch - optional pointers.zig @@ -9,7 +9,7 @@ pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usi } pub fn main() !void { - var buf: [4]?*i32 = .{ @intToPtr(*i32, 4), @intToPtr(*i32, 8), @intToPtr(*i32, 12), @intToPtr(*i32, 16) }; + var buf: [4]?*i32 = .{ @ptrFromInt(*i32, 4), @ptrFromInt(*i32, 8), @ptrFromInt(*i32, 12), @ptrFromInt(*i32, 16) }; const slice = buf[0..3 :null]; _ = slice; return error.TestFailed; diff --git a/test/cases/safety/zero casted to error.zig b/test/cases/safety/zero casted to error.zig index c1be6856a7..78340db316 100644 --- a/test/cases/safety/zero casted to error.zig +++ b/test/cases/safety/zero casted to error.zig @@ -12,7 +12,7 @@ pub fn main() !void { return error.TestFailed; } fn bar(x: u16) anyerror { - return @intToError(x); + return @errorFromInt(x); } // run // backend=llvm diff --git a/test/cases/unused_labels.3.zig b/test/cases/unused_labels.3.zig index e4f3ac05a4..36c9aa2319 100644 --- a/test/cases/unused_labels.3.zig +++ b/test/cases/unused_labels.3.zig @@ -1,5 +1,7 @@ comptime { - blk: {blk: {}} + blk: { + blk: {} + } } // error diff --git a/test/cases/variable_shadowing.3.zig b/test/cases/variable_shadowing.3.zig index 3d899e72cc..af16bccc14 100644 --- a/test/cases/variable_shadowing.3.zig +++ b/test/cases/variable_shadowing.3.zig @@ -1,7 +1,6 @@ pub fn main() void { var i = 0; - for ("n", 0..) |_, i| { - } + for ("n", 0..) |_, i| {} } // error diff --git a/test/cases/variable_shadowing.4.zig b/test/cases/variable_shadowing.4.zig index ab9f93d17d..3653c2457d 100644 --- a/test/cases/variable_shadowing.4.zig +++ b/test/cases/variable_shadowing.4.zig @@ -1,7 +1,6 @@ pub fn main() void { var i = 0; - for ("n") |i| { - } + for ("n") |i| {} } // error diff --git a/test/cases/variable_shadowing.5.zig b/test/cases/variable_shadowing.5.zig index 1a5676190a..78247e68fe 100644 --- a/test/cases/variable_shadowing.5.zig +++ b/test/cases/variable_shadowing.5.zig @@ -1,7 +1,6 @@ pub fn main() void { var i = 0; - while ("n") |i| { - } + while ("n") |i| {} } // error diff --git a/test/cases/variable_shadowing.6.zig b/test/cases/variable_shadowing.6.zig index 894a398b61..a3ae7bc346 100644 --- a/test/cases/variable_shadowing.6.zig +++ b/test/cases/variable_shadowing.6.zig @@ -2,9 +2,7 @@ pub fn main() void { var i = 0; while ("n") |bruh| { _ = bruh; - } else |i| { - - } + } else |i| {} } // error diff --git a/test/cases/x86_64-linux/inline_assembly.2.zig b/test/cases/x86_64-linux/inline_assembly.2.zig index 1695265ab4..7958d0df71 100644 --- a/test/cases/x86_64-linux/inline_assembly.2.zig +++ b/test/cases/x86_64-linux/inline_assembly.2.zig @@ -2,7 +2,7 @@ pub fn main() void { var bruh: u32 = 1; asm ("" : - : [bruh] "{rax}" (4) + : [bruh] "{rax}" (4), : "memory" ); } diff --git a/test/cases/x86_64-linux/inline_assembly.3.zig b/test/cases/x86_64-linux/inline_assembly.3.zig index 765eaeb97e..a6f57e832a 100644 --- a/test/cases/x86_64-linux/inline_assembly.3.zig +++ b/test/cases/x86_64-linux/inline_assembly.3.zig @@ -2,7 +2,7 @@ pub fn main() void {} comptime { asm ("" : - : [bruh] "{rax}" (4) + : [bruh] "{rax}" (4), : "memory" ); } diff --git a/test/cbe.zig b/test/cbe.zig index 25ac3cb137..f0cf720fd3 100644 --- a/test/cbe.zig +++ b/test/cbe.zig @@ -71,22 +71,22 @@ pub fn addCases(ctx: *Cases) !void { } { - var case = ctx.exeFromCompiledC("intToError", .{}); + var case = ctx.exeFromCompiledC("errorFromInt", .{}); case.addCompareOutput( \\pub export fn main() c_int { \\ // comptime checks \\ const a = error.A; \\ const b = error.B; - \\ const c = @intToError(2); - \\ const d = @intToError(1); + \\ const c = @errorFromInt(2); + \\ const d = @errorFromInt(1); \\ if (!(c == b)) unreachable; \\ if (!(a == d)) unreachable; \\ // runtime checks \\ var x = error.A; \\ var y = error.B; - \\ var z = @intToError(2); - \\ var f = @intToError(1); + \\ var z = @errorFromInt(2); + \\ var f = @errorFromInt(1); \\ if (!(y == z)) unreachable; \\ if (!(x == f)) unreachable; \\ return 0; @@ -94,13 +94,13 @@ pub fn addCases(ctx: *Cases) !void { , ""); case.addError( \\pub export fn main() c_int { - \\ _ = @intToError(0); + \\ _ = @errorFromInt(0); \\ return 0; \\} , &.{":2:21: error: integer value '0' represents no error"}); case.addError( \\pub export fn main() c_int { - \\ _ = @intToError(3); + \\ _ = @errorFromInt(3); \\ return 0; \\} , &.{":2:21: error: integer value '3' represents no error"}); @@ -635,19 +635,19 @@ pub fn addCases(ctx: *Cases) !void { ":6:12: note: consider 'union(enum)' here to make it a tagged union", }); - // @enumToInt, @intToEnum, enum literal coercion, field access syntax, comparison, switch + // @intFromEnum, @enumFromInt, enum literal coercion, field access syntax, comparison, switch case.addCompareOutput( \\const Number = enum { One, Two, Three }; \\ \\pub export fn main() c_int { \\ var number1 = Number.One; \\ var number2: Number = .Two; - \\ const number3 = @intToEnum(Number, 2); + \\ const number3 = @enumFromInt(Number, 2); \\ if (number1 == number2) return 1; \\ if (number2 == number3) return 1; - \\ if (@enumToInt(number1) != 0) return 1; - \\ if (@enumToInt(number2) != 1) return 1; - \\ if (@enumToInt(number3) != 2) return 1; + \\ if (@intFromEnum(number1) != 0) return 1; + \\ if (@intFromEnum(number2) != 1) return 1; + \\ if (@intFromEnum(number3) != 2) return 1; \\ var x: Number = .Two; \\ if (number2 != x) return 1; \\ switch (x) { @@ -728,7 +728,7 @@ pub fn addCases(ctx: *Cases) !void { case.addError( \\pub export fn main() c_int { \\ const a = true; - \\ _ = @enumToInt(a); + \\ _ = @intFromEnum(a); \\} , &.{ ":3:20: error: expected enum or tagged union, found 'bool'", @@ -737,7 +737,7 @@ pub fn addCases(ctx: *Cases) !void { case.addError( \\pub export fn main() c_int { \\ const a = 1; - \\ _ = @intToEnum(bool, a); + \\ _ = @enumFromInt(bool, a); \\} , &.{ ":3:20: error: expected enum, found 'bool'", @@ -746,7 +746,7 @@ pub fn addCases(ctx: *Cases) !void { case.addError( \\const E = enum { a, b, c }; \\pub export fn main() c_int { - \\ _ = @intToEnum(E, 3); + \\ _ = @enumFromInt(E, 3); \\} , &.{ ":3:9: error: enum 'tmp.E' has no tag with value '3'", diff --git a/test/compare_output.zig b/test/compare_output.zig index ad14152e76..66b5624443 100644 --- a/test/compare_output.zig +++ b/test/compare_output.zig @@ -229,8 +229,8 @@ pub fn addCases(cases: *tests.CompareOutputContext) void { \\ } \\ const small: f32 = 3.25; \\ const x: f64 = small; - \\ const y = @floatToInt(i32, x); - \\ const z = @intToFloat(f64, y); + \\ const y = @intFromFloat(i32, x); + \\ const z = @floatFromInt(f64, y); \\ _ = c.printf("%.2f\n%d\n%.2f\n%.2f\n", x, y, z, @as(f64, -0.4)); \\ return 0; \\} diff --git a/test/gen_h.zig b/test/gen_h.zig index c00abf320b..a41f4d6f82 100644 --- a/test/gen_h.zig +++ b/test/gen_h.zig @@ -137,7 +137,7 @@ pub fn addCases(cases: *tests.GenHContext) void { \\}; \\ \\export fn a(s: *E) u8 { - \\ return @enumToInt(s.*); + \\ return @intFromEnum(s.*); \\} , &[_][]const u8{ \\enum E; diff --git a/test/link/common_symbols_alignment/main.zig b/test/link/common_symbols_alignment/main.zig index 3d3457c764..06316b40fa 100644 --- a/test/link/common_symbols_alignment/main.zig +++ b/test/link/common_symbols_alignment/main.zig @@ -4,6 +4,6 @@ extern var foo: i32; extern var bar: i32; test { - try std.testing.expect(@ptrToInt(&foo) % 4 == 0); - try std.testing.expect(@ptrToInt(&bar) % 4096 == 0); + try std.testing.expect(@intFromPtr(&foo) % 4 == 0); + try std.testing.expect(@intFromPtr(&bar) % 4096 == 0); } diff --git a/test/standalone/pie/main.zig b/test/standalone/pie/main.zig index 6a49c45e97..89d204aa1c 100644 --- a/test/standalone/pie/main.zig +++ b/test/standalone/pie/main.zig @@ -5,7 +5,7 @@ threadlocal var foo: u8 = 42; test "Check ELF header" { // PIE executables are marked as ET_DYN, regular exes as ET_EXEC. - const header = @intToPtr(*elf.Ehdr, std.process.getBaseAddress()); + const header = @ptrFromInt(*elf.Ehdr, std.process.getBaseAddress()); try std.testing.expectEqual(elf.ET.DYN, header.e_type); } diff --git a/test/translate_c.zig b/test/translate_c.zig index 6caf69dcdb..966f3e2785 100644 --- a/test/translate_c.zig +++ b/test/translate_c.zig @@ -300,7 +300,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { , &[_][]const u8{ \\pub const FOO = (foo + @as(c_int, 2)).*; , - \\pub const VALUE = ((((@as(c_int, 1) + (@as(c_int, 2) * @as(c_int, 3))) + (@as(c_int, 4) * @as(c_int, 5))) + @as(c_int, 6)) << @as(c_int, 7)) | @boolToInt(@as(c_int, 8) == @as(c_int, 9)); + \\pub const VALUE = ((((@as(c_int, 1) + (@as(c_int, 2) * @as(c_int, 3))) + (@as(c_int, 4) * @as(c_int, 5))) + @as(c_int, 6)) << @as(c_int, 7)) | @intFromBool(@as(c_int, 8) == @as(c_int, 9)); , \\pub inline fn _AL_READ3BYTES(p: anytype) @TypeOf((@import("std").zig.c_translation.cast([*c]u8, p).* | ((@import("std").zig.c_translation.cast([*c]u8, p) + @as(c_int, 1)).* << @as(c_int, 8))) | ((@import("std").zig.c_translation.cast([*c]u8, p) + @as(c_int, 2)).* << @as(c_int, 16))) { \\ return (@import("std").zig.c_translation.cast([*c]u8, p).* | ((@import("std").zig.c_translation.cast([*c]u8, p) + @as(c_int, 1)).* << @as(c_int, 8))) | ((@import("std").zig.c_translation.cast([*c]u8, p) + @as(c_int, 2)).* << @as(c_int, 16)); @@ -439,8 +439,8 @@ pub fn addCases(cases: *tests.TranslateCContext) void { \\#define FOO(x) ((x >= 0) + (x >= 0)) \\#define BAR 1 && 2 > 4 , &[_][]const u8{ - \\pub inline fn FOO(x: anytype) @TypeOf(@boolToInt(x >= @as(c_int, 0)) + @boolToInt(x >= @as(c_int, 0))) { - \\ return @boolToInt(x >= @as(c_int, 0)) + @boolToInt(x >= @as(c_int, 0)); + \\pub inline fn FOO(x: anytype) @TypeOf(@intFromBool(x >= @as(c_int, 0)) + @intFromBool(x >= @as(c_int, 0))) { + \\ return @intFromBool(x >= @as(c_int, 0)) + @intFromBool(x >= @as(c_int, 0)); \\} , \\pub const BAR = (@as(c_int, 1) != 0) and (@as(c_int, 2) > @as(c_int, 4)); @@ -905,7 +905,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { \\pub extern fn foo() void; \\pub export fn bar() void { \\ var func_ptr: ?*anyopaque = @ptrCast(?*anyopaque, &foo); - \\ var typed_func_ptr: ?*const fn () callconv(.C) void = @intToPtr(?*const fn () callconv(.C) void, @intCast(c_ulong, @ptrToInt(func_ptr))); + \\ var typed_func_ptr: ?*const fn () callconv(.C) void = @ptrFromInt(?*const fn () callconv(.C) void, @intCast(c_ulong, @intFromPtr(func_ptr))); \\ _ = @TypeOf(typed_func_ptr); \\} }); @@ -1719,10 +1719,10 @@ pub fn addCases(cases: *tests.TranslateCContext) void { \\ var a: c_int = undefined; \\ var b: f32 = undefined; \\ var c: ?*anyopaque = undefined; - \\ return @boolToInt(!(a == @as(c_int, 0))); - \\ return @boolToInt(!(a != 0)); - \\ return @boolToInt(!(b != 0)); - \\ return @boolToInt(!(c != null)); + \\ return @intFromBool(!(a == @as(c_int, 0))); + \\ return @intFromBool(!(a != 0)); + \\ return @intFromBool(!(b != 0)); + \\ return @intFromBool(!(c != null)); \\} }); @@ -2238,7 +2238,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { , &[_][]const u8{ \\pub export var a: f32 = @floatCast(f32, 3.1415); \\pub export var b: f64 = 3.1415; - \\pub export var c: c_int = @floatToInt(c_int, 3.1415); + \\pub export var c: c_int = @intFromFloat(c_int, 3.1415); \\pub export var d: f64 = 3; }); @@ -2417,13 +2417,13 @@ pub fn addCases(cases: *tests.TranslateCContext) void { }); cases.add("c style cast", - \\int float_to_int(float a) { + \\int int_from_float(float a) { \\ return (int)a; \\} , &[_][]const u8{ - \\pub export fn float_to_int(arg_a: f32) c_int { + \\pub export fn int_from_float(arg_a: f32) c_int { \\ var a = arg_a; - \\ return @floatToInt(c_int, a); + \\ return @intFromFloat(c_int, a); \\} }); @@ -2534,18 +2534,18 @@ pub fn addCases(cases: *tests.TranslateCContext) void { \\ var b = arg_b; \\ var c = arg_c; \\ var d: enum_Foo = @bitCast(c_uint, FooA); - \\ var e: c_int = @boolToInt((a != 0) and (b != 0)); - \\ var f: c_int = @boolToInt((b != 0) and (c != null)); - \\ var g: c_int = @boolToInt((a != 0) and (c != null)); - \\ var h: c_int = @boolToInt((a != 0) or (b != 0)); - \\ var i: c_int = @boolToInt((b != 0) or (c != null)); - \\ var j: c_int = @boolToInt((a != 0) or (c != null)); - \\ var k: c_int = @boolToInt((a != 0) or (@bitCast(c_int, d) != 0)); - \\ var l: c_int = @boolToInt((@bitCast(c_int, d) != 0) and (b != 0)); - \\ var m: c_int = @boolToInt((c != null) or (d != 0)); + \\ var e: c_int = @intFromBool((a != 0) and (b != 0)); + \\ var f: c_int = @intFromBool((b != 0) and (c != null)); + \\ var g: c_int = @intFromBool((a != 0) and (c != null)); + \\ var h: c_int = @intFromBool((a != 0) or (b != 0)); + \\ var i: c_int = @intFromBool((b != 0) or (c != null)); + \\ var j: c_int = @intFromBool((a != 0) or (c != null)); + \\ var k: c_int = @intFromBool((a != 0) or (@bitCast(c_int, d) != 0)); + \\ var l: c_int = @intFromBool((@bitCast(c_int, d) != 0) and (b != 0)); + \\ var m: c_int = @intFromBool((c != null) or (d != 0)); \\ var td: SomeTypedef = 44; - \\ var o: c_int = @boolToInt((td != 0) or (b != 0)); - \\ var p: c_int = @boolToInt((c != null) and (td != 0)); + \\ var o: c_int = @intFromBool((td != 0) or (b != 0)); + \\ var p: c_int = @intFromBool((c != null) and (td != 0)); \\ return (((((((((e + f) + g) + h) + i) + j) + k) + l) + m) + o) + p; \\} , @@ -2605,13 +2605,13 @@ pub fn addCases(cases: *tests.TranslateCContext) void { \\pub export fn test_comparisons(arg_a: c_int, arg_b: c_int) c_int { \\ var a = arg_a; \\ var b = arg_b; - \\ var c: c_int = @boolToInt(a < b); - \\ var d: c_int = @boolToInt(a > b); - \\ var e: c_int = @boolToInt(a <= b); - \\ var f: c_int = @boolToInt(a >= b); - \\ var g: c_int = @boolToInt(c < d); - \\ var h: c_int = @boolToInt(e < f); - \\ var i: c_int = @boolToInt(g < h); + \\ var c: c_int = @intFromBool(a < b); + \\ var d: c_int = @intFromBool(a > b); + \\ var e: c_int = @intFromBool(a <= b); + \\ var f: c_int = @intFromBool(a >= b); + \\ var g: c_int = @intFromBool(c < d); + \\ var h: c_int = @intFromBool(e < f); + \\ var i: c_int = @intFromBool(g < h); \\ return i; \\} }); @@ -3258,11 +3258,11 @@ pub fn addCases(cases: *tests.TranslateCContext) void { \\pub extern fn fn_bool(x: bool) void; \\pub extern fn fn_ptr(x: ?*anyopaque) void; \\pub export fn call() void { - \\ fn_int(@floatToInt(c_int, 3.0)); - \\ fn_int(@floatToInt(c_int, 3.0)); + \\ fn_int(@intFromFloat(c_int, 3.0)); + \\ fn_int(@intFromFloat(c_int, 3.0)); \\ fn_int(@as(c_int, 1094861636)); - \\ fn_f32(@intToFloat(f32, @as(c_int, 3))); - \\ fn_f64(@intToFloat(f64, @as(c_int, 3))); + \\ fn_f32(@floatFromInt(f32, @as(c_int, 3))); + \\ fn_f64(@floatFromInt(f64, @as(c_int, 3))); \\ fn_char(@bitCast(u8, @truncate(i8, @as(c_int, '3')))); \\ fn_char(@bitCast(u8, @truncate(i8, @as(c_int, '\x01')))); \\ fn_char(@bitCast(u8, @truncate(i8, @as(c_int, 0)))); @@ -3270,9 +3270,9 @@ pub fn addCases(cases: *tests.TranslateCContext) void { \\ fn_f64(3.0); \\ fn_bool(@as(c_int, 123) != 0); \\ fn_bool(@as(c_int, 0) != 0); - \\ fn_bool(@ptrToInt(&fn_int) != 0); - \\ fn_int(@intCast(c_int, @ptrToInt(&fn_int))); - \\ fn_ptr(@intToPtr(?*anyopaque, @as(c_int, 42))); + \\ fn_bool(@intFromPtr(&fn_int) != 0); + \\ fn_int(@intCast(c_int, @intFromPtr(&fn_int))); + \\ fn_ptr(@ptrFromInt(?*anyopaque, @as(c_int, 42))); \\} }); @@ -3473,11 +3473,11 @@ pub fn addCases(cases: *tests.TranslateCContext) void { \\} \\pub export fn bar(arg_a: [*c]const c_int) void { \\ var a = arg_a; - \\ foo(@intToPtr([*c]c_int, @ptrToInt(a))); + \\ foo(@ptrFromInt([*c]c_int, @intFromPtr(a))); \\} \\pub export fn baz(arg_a: [*c]volatile c_int) void { \\ var a = arg_a; - \\ foo(@intToPtr([*c]c_int, @ptrToInt(a))); + \\ foo(@ptrFromInt([*c]c_int, @intFromPtr(a))); \\} }); @@ -3491,10 +3491,10 @@ pub fn addCases(cases: *tests.TranslateCContext) void { , &[_][]const u8{ \\pub export fn foo(arg_x: bool) bool { \\ var x = arg_x; - \\ var a: bool = @as(c_int, @boolToInt(x)) != @as(c_int, 1); - \\ var b: bool = @as(c_int, @boolToInt(a)) != @as(c_int, 0); - \\ var c: bool = @ptrToInt(&foo) != 0; - \\ return foo(@as(c_int, @boolToInt(c)) != @as(c_int, @boolToInt(b))); + \\ var a: bool = @as(c_int, @intFromBool(x)) != @as(c_int, 1); + \\ var b: bool = @as(c_int, @intFromBool(a)) != @as(c_int, 0); + \\ var c: bool = @intFromPtr(&foo) != 0; + \\ return foo(@as(c_int, @intFromBool(c)) != @as(c_int, @intFromBool(b))); \\} }); @@ -3910,7 +3910,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { \\pub export fn foo() void { \\ var a: c_int = undefined; \\ if ((blk: { - \\ const tmp = @boolToInt(@as(c_int, 1) > @as(c_int, 0)); + \\ const tmp = @intFromBool(@as(c_int, 1) > @as(c_int, 0)); \\ a = tmp; \\ break :blk tmp; \\ }) != 0) {} @@ -3928,7 +3928,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { \\pub export fn foo() void { \\ var a: S = undefined; \\ var b: S = undefined; - \\ var c: c_longlong = @divExact(@bitCast(c_longlong, @ptrToInt(a) -% @ptrToInt(b)), @sizeOf(u8)); + \\ var c: c_longlong = @divExact(@bitCast(c_longlong, @intFromPtr(a) -% @intFromPtr(b)), @sizeOf(u8)); \\ _ = @TypeOf(c); \\} }); @@ -3943,7 +3943,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { \\pub export fn foo() void { \\ var a: S = undefined; \\ var b: S = undefined; - \\ var c: c_long = @divExact(@bitCast(c_long, @ptrToInt(a) -% @ptrToInt(b)), @sizeOf(u8)); + \\ var c: c_long = @divExact(@bitCast(c_long, @intFromPtr(a) -% @intFromPtr(b)), @sizeOf(u8)); \\ _ = @TypeOf(c); \\} }); diff --git a/tools/gen_outline_atomics.zig b/tools/gen_outline_atomics.zig index 0cfdacffd1..445e17646c 100644 --- a/tools/gen_outline_atomics.zig +++ b/tools/gen_outline_atomics.zig @@ -31,7 +31,7 @@ pub fn main() !void { \\/// It is intentionally not exported in order to make the machine code that \\/// uses it a statically predicted direct branch rather than using the PLT, \\/// which ARM is concerned would have too much overhead. - \\var __aarch64_have_lse_atomics: u8 = @boolToInt(always_has_lse); + \\var __aarch64_have_lse_atomics: u8 = @intFromBool(always_has_lse); \\ \\ ); @@ -144,11 +144,11 @@ const N = enum(u8) { } fn register(n: N) []const u8 { - return if (@enumToInt(n) < 8) "w" else "x"; + return if (@intFromEnum(n) < 8) "w" else "x"; } fn toBytes(n: N) u8 { - return @enumToInt(n); + return @intFromEnum(n); } fn toBits(n: N) u8 { @@ -212,7 +212,7 @@ fn generateCas(arena: Allocator, n: N, order: Ordering) ![]const u8 { const reg = n.register(); - if (@enumToInt(n) < 16) { + if (@intFromEnum(n) < 16) { const cas = try std.fmt.allocPrint(arena, ".inst 0x08a07c41 + {s} + {s}", .{ s_def.b, o_def.m }); const ldxr = try std.fmt.allocPrint(arena, "ld{s}xr{s}", .{ o_def.a, s_def.s }); const stxr = try std.fmt.allocPrint(arena, "st{s}xr{s}", .{ o_def.l, s_def.s }); diff --git a/tools/gen_stubs.zig b/tools/gen_stubs.zig index 5d6b0acbd6..78b0086121 100644 --- a/tools/gen_stubs.zig +++ b/tools/gen_stubs.zig @@ -444,7 +444,7 @@ fn parseElf(parse: Parse, comptime is_64: bool, comptime endian: builtin.Endian) const name = try arena.dupe(u8, mem.sliceTo(dynstr[s(sym.st_name)..], 0)); const ty = @truncate(u4, sym.st_info); const binding = @truncate(u4, sym.st_info >> 4); - const visib = @intToEnum(elf.STV, @truncate(u2, sym.st_other)); + const visib = @enumFromInt(elf.STV, @truncate(u2, sym.st_other)); const size = s(sym.st_size); if (parse.blacklist.contains(name)) continue; diff --git a/tools/process_headers.zig b/tools/process_headers.zig index b93cd07a2c..a7abcb0297 100644 --- a/tools/process_headers.zig +++ b/tools/process_headers.zig @@ -32,7 +32,7 @@ const MultiArch = union(enum) { specific: Arch, fn eql(a: MultiArch, b: MultiArch) bool { - if (@enumToInt(a) != @enumToInt(b)) + if (@intFromEnum(a) != @intFromEnum(b)) return false; if (a != .specific) return true; @@ -45,7 +45,7 @@ const MultiAbi = union(enum) { specific: Abi, fn eql(a: MultiAbi, b: MultiAbi) bool { - if (@enumToInt(a) != @enumToInt(b)) + if (@intFromEnum(a) != @intFromEnum(b)) return false; if (std.meta.Tag(MultiAbi)(a) != .specific) return true; @@ -262,9 +262,9 @@ const DestTarget = struct { const HashContext = struct { pub fn hash(self: @This(), a: DestTarget) u32 { _ = self; - return @enumToInt(a.arch) +% - (@enumToInt(a.os) *% @as(u32, 4202347608)) +% - (@enumToInt(a.abi) *% @as(u32, 4082223418)); + return @intFromEnum(a.arch) +% + (@intFromEnum(a.os) *% @as(u32, 4202347608)) +% + (@intFromEnum(a.abi) *% @as(u32, 4082223418)); } pub fn eql(self: @This(), a: DestTarget, b: DestTarget, b_index: usize) bool { diff --git a/tools/update-linux-headers.zig b/tools/update-linux-headers.zig index 1ed65d5405..e3a3e9294d 100644 --- a/tools/update-linux-headers.zig +++ b/tools/update-linux-headers.zig @@ -37,7 +37,7 @@ const MultiArch = union(enum) { specific: Arch, fn eql(a: MultiArch, b: MultiArch) bool { - if (@enumToInt(a) != @enumToInt(b)) + if (@intFromEnum(a) != @intFromEnum(b)) return false; if (a != .specific) return true; diff --git a/tools/update_clang_options.zig b/tools/update_clang_options.zig index 5d105195ef..4584a87ef7 100644 --- a/tools/update_clang_options.zig +++ b/tools/update_clang_options.zig @@ -591,7 +591,7 @@ pub fn main() anyerror!void { for (all_features, 0..) |feat, i| { const llvm_name = feat.llvm_name orelse continue; - const zig_feat = @intToEnum(Feature, i); + const zig_feat = @enumFromInt(Feature, i); const zig_name = @tagName(zig_feat); try llvm_to_zig_cpu_features.put(llvm_name, zig_name); } diff --git a/tools/update_cpu_features.zig b/tools/update_cpu_features.zig index a4b9607a40..0b14769ead 100644 --- a/tools/update_cpu_features.zig +++ b/tools/update_cpu_features.zig @@ -1247,7 +1247,7 @@ fn processOneTarget(job: Job) anyerror!void { for (all_features.items) |feature| { if (feature.llvm_name) |llvm_name| { try w.print( - \\ result[@enumToInt(Feature.{})] = .{{ + \\ result[@intFromEnum(Feature.{})] = .{{ \\ .llvm_name = "{}", \\ .description = "{}", \\ .dependencies = featureSet(&[_]Feature{{ @@ -1260,7 +1260,7 @@ fn processOneTarget(job: Job) anyerror!void { ); } else { try w.print( - \\ result[@enumToInt(Feature.{})] = .{{ + \\ result[@intFromEnum(Feature.{})] = .{{ \\ .llvm_name = null, \\ .description = "{}", \\ .dependencies = featureSet(&[_]Feature{{ diff --git a/tools/update_spirv_features.zig b/tools/update_spirv_features.zig index 6fd1b26c7f..0c8acf5aef 100644 --- a/tools/update_spirv_features.zig +++ b/tools/update_spirv_features.zig @@ -137,7 +137,7 @@ pub fn main() !void { for (versions, 0..) |ver, i| { try w.print( - \\ result[@enumToInt(Feature.v{0}_{1})] = .{{ + \\ result[@intFromEnum(Feature.v{0}_{1})] = .{{ \\ .llvm_name = null, \\ .description = "SPIR-V version {0}.{1}", \\ @@ -163,7 +163,7 @@ pub fn main() !void { // TODO: Extension dependencies. for (extensions) |ext| { try w.print( - \\ result[@enumToInt(Feature.{s})] = .{{ + \\ result[@intFromEnum(Feature.{s})] = .{{ \\ .llvm_name = null, \\ .description = "SPIR-V extension {s}", \\ .dependencies = featureSet(&[_]Feature{{}}), @@ -178,7 +178,7 @@ pub fn main() !void { // TODO: Capability extension dependencies. for (capabilities) |cap| { try w.print( - \\ result[@enumToInt(Feature.{s})] = .{{ + \\ result[@intFromEnum(Feature.{s})] = .{{ \\ .llvm_name = null, \\ .description = "Enable SPIR-V capability {s}", \\ .dependencies = featureSet(&[_]Feature{{ From a4d1edac8d65e1aa4b565f6fb11ab78541d97efa Mon Sep 17 00:00:00 2001 From: Eric Joldasov Date: Thu, 15 Jun 2023 13:43:59 +0600 Subject: [PATCH 3/3] stage1: update zig1.wasm after renaming "@XtoY" to "YfromX" Note from Andrew: I re-ran update-zig1 on my pc and replaced this commit. Signed-off-by: Eric Joldasov Signed-off-by: Andrew Kelley --- stage1/zig1.wasm | Bin 2489820 -> 2494123 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/stage1/zig1.wasm b/stage1/zig1.wasm index 96feefdddeafcf7fb36b4c32c667fec85cbb2973..e5d9258b4dc74b11cb5538e92f45ef1a88810f96 100644 GIT binary patch delta 792995 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 z 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

&}$&P@m7M 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 omX(|%1%87M4}CRV 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 bl#yvy9wXE4?H3-ZZj)x}oH@PYuWASY`y2{` delta 787952 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Ⓢ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

-L}`L`n=Wr&#NWmMn< zg>|6?w^H^AbU7YS7{grv?x}z(YtRBT&|KbpP%1&P5_AJJ*hDbNH@I<(OOYAb*e z;SA7%g&F)=j;p5sv)~3@R3c%?UBs9$z1xyolJUp%rIy?}(5=;=h=80F_`s4|Z+e*x zH{Wy_D{g7d?&%=YXNY7?|2KzMQa2dX#sc@FK%;}8fMf-CbK#xC8K5zkAkg9n@Y+e) z>5HwnMe6@|HV8Q0V-Uy%4~g&wfJO~K;Q%#TAP*+as=>4Z+ye&Pe4@z4697teh?oOa za_o>r2P^J12{`IP7ahC+bu_`YJ^-IM4vA-w*TEwx)6J~8HIhJGSx}n|bYlu=DiPGG z2OaH$xPfOcBg8^b0)?k-0V{?EP(boqF@RUtu|p1~1{H1##6d{~9#LY`4_I>>g(ZNb zzA%E4x(3q+MnzD<0QI@RD<(m6RXe~3rZm7e2ZB53KSaUj)PUB!f!e5`aSKrA1vJzE zj~KP-c{bb}R-nuTX*YxBvOrxD&~^sU2nFcg7*IG@AqOyM@nSV3My7AD;da*q7u=vo zL^6mIyxNf!Trq)KaudX}9Oq6~u;mu5ha>@zDbQ&026=D>_z)gY`&^NY#~VB$xxQ* zVu7wD0)+)^unSzafbKB^ZIB10Bv3kG5%>yki}QhWgVHGET$}0V?6}oH)#W!kZh0ehI)uarDrF~#Pd{YO?H&l)76Xbw&|oKcEC93`1QMQeKqKOydodx)P(j@!K_&1p zb*!L3{UD~qWyaJY4&C7b*=*S%Ha*ILTZ-v}*z__7ZYN35J{op`AE40&$Y{<4CQuT+ zAvXP@1GlgwXaopFx&tiTAwK=D1GlsWl5SqmB{@jS!F`>m9kJ zq&|pc3H;%N9;wOe4jSeGADnYTZ2DtI?sC$`yg=~j)J7c5z?RmEpf&D;H>aNOz{9>KnroS z4YV1FINct+_~?N+EE2vzDjh%ys zoWYA#!9zz#yT7Kna*IJOgyR5B#jJ)6o6iuRKEan;475hs*_HdSEhLQ}0gZ53fno`E z_Rj$!$n{U)H2y;XbVPXr=opg@NC_+mx zyfY6pw6Q`kOQ3-Zl!_jROkeN8EwA+fw8;O1D9C5fQ&m9fK$9gP8lk>JZ2AumZbQb2 z)3rRg-Ic*b1}KZNAlU*fD;y!ZrW-i(h}7HiScBpYG#VhGzz!X>X#n}b+K~ZL=lv0b zw37Zf&+&B5b=Xi#} zO&UC515vHN0Hz#Nen93uSsgzJfcy(N%&iCH7Fz}I*3J&`>4r0Sq>aF%i_p7bzy%~| zx&Stv$P1k_xWNZH&;wlY3Ot>@*o#|@aq9F_Ufe15kl{k46^fv}qo6e~kkzY9j%z@x zgg^^rMZu@4fLa(x7iWM}f{Gq+9(w>GtyFe2c%+;U< z9^{Z`Q1!+Hn!joW?L~vu-%uZ$g0gs^FSi!s?ddhX+!30P!s89-MqpzFR`C7=Q2h-G zVo>tIr60E$MJIX)>4j*WvEQF1CG?fBs%z<~Dc8F&=@`Elu05yZevIOR`OfU22 zE^`AbVh2~(;BBam=T|m?uC|A^u8qK3`9THpJm^kVBT!=j)O9jr0?l|h-r&n}d^p`G zfLo98#`MGhZV@HWS^`HUXhsl+%(sJE5TN!dWO#jg0Jj>`RJQ2_CcGkC-Hbd&pkiQ# z*z}L_eBzRzmLw>q=D_yUf|4I-;Ac8-Ah&A$67Y0T3uyS=1QezX!r;yvD8g94(E?2w z;7Sp+I~kP3K&cqit%2^b1WgNrq(GUG$?-1e2ux5nQxv-Q8GPp~SY9kkfyq%5QUE*v zO9!&*Gd=;;wTbh+B=ZVY+4zcNNEiy)B^8(go932XX5%o}PX)h}(|w%XEogZY_>`@0tW0)djvz z_X_6LVEV&2y(E}hx&8*jAJ7e|>Oi*P7_v?yc=`~WXf0Lg()P}u;QkmWUFS^<*X0XpX&w0ul~ z-4S%}0H;772WSkQY5H+)Uf$^q>ls~GK^t3lOwS47o?icj(TwQ;NFV65LUzXkOrRr| zpR*~jJH7xLbb$%7iwe~51oa+nfb3$|WIh49)Cr{T15=g)j{>`+M3&>*)<)16!y87B zH@+}|hiADI!1Lyc+zRaAYXI0CAAro&VEVu$aFJV~o*i_mzXH4C4Uokkcl}@zXk-T& z&;c3WMK%C*I6ph+ZdmX(FPM`ifR-geoiu}4fnAfiff>}eVs~7@40qf0#zs(dLEN?m zZgf2;jKPir9pumMI0Lj0PJ?L$Gsto5j-bQ**&RU_41mvx*uV^R+X1)%F#RBFcQBhX zp8!p^P0#_^3oVt|9XIHLxa=BCQ*=P*;jlYi09_gY^6Z9sT}Q@31$IZ!f%=>RzuA@x zyaIdv3Kk1Am@Y7zG2H-J06Joy0~Bh^;7JZHknInc&6yZ@6hLdPcobL!KoR=_q!x5+ zKD#66WPMHnaKugk-FfZ!gBcXD^`IeTc5v&n0d&|1yC(AoW^?8a76o?487yFDgJSk0 z^hzpl%+6s!j#-d}jtjs>c7R9?rWq`dz*_<0I)aYX2M68)7HHsYK+<2&0(LQYO&vSb zO%NxsYcj83F=yTZauq1y9RM+)&N~5e9_X}lXu^B;qeZ}xRR9vXcaV&SnhrYuoE?1f zI=cqb4XE=#XP~qDJAzMY2gSt$nEO6p7@)!Qf<+Nz=ML~e>c82*$qO`n@`FVImMK9A zoMpOC1h;H`3#$SsOzoH&SQXeEJ3!}kE3i9)&MN=U2};^Mtmq*KazF>G8Pf!ih8e7& z#W(DZ6IcHsS|{!mi?5fs}&MmmDd zBxiR7o29{YfE5yd7g)0t*g=P&D}dwg1S>TDZeZvKCBF--=FAU3);?eb`B&ig^qfd; z{rVSRzpxwx?fks4X9jpS2y}}zILW>MdrA)3Qy)M^`~chh0c;L9$K(}_YYcl^}HD{gxDzX-^!F{~wZ!;*r*F)085;o)j2U+L{I@+AwaRSI-4W;8ve%5pd*&=A|i+({-U`FgV<1K+Fb_8cY+|A>pXGuv+wh+rX{>b`dBpcYs+7*cF$6+y*)m9h%RtTyGF?<&)H7hsNifN22eh;epsz`??eU6c6+yAtSz zpcfz)f*2n_3{d*}0b)SYUjwK(p1=VQ#{QQr0*<@_?vOa10=Xd*B^)`xNg70IFiqfq zh9ijU2s+{%?9>??uyC9{Cx%<19y!q1HJKN1m@{tx-Odei%nlF(>X-u{$6P=-2Bmzw zg6WnUU~3P6NYMG=5Vt%4alyAJf!%V0L!cf~F~7hxpn((Y8MOTQ0m(@}I6&#`0r=)6 zcE=7*ctCaBY66XEK*Fhq6CI6<`KrO&DUslUK!&isHA)WYI~l=Cmxv%mwL0!O()wZjVxKj<>N0&jcef>$;I zH~By<4{(nB0JaZwP(P;v2k3@Kc74VM$c@GD1jkel^5O?hrDaU@0pO#17BDRbO#yar zIogA(whpc=(Ed`;l_MAu3d@+PmMgJ=Ht^fK@iIs$uscrRg1EhdD@$M@8_3yHP^<)1 zE1+U(0vCAQIVeHS;K~v>$E*|%?Vo^C)eJ60ZUr{517>h#aVvsKC~h;R1)v+YAgw6S z86ST@7XqNSqBNN|=q^{}b*xtel@1R$r%NSp>w~UG0@VZ)rUxc)i^+Bvf)3;cZ#RQ9 z!`K}=457U?=IIAlbBj%%P{b{%GC>EF8XPC+WSKEdFadebB+Kyt%fV8%29WF{!7VKw~J%tir_4Y^X_ zP|^YUT!U$bjw0w_00EHk2XwQ*BV!B-;E_0X#~r%h>W_&*fdv$q8>U}e!!0^pZUMId z=o%VsZqPYpphN)*ddC%9ATu6-5}`mVp8~t%87|QN9464x_$yq{Q|{TF7|fZDfWn%= zis2rJZfIaJW4r}o{r}Hw&3FTJkvXU(#%0dD1H=YhYHr4K0Hojn7dU}C9^lH#5ctgj zN&-)~lz6}$6&{#7K%RTRWybUZqyuyzI8tkA2iS=(xUvLVxj?%AVCdFh`oN{g1L`^~ z09hvRX!@KaZUuH2=Wr6Yx?}@4$Qf(`6WA13pb1nO)Mc77ojIA?2;9GE040zP9#DWZ z@MI}K8cL2UzycF^z=6sP>rBkx0i^^@<_;cn<^>>q8+hPF6-q033lDN>APaKj4zP&} zK%@rK1|CpJCC%=50K|8k0kRkr8asHPMb(Mv{mI-C^~erj*JM7xW6pd518nUB5UIiR0qhud#|BtAvzEj_&^;98RWM14Ukcw18CVngG11K0qQ_7KLE*q#%)1~P9n<@C9(ZM@e{~I z#|D0|>-n-kzWc!kj!$pL4zTD0NT6siHSj|tbOJwepnwbjg?I2HBl~X$NbLczX*>Ag`ThY| z-~>NvzQ4c^3E~6%=FB%h`d;wElk=KK;ASVZFYyM&^&kr!KY)$A0U|Y+Uhspx@Aw16 z1y68-Yq}3G-!}*#`yQ-+2DrdScT$G{!buYZz210a{Nm@%CY z01aJ$Oc8iA{ayyQ6nWLJGS(W>7<@$`DYb7l(Y5c?%`F0s#-JV2>>5lHs9E`f;}djN z4XA;4036I01hNDUf?IZXumrCL(+vSLrU#&qd?5fy)(->_$@+x=C|OH^k~OIK{Qy$; z18gj4`h!!Tm9HLDo;3)9E}#SVn|=tGGfxl%jo%1@jDwdg69hq7;1(a~GDdcN#yNt> z$q-}#XvPOLIL!bq?U)yU%vb<2!x2)6%n(#!6ZnHzyy?iG$j#)yJUtxWqXDl6fEqPu9DS zfrnQi$@&S3TR{be;|s7MV52mc9tc8`HE525-SGs-WKco$LJ*X!>)G`ge_$8@O4lC* z&6yj7KqE9lAQv?VfdXh3IHr1pkV6M-;{=d2$k+}cB^J=^3cEhz6d@&EaD#^z)ZhUt zn*lZp6mBd6^Eni_9W5BMKm&}r3`>MSw?l%Kv6(Tg5dxj;YsR!f2y~Yk1N0ns$R1bF zHS+9^4@{;rW^#+l+%Q3E!h)K_?2e#@CmZa{64B{db9lL?%jR)P+Tm%&G{YFA%Q(wXP@oDl1_bs~ zgK?I?KhW?mX#b+IBO}OHjysIA92o^b*M75WGBN*{o_L*Gq#oRa1~s(V9VZ|+k|!7{ zaq}{Og1*BLQjmeBzjeWbW#-HTobvWmhk&CXYz|u##aUaReF{;qXS9ES+VML;egHYI z;WYAY4pC4PHt0gy+dp)sXXJ6q*Dnyv5&(^CJ8pnQG6P5%i@u)BwsWAlVH< zW=uOk$>)F&D5J4E?hr!c+XF(Nd@IQfif-s=>I-8?z6BHuyt_LH?k)4P+tc779@B5@eGG(+?p?-slhp zrHuz5i$RWW5C-K9c74VP!b&Xl;4};#s0SOc0jw6;NuWlkusQP#VQ5?}05PD>TOq8# z?zlr3?z|5tz!OuDth+}TIU|8hKL9p;1&GvO+951(ky{2-jez)$3xuIn(gB$JE=+%r z&n;Px6g;4zeqp60OyBH%PH0vQMdZNGxHt9JZt zL=0SS!897QtBW19e@YePxD6tZs5}6+5VYwR+_KmKbK8mOGKJg{^~f#(^(aKlnJ<7G z19H_35CiI}2OJUW_C{5-D@S+z`%{W6iOQ3~aQ5@8M7XcN!xA+2Fr*E9cElkZOgc1##5ZnGV z3OFiJrwPG$clxSgZbhaW!qd+dbIXtw1YFb4&EV#c$J&%KhZfMxkUA*~$P;Q-JRP}m(G=wu1p0e2zZ=qR!A3MxSEOJUbwdZ7c^ z2*(4Oz=ocGVg(v~VuGH3G6iHEX#Jp$0=wfJoh;ZHDC~|ObU;f+*g>O3pu+*!^%=kD zOlK_PmaqSyqr?l^CeH5IpbP3(f<_fUEh=!$CJsIbU=FCZ<1=HL0HQg~n0i1ouNhN^ zt^zw~&($Ije?HT4C1KDa7%PT_An~RK4l{U{T-|=$O8?j9Vsjg|3o-z)@yJQ2UC*is1psd|orAEg)LJj0w~ZaQp!>2(*$! z3Dlpw0Uq7jpqnM|5j@}b2WF;#0Qh7SkkNAGpd$cul_b}iGjS+LnlXWfdO-`98uUP= zrye3sKoehjpoKc{mS>M1)Qt%9m=$;N0F0b~TEYQ6y$IG~rMB#biQd;;Voc1`9Tdgja*Ksq1jfljw%cf6sK<%rsF z#dHC)0?+ir)!af3FTkc>0FfF@5A+~K`v(x$@dU^Xpc4Ou9<`F>X|b)=tHaN4iE$C(h2&YzO_EWrTx2+n%GP9F(L(Qfx`-YPys&yL~1ZC(1$p4 z1BmO`p$|@f8cZwnq0Zca!<2{%D9!}cLokrpj==83d#-;slhbE01}idKwQTL187h#Fn|W-1{|hDoIr6V z$Z0!}oOZwf6qG9rAkFIwNNz-#JiCI!bcY*Y=Ntf$8cY|UZhQdZI_`kE@dnI|FR+^; z;tX=b0|TYSOyg-XfVVYWFlI+3{8fhWyi2#V}YA| z&}G4{yrK#$3Wy>Elv{DF=tXy;094L3f$AcJW(Gz%a?lg+75Lh89={s<}l~7Z`$b z2B@qSfDFJa!I5>nG?*3`g099@Pymf2IIaLs=Wz=>=VEdI4TP;R1m!smrWJ-tG77Su zyiDMhq7obU_;T3z3MdtKK(l-Ua+U{;RpCW+@0Nun9ErfHKJua3%pQ9X$h0)+cZ#Yoe;g_-1ak>1W%xIcyM> z7AT>DoCsRk3{GjFni6!Q2fO15a6&x*PN<*+3d*{m8Fp~0#9dXwQsoCks+<8!l}PsT zLt;(=G+P7;B9OiRn~?9U1P!7i+yG0J0-%7K!2wNk6Q-|e=T?os0SX`)Go}lM3ha&# z!0!G5E~Y?}>beXsK&=zUdPQN-etYon`vXIB<_{pnKMcW5I>!r!Spv7g!-#*dmuaF# z4Mw0=5u^_b8k2!oV+flC>@mXLI19m0= zy8<`(bbuMg3g8tU##x{h9&F%^ol2n14dRY37(hlLx6}}wz3D}r+!C&^P9;Jde8`~V z3kF3t9`InRq#4r&hz%QzvlN6C*aV()D}pY?L~5a&@8q^+?48cr#VuQZ0_;lgT0_t# zcXr1EU;zwg?=V*2b`${(&$Br)W`o*Npz&-47J=8y3iFw26z79ZR|XB?f(9EefX0(= z7=tRR3&x-hZ7b;fAa-4b2gaZ{041Iq#-JrNFLXd|g~#R#<1B^wOagac4ObQi)QGs+ z#VsH30c4^hBlxO2$O_;u#u$-~7C<}_+@S8T2Ga*)GbRPlAqy;4462~w@rUtrmu_wq z$U&x{?s`Etw;1;yV^B+)U6c8T@$`w^+~Tr00v=TN{4kz=w42*;=(Ugkwjj^!QMJiu zh}1q7L2bpL$BYO!C^_tzzOa{D*YXCaAP|6TOBZ$nr4`2sNEu$>7kI{L3YJVR*v~C$ z2%4cZ0uRi9N)q_SIu-{|dmc38AaIxoHAM;bbBm`VIaU}&8k<`kk=@7)apMeRH~t2@ zaSk3g&LG{5k~rNs-LaorS$zT61?->_)R7r}xm>X;cI9LR5Cx?3YU>$Y?1dsw>5N`qj4aR{3^#LMKpMZS# z0yR({7-b3k0|)9GBhYo+sO22GD?p}dFulMTj6cA^DC+(JWK)ANBpg3r4M&0h+|Z6I z?ogcmdm^`FIFUIBi(5GqxRFCl042nxXHVjm7Xj@r5YX+6pyL zGE@UqA1l;AGajI+Z^sK@fgNgyhCir@eLxK|*0e#*ocRPu-wieREX~w^O`z)oAhTgpQ$4%m3lQJ&0LWrc$@D-CI?D6`(|`%;AU7gAiCvTV zg_=3@50I-s&TCLdIIlw;)NxUVI}c@)X^uMBdG*j`s9^Uk02|){A~l$1sDs?c?zjTP zb!viFkJwnn7)20w|G6WQ`j|`A842}e*n1#Yf=5b4qH8UrPeSMP_ zxKl}+^-VkWw17?rqRQf8vAfKQh{eUipj%wo9e=1zx1YgnLRNU-o2fLQ-Av`y|4jmp z2C%_E%GZ1$W-7tu+78Vua35%gI?BlQ4oz?~o=X9|V-uuOmtmJCsG)+fm|vLN(O!`s z)E9O<04iPtezSols2uz;mcUas(24!i17~qdIUfM0;}4*8ECB0_oX`X{ zFg2JCXhJ5}!LEY0dp2l-Y99DZ+!f8~>t=B)kQIwKQZ;0Bmo};TI%vWQKAcNg3~HjM zYIesPps<3jb-SPmI^=*|pYeg_^u#&bVqAALLES?QrW=~m8|QF~)xQ9TJvclSc%k!+ zA2gA7?t%uYKs#eKnO|sv;!yy!0PY8<{A$nw6-qzAaRF`xEC361Xk{r0piDGQ(1O$y z4O-^RGqgY}p0uDPUwxJ%O6|2qOGy^Ih({JQbq=!HaRb=U86Z-FX@wS~=-UC}I!@4n zRuUVupq0b{O#L^svJ_CAa{}RMjFHfSXfSYJPfBV!>i=$3QXV3xpL@Mb3oNQVo)R+1ZZAqZr#Bx&1yu-C_i zGz|7OP_P?Pr|x0AJ6(Daw=;Pu4*O20^R(RQbZ2&>fa7@v>UbWsL|h?X>Cx&fjE9nUbh zSuwl=vH2bC3#}O5fVBMprAN>jDeWwQdyo;_dTsP3Ca630L)(n00klr21H2fC-LXLj zu@baH2ec9t)ZJBp?aMy_nrXNo11fS($bf2Oa4qlwEO0{xwYTs<22#9TkTGX|Ap_d9 z@22Gb5%i1SW> zxQ+{Cp{4EtnDZ`x^w)z9#sDu=1^e#@+2rXOJENwYh4fJGm`+}9un3%=U@uYF5sid4?P; ztUwH?V^+w4!b%PvRwzqB_sC&H#R0IjD?p?M(+)XkSb?~X3*=y7B`2T{>B(HcFaR7f za^}o8K=$4M=@6jFnoC6*7Na*oYc3V3Q<6lWGysJl-I^J);AN?xqaHvj4?)odT6qWx zvKL4@wP5QEp*Ik*J3f$uuQQaJ{(A+t6x$0qC2oNq)1_B(OBsCunZstr^Z{hfA33C@ zge&C1G3WR}E(^MpaE&~uzcBs6PHwU3wJW)K>Q~4s2|(5q?vV$rDFp4{1Z~^gBCo*i zsBXrz0Yo!cFvrp%$UxAXl^s66Chf^jOhqS?G32i8|1SD z9)j0M-jP@0XK_&AR1gs8U{>G-ugIIuv5H$-=!U$Kpuk}^MRBHjM^I>LXFFcVS)n4ek+D2Aj<^Jm>z&ETc7|-=%8sddDzmzB?{nl&Z!_M@Q4#)@$`*r zxy7d+SjElnxIjUPWi4oZAq#kYq2me#P!|hiKX|j;3}_;TZfIG9!z>R_Nuj~CLO~If z{WpNM-T>uZPzwdTd1i+Ki-UqVs4U!|0NOkVs!9%k9SpvzfL)j2gMuTEJC^0iGWa$a zPv5he+e8uTf?N%7CgBI=Nyw61Jo}36)^KZN6TP$P;m#J&wX7IDe;&x~qU?@DZ7Wu1 zygU8p8g5xfcsfwvRNxkPz{vxe*>G%7%u?V0_mmtjD1eq53AFQocJOv6;)u??wcKpB z4T?%~j^KS2Es9F~f4CVO!S@`oJ5GQZCkyR#&A@Jss__&>MHx^$O;7}H6?cRz5nZAP z+O+~%BDz2k+~yQ_WXV!e1ub}-&bf|TRegmbs3-@g7zJTycWr~Bk|a2}BPG6`4cyYx z3)XS7)vr*5ciMI+f|e+NP1vCbudW|}1x_etDM_Mq+Ae@x16p^lXwG~Cr1OO$EbTj@ zEDn96sHB8uKP=ZNa85tIo?FP_1K5rmAX02~<$Z?+%qLfyv-Gy>G}pzh z!8AifiA6yiWwr}c+el=A<~~tskAvH|#kr(Gn+QOsz22S9yO~=i6r&UatttR5t3njc zN<3yvpdDkNpaQKW0c~7!6a(*m+n@r9=pEqQZy+y&M(9ARRX|(arpvc*v(@W>6o8hC zLJoQb9S5PS#Lo-f>4v}L1}%~STMOE009vdv!6eIZW^)75m5%J7c_X+JV2f4QK`}o= z2eNpBX~J~LE!^tvOH`DUKuZXeKxqsT-3LH%AZf<50~7%#z{WHvgYqP7jqD8-tch02 z4V>XlsMs-qLizwGf>GzNA0Wl1z$9=yKEV->)BkPZ=FoiribQtD9V$r2!-8`J=-I_oGzQBK zO0{1=K{TJqj_Cs^jDCPkfj2TfsALID0ekL`iV_QGrWnOyaAU=E8@Cwaj_E$zxK#pw zsDO8+G^l1NfhL0uvJ@0Rhr0&|{9sbx6gbZeI)oT>6AdUB9GL`==YK)rj6Fpws1YA% zQtY6CWze-lA9ixf1Y;z9G0=JzPBW%Cs^Ie9j%fzCnp8!}nln_h1g3(0y+jpz)||d> zJ2#uw0#&eYR}l8?^n2U6#rO|1p~f31x9W?5GC9ce#CuYFdcqEFPR6^_vvzRHq+|F| z6g2(}DOnGwf+{mmAp|~pPlM@#suG)mtS>JkC zI4Jx;=9w{ds5vqy@`KE2m@c)GTh4h3Xogf6yy{?r8hAFKLoG{zA9P-e;{>%VfnFXZ zNyq>HnF~R8_JVwjCAzD3avLcjPwV4QcW@gwYE;`|1Oq6l9cMuO#-;N~(13&|O`ix7|K=}rIdfNgu(7=W$sON-eK_OZ& z;P#>dl1dR&l^|0kr_1l==1?T6O)5G)b~m>Wn#M z`?#g_wt!6LHe=cVGI@_QQb+p*C^A45sWhyk{YHAa?0Ie}A3<)=?HnxN9c3@1mAD~& zZEh=u1)za9ZZoDYAVWc?z<>W%riijO@QIa?d&F+ZiqgYUNlyYB$ZeHSnd0G-5+8g`&1`C{hGH$bie^^hKb7*OZE z067nILOV3{jyHf$AcQOw`h#M61lact;^5K_c3y)xEcnC` z!3Xi5CUXb)+7)*2eWaYU8BJ6G50rqabI{JJ=|mjCM*L98Z_sF>0(C|cO;AcYQ1B{1 z57=8EuE4IqZN@YMwAX!sI4G||mV&Zi8&HzPH=x9fII#}<6c#O)lw1LA^wy$IXra#H zfI3Q$OG5XY<+?(PJg=?WU55Qo(ZThNmwyk6KK4yqTJl-NK<2ZM4h z!bI>v1~bG!aRFZov1j_*quk12JH(av&6rMroKSDZbOhui7Bi*;Ae!5Z=?qAm5qvEw zyCb6`6R5KVnmdxVVz>yBx*-lL9Y7;S;#mS0z|%$_KxWJNusJH4F|mMJ|C-D1rnez11nu10rE7svN!=2*dT$v=wOEgWWs5MggNs8kWSD&1JE)BW&G-j z#B|=1+;RqvH^3$x0Fj_8z#s+P0}$772gp899dSbfT9CYe=<;&xkc3R-L(cOBE&7r$ zXZ`@P98|LX05L!(4@#IbH%NjOeM!QC)^T1Z(s9pIB&Yv726Dv=Nl^GTfJhCd36c<3 zEC6vGf52QZLlWwW6<}TR%AiwJCBdh$Zva`c1FZZ5NI7&&XAfARoRS994oOAOzL5ix zpoGcpxB;wmhIkhA)XoFbc}{XGCLWRm)$Ht!Pb6U@B93*&@Bn0| zvKi9_NzgGdW=v;5w164Y2}#Hp4L7)v1KYI*iUR_t0`Vwt3!I<6|0K6Ag=YbAn=v(j zR{Me`4L}QUPZ(u6vV%uMPJsR0V3eiAD*!$X2&5FWHKM^d%TWrfFDO^Xe*cf%2+=OQzP9?*~wXe)~2Es!42rZ^E$w-IEl22+DBsMD&!^h0O* z?bF<40*$7@ z{SO&U`vG<>{46Q(u$v61Ym)09GaI#tXVKl@~N3 zyhaLoycnk$(-A31`;}=A$R=eorX3*qgcPXgf)8!&kjfJ10*?ornJ#mlTT$+W6m(C6 z5-+ZTryjH+6?~xqhkKfgBlt(9HwUopFg9G$lCU61O^H zQ`!DY+)_$}j~kf&{xY{p7}9PNR{VRXSmC}R!)#{!W;2s&Hu9MWpi9z_51i1w!flEa zc6d)|-jKk{K7IZbZcfyuFAHeYX$3bZTe3N_LdUFEa3e2I1S!#FSj7!W7vSOQEuaBN z&>#m$?+&nDc$VJ4oh7ggyai_uH*$ZC6})F@2e%^l)Y}8xS>XL-23ZP_<}$Q}ff%3$ zB|28n;4~+=YC;*M=ThJVtubYVjM}o{n3RDocxHtpH5P%p%pgrH+@N!yVdpn*xQcX` z^YyFTN(vh|!0RtS6)|Yd7RaYOW=wZLG`AVk4esfZ*SHyW4BA%CgLJ^S7`Q;>hZl(8!xJf;Q34l#Fe_W2+r~jQgAc4ivc09H6={|U zJRCj)Tr_GhO<>Vc4zmQu(g9W_^!!&UuG&|#Q?f{6Lg&}_(nF+*^8jN`%X_^f0J8=@$B?7H@PJkA5DLHliNuF zbkiBDBk1ZYkbdaAswik8_Xp@KvGdb6e&kWm)d5}i1-@`{0pbc+@crzpjx)qy19sp` zVJC=9Kfi%XV)~j}+=`4Brk}gT-OJcCJ?1vIv@EQt2)d1(RfFk(kQvhjA<#8!LRpTx zrcb%etvP)~H=o(`&$q!NFf;M@~Q3B;aTYY9g?LueAl=o;O2G zk!|{dZa%x|8xnX081GJRy3egbW0zZiLW>laH@7tkI9d>LIsZd$4Uo&(6j(v$NP=!$ zBs$FDXUr<7>k%2xf**N=r=NYu?Lr{fm!E1TBG{)t;x_UC4G1%WuG2$%z;L9B? z9&^i>g2qW9_eD1dXDNsXba8?Tr516B!JrdVLAQ76GBk+0@@j!D($i%AAvV49F}J$H z1<@=;9v*Gb<#DW<%s=?RqX(c1IKfj+9b(fjJmyvocz~j62Iy3AF;MI}g2tzz*KLBT zbjYojFacih-HD)aUyzSi!0-9|AU56pF}Eo94xub14h2R95rMPQlb>+g@OOxVZjy8a zjoPw0eh{6$?g_WOQiCLUzsmegRnAgaVA zU<DW_w=jV&Mbu#0z@!Me zT5$yv=swNX>2F_fD>43m)wSo-P3Dca;q?Q zPha?wyGLx&{|=-pAr(P=6VQe0wXe9Pr^mhG<`i23QlJ6r_bMuIf#$xtr`NvXR$)9p zebFm!ZSZ}z@N3Ya*Peqe#|GU}47!9GbS*mQHb>BWiWw6q3c*ncif9%yrXPGDIcSuE zsuW0+g0dSpN(DN=w~|f)UDqlPQaSBDD z>ngB1z7PVP2?bw)!YdEGzxjm_(gGcbD5xFB2D%;y8l9q9jwcpR6A)O&IbHD`w?ESh z$koh-55yH%99cl_2Ipze-Q}P*9S8J|QPBD95EDT8jYXh?Yx+WaKH(@1aFLOv!06a; z1bnph0&qD$MNEkWbk{66orsw+Z4iX!;0NMx`;{OofkboC+IkO4uL70 z(;HUt%F53Jw+t`9T8rTM`bA(db}I&`+v^Fq9n{Q2bvr1c^%-G~1Ql|Mpt2d%FvaV@ z6O0NR0-(!LL6<&*#y}K0mMgJL?_b5sS3ei*DpZ#)1dD-P3MtpYbsN|{i0~rWF`&jR zC?`0cWVB)cwY)*W$E^TzJ?QG!UP#bQU-N;R3vwAZIMfz^-NJ9hFhgwm=?~m$^%J1Y zW>6GDYHDZ#5ID^Yanm2zy~!V-_Y1RvCTo@01Ym{p2VpZNP^%AYH^^Jy!Wk)EFGzsy zKZdqF1wh3!Xin!1s8*{7l`Nq4=x+{C1rD0#1SJJfiunObF`yg)Dn&rI8bj`1ej^S_ zRG?Z@m*EBIh$3*C8&ocU$}UhKfN#6=boFQVyv|+mCM{XGjSa5;rQ4UCOF<3FYm6*=*nOjjC zRAM_47bMdIK68tr`EY_5*oT#$xuuzYh)!4d#I4Ld3+z8|qMd%^Gq(}r?djh?bK5cA zo^JL9OqG7&PVj@I4p0z+GpFNaX2!1^D=>h zMTrBs3{wQPWM_zh?~0ZIr9OBE1yrVh`ydM7dJ@#{lGWmHo6kR!0Ui zrWfK0tl-ujRx`JPT1?u|hWP_=ke4)=UWhBQDR6-L(yWe%lAQy+Waj|cbU^|%L&O0( zn^Q%B!)f}wOFY8U4>WMGu-|1?1WmqA-v463&cUI>%h0DD}V)_fCZQ!zM0SXZn0i>5%&kKq-2~dZTqzZlk zD4M_>S0xTJCUC2h1JYyxwE@ACRiM7=29Yd*HbzL%3QriIi!WHg1@r=@>6~+Ud8WVm z!7U&U4lPGeiv+UNmsOu}hL{p3FAvD46U3%{U4W$;i$#H`gFCS(`g*!t5L{oxiN&(pkkJgrEArzPw8 zi7KYxUVk*PS-=sz(2rcNgNrE^NHN9YG`;>2x6t(FzueN)4+vRW2E>k|%>s_Hi1Hdd z1OzUxiA@980^;*OZV$B=;?O(gz@uc~{3QXNM>47+C@<)MRgNfk}H>d~0zSijiL!HwThKA)z?4WvR`q%&5t&Gi6t9jy? zu1HM1!=udDJdKfOkv6!B;sT9_a4WEY>Z}H4&^RbbIz`opBi@AzQW3;{(E1s2eK?HWuBuDomt{Ei&i zitGx!0?pI)nRp8Lr+}I>pp6V-;P(9Vbxb_{jJK!TG4oi~gIbuNjv~0p2`c0v4JJ?! za5&EX+ypwVW-YiW@IYLN1vE0ksKJy0p2J`Pb;loxJ2DnpF=%otNP%WNrFbTS>mk&- zX);I*RA_^IiBeNXFoOdhTK&WGz@C*20*)$_ME!Jd_RnMCVPkCGUdqB##7JuD-w5i+ zu7A$WrNzsFrz|kU$O83P3qVjw44TkTU~$xOWO8Is;L>2?5M*HBVI!@0=mG@|_{aj( z;sJU;DXZfH1)@5rpbJXbr(3Y|h%)||?#Irfu~aLG2WeS&dFoWczb$2CyyNC?dg4-JTi=jr>}Uc|@lF;^UDN1N#?z zoYi}fe<9g`WBP|2UXkgx{5-;HH$Y2@1%7ZkG8XcJ`g@=Z&jDI03F;(pD1ckCS0tvF z@$*=NrY1l`2cV0tSRJuU2W`Nd4g&XUA=lp(@G3}v2iCwdYa0+V8;&o;rwe5Bhzo)W z0nlI{r~m*>B8W}*72wgR|HlMsaBDE#;4@>|0ZOMk1hO1u1*#NW71-b-eIUsb0-yt` z6~JS|po{K6arZ+Ee#1i;FDSu-OB+z72kPTOLJr6!E|p!gy>eNIf|7McD^kVizJLkwv|(3O`( z0bcfj0*8kc6!#L-&4hUPSwTuCPWKYxkz$(4Hod@vSA?sF5wuAZG|f5vLM5+w2x!y; zl$7U)LGv#p{epU>i2TdM!6ug-Z!qf-r;ILLkiwtl(K2h{>AF4@9AZc8YAEM6KAv2r8)=6<9LB!=&5_J)mI> zh$*hT55ZG9@OBC~-#kSX0}m2CLBtJWd;nT@AZiP6*#Q~(oz5%51DczZ69JbW0U|si zM2;E5bgmZRF@%imfn9Y6;i~B$MRaQYl4V(I&J0Sjj-WXz zP{sw7lh47EG+&?z9hB%kh=GRGUkEF(I?7uy8~|kv1}la+pu(2Lj0xN=l8WBo>Y<=HY!1hc#nS{7SOngH zwY`A4!%-HzP8&RC|3J))X%A@d&B}~v2Z&~{V%PvGNkMnbgZMkZSFb`Uk*Cuiit)(Q zUs~8K;K(Nc8Hzq5pu`5s>KaTZKqsZMI)c(H2lxsb1ujq{0b=(IsFNK9Av2Pou$UkY zYK1GXI)Ww_Kz4!ZJCIMovyxyZ-+`NcLqL%WlxF#}_!OYVgWDi)rgw?+n3{oR_CQ(Z z4yXoZF=GO^s<|Pf>!8w&FUyPxH0$R$19WdI$RG*O%;#5e9yM5YoNg$=BW;T)!_R|b z9nvCa5rB`8a)9yIm0;E|06dxyb_;W5ZN3|0&ep_2t5?}2va z!n_Ca5@;zYsPh2o&A3}JJOC+Wb7Uz4cMBeY3;+!)f{Jobi{$C_LP;Je5zufADC2(+ z%o3Q&1}cOnh)tg_$s?)xf2x4vfd@?jjy3{6*%Udr6;6RNEo^nkF>s)OGwt+;l01$= zpel^X(M;emCuj^ppYe*sbQ39_K*rP4+oX7OK}~*86$>8Pg_Pi+@i;6alPn6%0_Uec zl;SZ^0o6>PaV^l854=Mn2VN4y0qe1cgI9u5U%DM-q8l;=^91XrSvEC?R+1}ATQ#wFs@tK@lP*+DtY@qzgC zdGb8ACg5zu3^fa)hXp>futZ#m8MKH(f!Uhz2&9=09$(~F;E`~E6bsNcoDz!yvjU4i zJGkn6f~pPNWIw2-kU?u! zN2o5)j10I3#v<@&`b7mEMXd`Gps5D%ETa-+9U{0j333yY;}-@6X6Pi^1M%rHiag4~ z5Q*O~34O*V;?si^c>+B_5{wGW8cYaZBRhW&#MhvS8E{CkKtpN=rgz>b^0+ddo^GVX zlOqqBz&Lj+uma5AxjS3)fipI)HMBLN+}1{IU=as)hh%>c^ZkilzF7U)1ZXf7W# z6aGUq%W=c>o60=WmasW%R!Gws#loXY8wDIiU<(Vtb?yprMJZ5HSRg)KSB1xMpu$Uq z{^9j?`bt%#@M6XiUb9iciy0J7Na6KYmB-K+G`~K93)FNbsf4z1KMd;Iuvjy0VFPJq zRbW(L1~0$e0#4_o8OC^cx}rLdFyr0nrs_P=91}se%4iGRn?6IGM-No|vqPqGz%4r5 z#Xmc^x5n7RC2Pm*%HjYj>OoCr%;6qB(9|7h$qJ|*|G}3fPz_QGs}__NO`rdjTMRTk z$Hfg#!Yjn5S84Fb=Mkz3e_$A%2Tq?zGjtpZB!v#VGSt!JQ52aDo;O><1|GA7t!qux zg9grH86sbT^>oRC!mmHF=GNXDnU*_DdQ0bOBL%Mn`L34EGvug4=d{gw_77vt^e zPjz^L2EAv^$@J`W8$BLv#@o{~^myvHz>D@cKoh0YKj`sDq=LG7jNlE4@J0i;uLmAp z_#g&ewE*h9F)FYNKw=!+a|26vKt@(C2!nC}2PmSzb;AW=GbV8F5On!ENZ;A%x%xaZ zj0dM1n(-(x9-O{bpT`KazTlxgkG}B_QOHyUXu~=yXca5?gcVSd0PQ?wb=)BW8zQrT zG+i6SroS@dQS=10&OmkB2GAAgpiISR#Q(U=H25*aiM0&x#$!ukiBA{!5Ah(ecP0Y7NEgw^qf==8G|Jn9}`)hrH>VGYns zw*Xu*cpQV(@rF>ABdY?Vz-+L)Iza9M7f4-VAd?`L{1BaPW67gAeV-AJKI7Es?~Hg1 zg1|$HptYCK^{O~50geBGm$@NXaszJ3EiqmOxZ9=|81pD7gV*AN29y!zLPpU*eYYDT zSpp4Q;PFSpBv6e8-U7D*;Ki!8K)Wf9To_pEr>$;u~* z)61-R92sv<-(k&TCpAMnONrf4!HNMiY0Y8AG(lWJ1(ZuCh))-=;R$9uJw3&SN5K+O zTO1LAv=20x4v2u;11CW1mlP1S#R+~hrWc@MxH z6U3)W+VbdtXm?v4bv~rY1kh|ijV+IfC3J%ccq-`vzd3kP7&M;t2Q)4REe$~Y9iVlC zOlC}5Kr7ZkEu`r$ZF&3|A5FKk=ejS0JV%i2!j?{ zfyQgTfab=)HN^+f=~L`@>^Q*#hzg+2?rl3B2O~%pU`MMe96?9ifJV+?6&%>*6U5A! ze~3;m6yp$`o@CD>tKR_{U{(+IwQ z>4lI2s{-i$r3TQ*FKA~4x`V)GP3L#w=~K7>St*TFoq#GIR!2~i091QS-|NKV1lqR6 z=**)i0;(NAwE<{03Nn)SKy8 zXtai1fn&OZHIF1a2PkwNh)uum%%e9wbvci~bXgZ3DIrh;lS2Wt-hT`5s#9#**kp)$XpfN&FYaKGaeFsz} zg8FK#8ca9D%$PoaV)27m7OMgWH+VP)bixkmR6`24LW<&aZ&w}>#@o{qTzOVAo}SL* z#-jk*I$GqreLi0*#=9R;quQF6Y4`CI&jEiq#R~!x>zlRH?yqLUg*92akfp0kEfLa6wxg zps{fl1x|rS)0;ea^qF3WPG9hZOFRYK2!Uin4)kpJ0yKyR+NTF=I)Do^F>~ezVxZld zFbrzjy%1I61~t{dIrV|4Ir9ooURWUv3i^rD^*njJBH`{~b-VyxO$=HG@ejPr_y(x2 z#Kyw{I`N2Am*IsN=*&q_AqrZeDrU|MZZyAu7zSz-!dqaVp!hNUq9;$VFnE5-oVh_n z0g{;mxDu4%+3U%kV@5G$#NlU_fEX>IjMt(DoznNaq6)ffZbeY&@V$1sd1b zAqv|2^8?(Y2k)nJ?H^iA_8u%LgRzg@dkMFBPi531y(_d7EoCLTA>3zObcWpsFwjL z=x&HjzwgTh%$W;oBq&`M{l}` zGmpS@d4C>$PL@9 z1rXbiOQs$0l4%#D@B#%5t0SlgW_Gf)Pc`0Z?Ib0HSnyQV6t&xd0M{6)`77 zr>_d(Q3sX9mqU1zK=i?U9*ODvp*;K`jzTDp5%&Yof(moy528#C(+#|Nq{Tq_`~oDM9mb;xEj&=>S+Nx!AX705 zkLjG@JjOy;-0c@mLw8$8@Tf!GO|a0z?r!iX9e55J)EUDp^jJW9UD-foArE+gC};r= zD|mA)w9p3^5@HIRssd}lrP&Tp(->6#!^=m|kOibP>kymH7|J7R18RU_8p0{C4r~H= z)eP?Puq~2DBc3jWASfTRIvxOz&VbsWpm7OEAqbH{Ed<4;&x_)bfRu#Cq97^Uz@JA- z2wZQ2TDG8~{e^Irz|`pv^LRw3OGNWX@*pPTw=qsnWaCqrzM-9$e|kYQPcGx>>Gz_+ zh35ZgaQjX!hDSmUR(5^>&G~?G8>nz(b$kIj*G}Nz^pF^Euc$nRr#{U8M$sDuR-bTb5D z9h)9OSm&)nP!Uv(f^s85F{lWHG~7PK@`y=8%4vu@L9H}U!T~Leblf32T``VFwEhvZ z5{Ckp0=FX<)*%8;^oH3DaKm;6;z$Kp!wfuB1)J-HjK8fBhd32{Vkj$Ufgy5hZh^Qt z^Me3USW^x}gN8fAvzY2ZY|tEpF2fB`B`(ltI>?p_pk+Yj%%H->afM)(0=oceaS8JF zkLj%OJYMyn8jM{4>|scvWmn)3fRx6dnwys!oUe2lUWkI$n1B{Ac;qd10wT4bh=X#PpBMdf22O+6>vcUstqoP zfCpG1A^B+f)+8RIB-rB38=!0e>O3v2cU)4hz@*ENBMn*N>G(hd)KCKTIY0}QKnptc z89^O)S6)^`1CGfNbeuekz-jQzb`Pj22Hu<9AvWDJnMVcGoXJn-(Q|@W4vt39EfVAn4WQV%04{v&Qh8*UK8Q|_0nuMXr&p!&=z~(g>Qr#E?RqMY9yg*` z+B*GWFt5pUmo#vJ#N);zXA2wZ-y;OcR2ob>gdl@ABA{L#3w)^mgoqNC8Pf|;DFy1C zK?eJI(|P0=4^G!f2NzWS={&WdzU8@e9v96Apl$({Zsh||x@R(Dx&sp z25P7L$l#HY0EIPJ24V?l(HM&YhrpxhI+;8ZMIdp`35oL`BA|`@kEUPDp$Z)xX zb2n6m88m#r=?>mv2g=?rgrHqTNUi`iE?Gh6P=KcSMY9yd6gULtf%~7eN@4#;#DXw4M3-@^e}76xj{T#!K83pPP)dO;D71RM0E z8pa+j1qaYV6VU0ate``RVI?G}v;<8YqMuX)S&falz}6z0M}`-)V2ai8gFu!NhrosD ziP=0dj2EWYW%F1u{Sce}@fNqR{R_}=GNiBpo&B%?wzLUc^@Eor{6H+21us5CSuZ=C zCx=HucEOnr0Y^>Px&u)21#Ypx#p#YYJkpG(r^n{-h@&5!^FaX8p9EEIj#s8n%;7Os zdM4U`CfOt;J9@rXv&D+<#K&A^~e45;-5UTz4=y`V(QBCrNrAb_h5 z@ZthZX3)SU_BMtaAGBHm)nJY%M5mkP^Vov2dPzQyI*6W|&!YsQ4?_70p*#}PnF@H6 ztUib;usF&WDzP|nxr25jyBC5-=s>Xz9&v;mX8>yd!`gu$=YbZ>PLC_#k+B1nbGi&Y zpfg$!83t4gf(D~N<6)qMonnyD0^y$8RqikPZd`WfRCW*$;s%0obx0=s?R4f$8sydALK{ zUo{{djS5+5j#arC6WkvYKzi(ua-#-QgSg^ZSOz)=%|Lx6;0&~|geQve_Vhm`JO+%n zr|XvT*f8Fno&}+nL#QVZO0f(q7YCtcL#P`NO0*m-7gP>jlF$pGPCzK;3La-`Nc!MF zUi}4|p9U=l01xo6gJ!!y%ZkC37bsbZD{%;%o!(f%qr&)TdSW||vLI+H3d&BD=>gMt zjMN}$^MMFx11_i*2GtoKL_y1+!FdESD*tHu#MwNO%8+^h+A08N0B{2Zbj}h;D`*&a zdf|E=C(w|}!fal#>19g1!t$_vGzy5pbXHIsQ2|sSd=Q&nFr7z2z#BC7!wTM+3~H)v znBF)C(#JhGhewj>hS>DlDjpSfkew_7*QZac=g~7l86o3DEG7nzkbyRkfVv7Vgt9<8 zx52~O*RyTlJ65vI(;HI#X0({8J8`OM-WO>l~G3Zet@P+lDRj;6R z^^O-9;3r{#Tem1ifJd%C3pzl9LhyCTY`oe`;9*vzqZ_~{Fg*Y*E(g^R;8|eM>*HbF!3UrN-9Zxq(4!%clOc!W^u@b*G^amk;9=(gO)-Fy;q>@l|NpTQof>Ye|x<(#$X=2jboe$ zFOfyzIowIm7iSVAy(k1b2WL^Zi%?Mrb_!-u2yr|(VJi6&UlcBF11HT>Z6hUVPCwg$ zQ51seW{XZLB}nWA;Kxov1>jlSsm~8*>LZ~Zh82MSJ9${S5Xo=)!7ltoAa6HX5eRW8 zIHgSw=q9oV?Ca)HK^o0iJUwwfkM0Pme7E&tO>v5SR7!C~vB~7qXFp?%4 z#PN_)F^Kr2X*3_4G{fhQl%zR5Y9U5#j65K7fYt?~;bI|d2WZCz2ElO8p&dBMCNK6;qfHlQ6Y@kw#BceSR28wj#(gH^f zd=z&g48xfSNpBB=or6e&XkC@Vgvvg!Q;>ZFDf=Lf2PaIWFyh;T*EWHRz~7rjOcD5R z3)Tdgxs`qiGMvZ+c?5TY45wm(1Um<3f;>VXK~A^Zj#frOoDE5e;lwA!{o7GW$yp<* zlzhGuBT*uEQjXHPlfu25Pz`+;cUp|VnHEW|p$%}2;2b583I)NAz$g}{`|m-F;6xCg z7FX;67mH{2@B~7xb%LD`1X;AjfqXUu_|_K33$VpBAH+b5X~2ssG?*@km@(ZD0UfCb zKAn{ba@&SzmcTKve|kXoY=9OhfmYN&c1m#y>|#@3HD-Ju0y)-s!}Pg(dAJ#;O_$T+ zHDa7P{mxz>(|r!}=;{6guOV&VS7PC1 z1uc!_&jOun>Ihj61Ud)>ytY??Q{V)bz}x9|`_Wh2a6wnxutC>mLXYtSUCRSD2)rL{ z`n>&+6*rJeKR^pYL5tj2An6OTzMVth9eCmL8jy>@>1zdiam)f-s}eZjtJPtf5J3R~ z+QxO5|ir5p`KLh5lI!)iUbuwoB}7g1Xge=K=TagX*Wv%k>)@< z31&d{6gb)|KrBN}(E-#;(jem@DO#8D_Vl?&M-wxNiTTt}Pt3^WuHZ@X%H61wJTeKi zD|hWc6*;8X<(`CeUKq8YoAvOq^NJmvE=gxAPFut!Vh&o6uE35s zX~B^VwD1~yHa)nqh99N~I*tLnKfOad%Ta0izD<1M)90Sy;pPRe>I0o@3qD+E>lq$% z5wM{wAVa~+tv`rmIo_UjmPcIih8V`;Y7}!HPq#SBqp5^Acoo-eP}3(~;t`oX{Vb0h z^h!u4$R-C+BLlQ{7;%LH8|DQPaBm!7K)yp^y39Eq8Hjf_2!e{r3F6aT&+#ajK@TQ{ zoQ(onsS7%v7H-J@ga8%=HU%!wO$i*3 zBjP!ye_YBZKK<=E9#Kxn6;~_@Y}4b*1;j;BE;odoM?2m8JdYvcqv@IFc`S86$A!X9 zbyW}$0I#H0Vs~WE=3`=E1|>ZBMW+`erk^{{qsa}@0d9{x5TDL;fyavD@$Kjb50Y>-7$`BQ z#er9?^O!OH0c}VZgsff%A4F=#GzYX0dJ&U3_;_tcUdWle;FJ78`wBq&%RtSjvs_B- z;6vnD9KbE`8+=)y+bqCa*czsPi06}V2cMocpUIqQ31~|eFZh}|R;VRwU=2J_qZwr8 z0`V*XxS61PV?csnL#LNq=COhVuns?Z*uJ`qD{O^OQmgS5o+L=vf|ht=4cpt7ngkq$ zFjA%>JGLt}I6z4rajZJ*ZVqrptDtL3l1yOiG zhPL(}kyKgS6xbcP+={^W6S9GB3RQrFCTOp~6Hx^=9S8Zj9k&Pyk<}2iiIbxjj zH|h^j@R`X!kWQQdsT0dmV1pEgj=b4?Obkrmka+;U1=btvIMCh=(5dN;i~{Gl6gWWF zvFI~C0UguM3hnrU&vZkviw|rU>{xP;4bxxV#Je4>g6%`|RPYb>W+Jo|rBjiN;wM1#?0rjsT8hGyVSaH1oRW&T2 za%+0PT^^nK7od6u#0TwW7O-NN0owZwItUh2TL@Y)+~9|t)p`MRRtlt~1l6vfoWvpU zlLHhB`ix&dI~<`q&pwEP?o7G>+TY7*#`FWU-xsud3KAEf4L$6Rr#>_ZI4TO9=Tcy` z)Mo_m)CQLg9b%vi1U);43tDJ{&({Kt3xM|0f=iAYVoE#$XQ!Lo<583aw;&uj+(5-K zc%M59G#3fF@iI*BcIQ>(Wiey=0`ep$sBt%a!95-YSo`zhB3_m0ukP^}8-UM(2cPZ( zD#k%apMZ`{01t585Xo{>12-^1Lu9O=@i2i4(|zyrD1uHl1?_?51)ov?8QZuZI(>sQ zw*q8r4OGb?nGCu=8FUgI2dIS%3OLXSLXLMnbqF}BA(yQPd(g^O(4gA`(4gA`ku1lS z&m97eXxm)H6t93o=m(?dbb|*xA&hsYAC%^m;RL4vp)7%O(^oy>wl1mTu6l?Fr&p0{g(_Zjbo%zYlrjLFfF*J>t=j0?F(L z%iQ5pVgnUFpuMEv!|W0s@yPK*ZOw9=e4<6b(P(;n0r*?`Jap)Bz2qr0aoKIV}i#hdGec-g1NCGzsX{kr}!k17toCb02Ja^P_5;Xf?` zj(R9=o%w`ERS8swusWU)2JJQkUxW-A0tBDapu`P!^Q7qyp71Ey>;+{)1}lc$AR2st z^bT=|??9X9)`)>`%>dnq0^+U`17GX4OI(3lfkj~dbi1cKQk41n+*1;K%>|F44buak z@uaEUWmW_qRnE#(&r}cDeJGSAFoj)-4Yb+H@dP8N%Ilqe_Zg3z=nq!V32BT{3apL? z7(vA~OP0X#=>pGr#Dzc?yf}jP=z|t^gHP0-Zuy+Y*Z^{TBlzrI=;?bGgdmMu`0XyB zGb<3f<~-+-1z$7`DT+WXDsF);aFS~Qohbqyb8P^Rxq|CjF3=v(A7TQ37#%PCpDLgT zKF&;+p+VA7)*V#bfEsa*>|mzj4^Zbzllg{(IWxEz)MUOOVa^P?njUlxWdo=X{2-X6 z$THpH1&>nw4^SBkDjYt57#yG*AQf0ayZWDi`0S8_vB6Dr(3xw0K)124VaZZ}UjGgr zzFq)6dkiDDnlpp0;09gY0qz5VdOxh7%cd2e9n1wx%az!t-+aLnV2o5Sv6(S}j+p}$ zd9Y)n96>vsA?pOe$ImIT3H)Q49`lk%nyHO(dgV(VD<@b(v_Zs->469&S%Nmg!td7- zRa(g81ZjwZj!Xa_DG5#_@S^hTOCAMxa3=`V*TUr@a8cPIlI6JQR0qmtW+e9sY?&VO zibq;%HAo3BqBI5dUm8TR1lk#=PkhBA#khO=npZp~jCZC#e8nTdcyao#S3J^6uR)qH ziqdP4qEuAzIwSY=1&?^_rkB3vkq|n;2Hkn+%F6_~L2LT_*F2(}@M3g&-CG{<=~rI! zNJENE<>?-AyaMo|MC%QY9=@Uk)Fr`E?0tIPAmFHhQk2NP)Ny)2H8m%cIKpemd(ro^?n&XC_RaaEr%eI&%$|f-F1agcZnD$zK$mqw?x$|xhnNGt${gH;2Hhp7!SsU< zbjcj}9B)v`p}_>ciF&%=eP#*pP{jp_=^-C@Y#4t`pZI|X)*l6Jh6kr}(4FB5s@&+^ zD>J4KpktCg2xmE3f+}?I)jWb9c_c(3!LHmGyLJFwFqe&i7Y zjc(yFE&c(w589GLJKl7vhgF2f(ARD&@x8qT~42Sk6U{B{?9zDI6@8N&w9`SW1t<_ zkf}agcdf&tG<(B&CC%^FM@PpRygRc|--D)9lemdv^jCwX#UQm06q`^x_2!kfYK(|_o zflqk=9iIX^kd_Fj&Bf{n z>ff*lyk!&EF#W|(9$g(!UlNi#LA?oXP=ODMG=WRtr36pJlsI_V6u`wkXy*DCsA>Tp zoC-dK3UtoV1o7!vzj&nFrhqau_$+G;CeVF-;F|_PSHXfz2W8hAe4qhCP#FMOC%~h? z>Bv;*$XKSptH1?5SiteYtm&tI@u(q<=YvkA2CX-M-}MVQEJI>?rYx8Ablu-PoS@5k zfAd%{-kx6Yo5yN;{uM6X>DzzvSaKmc)6;+b1|MQ1_J>DK20SJJI-W!Te5e*ElYtKP z1`V^Eo*wXrM}-yC8~QT6@(+(3}C;sE{2AzNUkH>^@!}Lf0cmhK}F$caT7<5;% z0CZ6W=uiacVOKvy&6#I_?xh7a^uSF5(9jL|4hv)*pmsP+huHM?|2%S_1A&+S=dn_Q zBw9#10-a9CDR7+`w8G;GXzYOtbWl6!?$7ClGkBz(QO-o+hOW?Hfv(ViorwZUjG&_q zK_e`XqrAa4>T)Qsnle2Qotnz)#W;29241UrQ2JyA4K4_52c3uvx~>D3; zi7w#tqCqJae54B^;BJV4Mr0A^s@Q=GNYG(Wio6OOU|pc|znGzg5vWrLjR;U??T7%c zuwivX7}x;UJI6^vO)TGZ;@#*J0+B zlY*tx22dLhbj}fE5C+u7OJU{>;n;tzNx+d?V8QeQ%)C;d(>W9v6?mWnH-A781M&eV zra?InJZcMSF@hTUprdaDAbq$$pmYLO2p)+84KK|A^`}6GLp%O|+$7+rEdXyWvVoeN z;N~I==n6XI=AtEfdr<*=0`Ub2NB%-37AuAhamctKj08=3f)Aa2G<^~auP&?w-ylAH z11qn%%nvc7Vjen%F9sP>01t;KtALKsLT z02*VOp2^B14SM{gS-??; z{F)e15eu;MYLV_m(7=l_)(}03I_)Wl)sN=b=a%5!`?0lI!0{yI?P+Q7&<1!E7*rBL z(l+RbC2q&9)Aw`m>LL03VvHE!q@*w%9*6)H8Q?>jAi)9}g8`2qD6k2%f-7`zr3IRWMLzWv zH0%l;IRV{^aRD@u_Mfp3Gyx4hg8zc(^v&G7rk0?UVjSS|6;dBS?jQiU;u_fS7owoS zLv|is(8M0-Bu$v&>54qOBK(lEG}(B-7imlopKiy;D>XfihnJ0MhWPX}9$xua$S@-0 za4%5H?*M2ZTMT>$1-QJ2RCJ(HAAI$J0;d4-k=4+W3{=R0icHWcuNq8$M4?CBi%x&U z!>b(+n&Ja5Qv^?-DR3&Vz$#2o^#>lz0-Yjf4z3VDrAULYIWu_f9#VpUjzUAy#IFQC z#Ryy`f*M!Tb9i|rWL`kc0?m{`Ca^*G2n&JE=D$9D0WYr}_S3Q1p_L@4xeU9v6m+g5 zyrSIB!pE!5$O^iKe(H1seqKlL%^m2~4)|Dl$o=;4W9dO-c%ZA9r!VB^6=8foeH%Y- zmI!D@0aW0FPL>9p>#E88L3Fx_0Iwo}6upgVCDm;KUM0rc)Bg$ZZsY?8GAPADnqqqe zc_lyxwO$wGwPn0HT~vtIjs-N#GkxM|9(hSd&@kJ4kmI4110Pc50M5}CkXctyUI8yO zu~6bwn=U2H%gfdwo+U7iZF++duk3U$VO|0Fwax{?yzJ_bMjpsy(AkU}(C#WY-+(Su zXVqnxA?C`4*dfd-%MQ+W3&f}25$2Vu2RHb@mw~Mihcqx)L2W*BW>7~4 zJb4Ssyx>R#w`S4LZ7YN{Q9vyUR>vR0@Hqj{?W&0JAyECQ$^1bWvdRQB(g|HL>IbUk zKuvAX<=D&M*Z+Zhv>tR>8)%plbTu7lT87<`9b7wuT0aUbRt%uyfE^!*fzHkaH_`=q zIl;GvO}{R}Ysh$aI;SYF0ueW)7e3+!je8V`@=7z_p57zMn;Qo1GO>eKQm{G-Suucb zF=U5~8H29yfL^))3Vjy%)YcVH_5zno8cY}X!FQlQ3O0~3@C7&iV!RTJr>AF#@q!xb z?P9!g&>IuCfX=oAwQE2vO>kdogNPDjeir0GB{l^{1rV3X0X(t*E_syL9NFCz*c`>& zia90^Wt5}?U&P$B^JPC!El{ElayH3>K>3p@Z9-Zvy*W<$o$LA`JA zt;ry>LH)N2qSOD1^V&1so^C6_o5OJ()cWKQSTKE~1h2R`q<98j(g{1(7)#3%Tyle2 zmY{1qKo>hr|1ZI-RDTWB%+!E3Gr`9|gCkBHG#4>}5wy}A>|Si6lAw^dAb~V<$q8)$ z!)Gp`C&q&ghE#&iq=U*=5m2SqAp&ZSPG2C&%NGJp0ghtsp!pF{-2_>7YqYaxO3itr~ztEy$UmX-Clf0O;-*P~Xr| z0yKgO?#i=*2L0h{?jDGMMuVZV0UcslpxFSX=}V<}(_Em7`#*?gIc|N|0lv^1GU5aZ zYS5qn#3ZyyPl$n_wz^oBM;#r!^4Dd;z2jb?;7bK?7l;_p6@173o_uml7QeqRR29=~5OrR6c;Q_2CP^I9a zzy=RkkYtA#JYc8Km*P#Co~6JmT)*&bhk&CnVt|KJfgLnN2sIuytOqT_K*qrB*bdUE zhtTN)8s`wfT<-{uQ)m=C2kAi`E1DiJ&C5DHK#o_0*m#*G2acDua=f_|ggdApA!(G2 zxNz4Is8T>a;ujQP*u(wy8*;<_BS@zXBHUex2>1Ee!<|u)_;B}D1c!T^BCj3ekLedS z^2tG0@_~wZ=*&q0FSzN#u7J`F1I^*Q5Xy2i2X#h3O;UKr7PM>x(!lv4Hr+yrR~vc< z9w&6@3EXM{w?t-uPLKvS=0Poda8nD^k_DabI#r3+C<4-;2MakeKwHE&Kw}8t5k1g( z>E_HY_#7D(Iha9<9l5~8B)BaDxq1q8hC5{73DgMyEm8(MRCKz$GOs3RWtW#SubdmG z2f)h<%5R#?4?tIO@j+GrfmWt~M_UzG!L!YfOHITSSOji?>n89q-8>L|6U4W#Q|1)} z-J^Fvg;!q?)Y^3vfHo*N%$OETcRb1?>VY^QNCC7G2DI>o9opCd9r6us?0{}YLcQ+* z6riA)G*I#e-O13)IX&SmkI3{wRbF8njbd2rOuXJK;Al>9H;?h|bS^b;qgYpsw<-lx zS%WHI$g#vMj&r6=6L9?Wyh*^(OyD{vsAsCrxB|3k3A~19fjH#;5b&TCJG3U80+j~E z7Gw()XnD=nP{`H{4f5F`t(8w+&nl^K?7jm zxo%eQ$k_(aq8QMyE*sK*C{Wvo1>9A9AO;@8gl-)HO%sBeBcL`Wcyb(i5c`iLK_wQ@ zd9a|q8N`*K#s_4h7I=USQl{?^L}?C#Ta}>8F+q)4R!!y&f}k>9ffdvoz9Ru`h(Q~R z64R|Ucx6FpF-n71*ByK{1B*2y3r{E5d{93E6w-VGPq-lAdP719vI`GX|1dhV82`TdG4GvI-V-i#Is>K-<}-fw$@H0mTplQ~h*pEnZczsqnkcL5(`d?47`)>1kTL zw%OnTR8Tt#v@HM@nWE5S02;vs-KY%D>Y!dIhk}^EQ*c&q0C@(y&k-~aZ_W%pxqF5n zs1XQCH=slR!B&F@fM$qIzxahmToN?(28!}IV$diDU7f}1I6-W>oi?v*J;(+&fhnN< zOW;U>WGXgjAqn2|#|TQ}$b0_GnL#&kf_D;fAf@XDVVFxm0R!IW2X+Z)m=#obfC7U9 zGAaQY9|!M%6lQW{0JR!5nEr@?@+YVPJpHXUuUrbG#02kugqE{E_@LcHNU;tnmO&>y zBSL5aXuBlnn0-)lA5tzr#xgjdgYr*Al~{OLAcOJ`M5pKL@Jgql49ast2j#h;;|=gZ zdGH7;cpz5*Iw%i{4e+1{Xn8L95?bWFj-Z(maBP5s^@TVjHb9jZC^n$|QE)Z~kAh5B z(B+i{U72F9%M03&m8;9^SP#1E5;O@5?i}-5F@V=dazOhwpoFA z^!fU{tX7bbFwg)T($YW3SQIGVKzbt#W=vQv{gB_xCn4AIw?V-1I0K>;#OesQQsCnB zGb{L{881#ZFyJ-zxdBqjilh>JBf%qZpZbTG;$y`8B%%opx+xKI^%JNC&IDTX4K6LG zPfX+%nSR)SR|qnk2~Ibl1`sH3pAZ5KXTC824`&+i^NLP4Fy!TBd^Fw8kk_al)^0{Q z!XK2~U|JivK&3PE?nwBVmG+R8)Q}bis32ekryUjrF@a~`0tei-fabml;^xfY0YXR- z3(i)cDu`8+dHS`vJOb1I8}jnnVOjVE?kqD}G3*fpCpys31USM4!5beDZ4t)~@#*m< zyrQ6itwbYUH^zz6R~Yd+Gj5pv#)#J%G~K3Y%_(8ylvtdMQD#EQnh9dleNA{%8E;SDY{DB^4^BUjUM?%BmDK=RkqqL4 zZk_?97*KTr?eW5gZJr>F#6A!+gRDXV#Q;<>UzP&OI%IvuDWCyUa1&+%c#af0BE-t( z2)Y7n;q-~7yfOly8X7Y1#HPS5@P~1_;xt~-3|8=}K*nr79tJj65MW|tW@Q20*QCL8 zL&A}{(2>cVm&Nf6gQ6*T)MeSyCINv9T#k%|yzF2B(4HoUfGaN>4`>CL2Gbo0CD3LS z&{haY$$dj&x|JDkQ2kpre_mElqm>0zTV9Y5_zqq?35o#N4WZ!SYET&izZn!%6M>Qg zsNUfac)m71E%AnD!FY zG-k;0V4x-VAU9o*m~LavYcO4CvzYModUIY`(1_(cb6)s$MSIM7wd={auLZQa60~<$ zFbgz50lKRiG(Z6^!!L+tK{o}08in8snBe{B24QHy{y;R#Q4TbUp~?JV`iwW+Lem9O zd0D3`2=TE%=IcP~!9W9<)B7xV?RgLvT|0J9ziGiMjeZvqiouho3tIAODj|wn=&ryO zkO2WE2GDjb(2y)>Bbdna0!v;o>ATGEm4z*gpcOUn1oLtFLQ7r~NL!2z)Lv`>E#Wig z0%r}-Qa!QhidMXt;$Y8%8Xk~T4ywS}9h*N)UueZEFZ=*an!X8+1%hq$ag7*+X&sHF*yA4_H1WGNC;Xu%O8&C@$G_nQXN@oCy z07pnHftu;CMWqkK%$P3lJ9>e3N`R|-&^QvPa9tp-v;bvQDQMjjczP9*Btf+jygr%% zYCAB3v`rA3_KinY9JGHO`qM+K=%$8SQ;0Kcu zhb}`XZzH1u=t8R1(@Sl64IqgD+%Rtj-RovB{edm7Lm;F!0`(n1>t0v{?l6OVN&F^@ z7oh4M)anKgRG>V3%Obi)DZybdkwAv!FTyEg1XllOdaANU7!g(P!0qo<>?ak zyw=*FJ`kjf&f&-)a39ADWQro52xybB^(O56fBr{_EHO7ORVJOtWy0_x>| z5S>2FfmcBQob*BM4bYTOmcqj6=cRZJr`tL3iYT9JgY12TjEXWVEMRgJaAbsywe8i6#)XoOAHU-)lVOl}+t26jPi%B7NXF2|yUgyZ`%{X!TDMwx@ z#;MbvI`VdTfNJaq;AJ!iK$8{VahgLS;29%u2Z_V6WAQWr(0;sZfj3}v;CtObi>^)x zfJXB{)al!uc-0wqOuz5MYsR=_x|lO>0^^S9<<7j|H8~5NdBx(u>vTXB0;m9D za?}D>GNOomc+im^&}aaw0z0=Ovp@?Mv^?Ymci0eBJ?P3xkV&AGyx?1j-f=;uh%{Yz zd8e=F<};hlE5akdcz1fO3wZixrVDQ%7r2$r0-C{@{>6nii}CdIcvoI;#%sqSCHN)c-H_6sMiMB zH2^ASeu$Yfg9e#FTYEs+2plb-WkjOWzqs)VYeTXC7i7QE0U=P847wJX1AI7+BPdyb z+LEC8>}k`D+-^D61;Aeh|U0LxC#`z(=$AHFkYCx(SsMh@oD-@ zZ(dyo@O&Vw6bAJlM8Op@Xzm+aAq#;@AjbM;><8U}_Lkd;ujfSSRq*1CXZ$g} z!HZXiAJm?K^c5jhAZXJQXu-K7Dd8pU&8r~?tH(|VLHEG@5Xy2?f(_|UPxR(hhHW1M zhoUyNP~EX7=hgX5|$Mm~CylRq=B6$Yr#$p8y=+@>B;;y_b(+h04MW%lZKU@?Z$8RRk>GLRAEKa2ditk8UJ=H7(_i`Ws%kF)?bKfZTDHGJILq-H zNuOF{`B&Z+)U2_P^ zgbjkAyCYb28FmSQs<9nH3LF9-!8H?jFd5v12N?<)L=eqV;1-z34pIjmO$JGVYC%wn z1+^ijLhd}2^5^AM0uOV8`W=ulYF5xil?oh)(U}?I(>?upWw@q*hfP7FqSN#JdBwOu z^*DzDyTCuT>HYq^L5$a@Kk~=b9pil>)XaRB)sBnKe-6;Uv9di`m6P;cc z0Pl`rlpf~H7~L_@k|t2cVfyv}-ay6$(>Viq9YMPs!29bH0(p6a5#4QQ`}T$S^!h+v zP0Jrlifjs?DjbVFGeD!Yh?K*IlyX=c;0ebRlxB2-c%^Wr8R$id;55?|#4E=5XZp+_ zUR7PxG&A8}gMcII*ue^MMQ%u%QDmR~Hh@=}alv%2l63gbM5h9UPmoN6{ElkS}Fm$mK)U81a(e8U03kH z5~vL-I{l+9ugG+_5MDk|%@Y>FYsPqbdT$7?j45ax2gq?dgp>r#m<|Y`^yViBW(j

4jN* zB2tH$;Jw{HVoDrlObVbS;@~07_;B7NWALgpMsNdKmtievWeg~4K)&274(ekwKv(V) z@E;GTNdf9IfyNT1Cq_`U+s>L6+*pzr284E$PrJ$x0hro{M=VE!K zQ9}evfrGM=7fXnMcj(zkf|D#P9FVqxHB1xcm72aYj#m*hQ*|ef*Fa=18>FiOs@^Yv zvM8Itx#}E{hjT;fYnM-~8&lKKVxu1lKQ4VM^Dn5N- zDz7L%w!)L~?sSbbUZZf(kTZBH^@A9=xeiHQuQ(y)CumtI=puCRtQx3y2n`I;EP)?v zilCHmCuX4%2!fM%0fHJK-fPtVWe z&0)Mf{Z1Zlr4^{-0IGCg#}k1n0Z>y9x-W?dGN1$6dE>m; zn#4pFcGLPQktQ4<6%Nr{`3V;KS1uyh6gz!U|k5gDOE#rT3wNSC(=8biPVnBPGys z4AA%-_?~!J?F5?11r<<`p@XDKUR5o~GAgj3aF)V+CV_w8JPsZQW&`zqL5tNu3)#U( zP{=aP5SxCXk{8Q@7|?_SXf$D36|W}agXvmTyt0gsrh8QJMuSgffetluIx@nCnnA@r zXdoN3#sD<90$PPW6PryPJ%wNcUNTN#%hk%5XDy3IJ4UgX**k!dVLJ0!`2n=BR33Z=~9|c6uTk zpUU(N?Y#WcA6N6HiGdrCpw(cYNm5X|1+tSQzJ^yu@GLXLLh!;SP*ZYxPYtgz=&UjY z&{`_^f;To^22iYlCNx0x2dH=eEgS~by5Nmfpl%v?v;(PRd#wFE8ffR8Q10#TFs2Onr(YCU2f>10O8LGqxQh8=p27AItxC1mN_57eb^ z$n7GKD?eac`UY;=fDY6FoxcpJ7Qu_`KskfSaWNw}n#86bs^!&E`Shbnz|mIVCz~Q0 zx58x5+#f`PD{loTr9nno1nPJzV?j+pNHYquMFw^f8EnlxsD8Qu9xMPY^#-*x!K3n! zVLI3XeOToN8>|PfTH_EnJN;Q5Z?-si=nfKvpmYFhm`=~A=QU-VI(=R}uTnj9I3E&5 zGr+xy1tKWR1Ht3E>}E`$*aL;p3=u2?ZIE^o=s-`@Dj%{~1hP&YGy$Q{_(2rZ6k`%t z4r-aR7&|C1=`!SiY5+%2;|bgz7ReI$2OgXRH=960pb{9Kf2J2T@J2HIW1oJufmf1o z>U8kH;GYKG?e$1m3pBw4$y!$!94|8{uuFsHtI=~9Gu(Di?g9ps0lm{3+k+L zDWEn(|8OxdfSLj@3>rQX%TnMH;C#srI^?26for;eCZBk{6BDzO6AJ?<;&+H=Io_B! zO#rl#2Xw#^XnxM|0ObW12*9RjJH4>6o@~-14cU_3lPAe2(Pq5rW?tP4P+1E~Wg7$`ZF7A_a48E) zO5n28@eYIIZA4OfAPOz4!Ao^OszAjKljBzg(7g$uwSG`}@WLEu(Fqz)ZGRu zDy*SJMU)~7w8ibpTMqIoxTIiKU{C<}nX0Exn9HZB1@4F8J6y38G|>-QK|5W)mDiZC z`VzSMo>tyM(6ZkDt-MMKpwM$#b#>KME=b@hfVYn_y#aM~K}S|icWmQT0u}oL3Xq5e zb&)_4SxW2zM_3^xIOu#&4W=n#puU9$(*)3}O?CkV1@LNMr^bech6x z3~E|JCTt;VEd-u}Cu{$JmSI9?<9~>P7GQuICGu7b4Uv+d6Ns!B?m%M|95|e4GYOzF z1zht>WIk@EefNpdH52ApA2sBy%Iiyqsvc+uyV-}=M zbwNVl+4L7(ytbf4v+CWv`tZH&kih_%AIPWSAR-0c{Z=7oZ5M&?ha64^YOI1srqIG4 z8X~-)NYZ5fG2OI>R{>`nu%O3*50*GMv$z%Q;5mfdX#Gf(NVz)wK@Tia?0b17%#aR` zV}u+Y2cFwt1s#0M02+w_SDTj!yO|gI*)VAOj1dAEd9ng++Ht>>0#Qroy zz~jyhDmm283Cf^A2Ca|;^@7B*kYZwbVIOF|7u+TS)fVtYS=f_4wqRd&p#!uzG#5Oi z0vW^rub3c|7fw&t>xTtwZMr`IqF zv~Yt`*aOk&^%HodeSa{4n@Q|uOkY6N0q9(I@S%^K;5&H0=Rtxakj)HIUvPlMABdx# zD-IsvgO0}G&VX!?!^%Xb>rdq6r#u&ehlnA&QNg*+Q4}2akU@_dVxVQ>o4FvV&PCq%3*8pdhgv{$gip6?Rra;&XE)_v{Gn@q_4N>HtG~68mTe#o} z1{4!0j(Gyo$Bocu2r4YZvIMrUVCVs#9>oSK#Xnw{zH<_<2GOfI#V7MhsjOsH09~EH zA<)SUUB(1HdR_u_K0iC?TwD%;yVFA_^CpQrVF3-PL;7({j$1)J#wF8JL-|y7K_drQ z3QUgMz+&K?`V&A~pPUeVwh~Yi0@VG!J6(1PuQ%iE>6ue_t?FUJe_OyiW)xT*`H{A# zf%>MP-~uIo(1{G-1-}~vm0%|gya8|5Lf&)*>c4^OY|xHzP@p~#htv}@7$JR6nD`Y5 za88)6G?iD8Z-N+TrwWtfc2M_r$@IXfyy}d%r&mtpb(qc(!pmz6YVbka0BRs|I4=3n zB;cqja1XqmPoELIEFL_JI7J+k;=zr-pHq2#81GMao5rif_+WbBG+uehhm4>m(+z$l zZqTMbM+PefP=Wz%y;(VpS50Y-m=ZVW{87+32A~biVxaz+61N!>xETZLAy5A}jn{@T ze!AXtUTvluV$-9i^D2Vqy6L=H^*6-8rh?W&uqdzz7=Y%Y!SgtOKpB|Jj0tp_t0NO6 zLp$F4(k@`e1kT62noKH?rZlJr#Nx;Zq8LC&`Ei;tfipdeP%j>jCfFtEr7+?4E`)`(25Mu_CN)81zruN35*Kd8cYmIyda82NdV+d zNDTvWm}r(jH+TWZ15uDiz#R=}WeJKV9?)1PsKovtHoa~-ulRJXS)e^XV$(He@ty}= zC--X>uU0Umh5QC|oB?z)_XQuQg$(ZYGe8^0ka00bO(qS5vIDa0cEg z3T;3MJe^)Xn^z6AuVVge-Y8Hz3DgW+z(0M0JFf&I|MZFGyrOd8nM!5_?t_lZB}y!g zC+5r$0HsGocF)+c16(m44FuY3(t~WuQWauuZXd;776(i^n z0SBF100kZ+Xd^VJHUftk_*llz^KgV2J2cFoqd?#o+SAbqD(aw3824@TnMry96XH_ycKUygNO10k63i`XAfOUZPgu!aBp9~6Y0!!EwShzKr89*bZ3LVqqrt%7M z6~IRtrr%%4TP_1S=n^z7`T%@N1CxUS2dGw5Vpm`hcs0Ff5wD9h$PuidO~t6^d4RjC zpmREON!nlmUMi;z>d}LSWkAaeKm)>#vfySJXy6jue1JE}Cx}l^T+AymedS$lp6T;` z@NlYtgBsd%;LAdEPQl~H;La&z+eAHdKpQ-a$`4BQV2hUC>HuGZ1aCP(t1r;n2((@i z=rm6FX}?E6`rs)VT*0ppSNsi5+6%-L{~%H*^inM;(C$4)w99_L9k&b9!3TZRE&(_4 zKW^ufo4#%dFB|yCMh<~KaMIWTnu-Ul#0PKAhNLl2(FN)Af|jBFVFdXJyopN;e4e{5 z!yO6G$-B%T9%xJpw0-jr2eci>3rwO-j&E7bsOcfGyvEq$W^CLX2dCLJ2fP z#N_ycL4jRh$@DMFc=eGcQHrL2(BUzfp0J!(R1<61toY`3Q`M0G7hx8C_a7O za$ZGukaZ9dknh-#Zx+#KoB|!I0xyGvr~(HeXgCctawh>=umf`Hgz5FGc;&cq5&2nf z1+N1a!tUw(vV8I~?8qxWK&=r$(9#l6=sgghzIg?&8v9bvWX1%s=?_-$iW$BEH%q60 zHX?#T090f_906W|hUp0I=?)%zBGau`@=7t@o*uT6*HsHVzK3<;i2^I=sCFb59$m?+ z1DekKypmUs9aPS+IWC;8v5HsK60$(#3#=mm4>IU-6Hvghf(u+W&s>8q=FLC4(ktp-!>5UK$}?SxRDAe8nRu#%KDye^UmXDUDr z(uRb?1&Qeg*YMhdwp^^`)n>XNF`j zc@}11mcVpyo__+GI%EWGz|dfNAT9u__+a@36lZXM3(SCq{Fk-75{$Q}^R5GX)p{MT zi#LkP!46VDT#*bL6AHCJiRgH8Y^WT_z1C6*HzUP^OL<(;o>1E0B>p7EKd?Hj}IzHz4d| zbz(4QS^_eb!Hj7OlwJd&>zRIlhW{C?81{gz(_l(4W7+_cgQRcpq8J4ZM;6eE5I%uE zPS7+DsIk99T!{rTo&^a;Rt=^F;^43X1)8IcJ1?W-env$WZUr?334xiQ1=f({2o5RG z)EGFV_?RDvgPP(HMGDg=Xz_?i#ltf$XviPDCoUNz^gw)i!wfD(V_0YS38=~kwFyCY zH-QG9L1&LZ906^out4ME!gNLlK8fiL8^Q76wUO6h`rl2wygZ;{43gFsh)-X|@AAHbxZBP;b7bOTUfhq^kz$G|*Arsdu zjw|L)6A(BK_8qJO0@XR7cxBaPxFG>fCn2DPa0)CC56@>3cnhA<03T}!9v}jz18zuP zj2XQ79Ta-t&Djb#EA{EtTX=OCr%unE=SKZR4-^hHB9fH?JDU(uQUMM?rxF)A{%CsxdB_ZnlS4T>y0244Y#I*f+00S8nF+;nibY zG=0t<-Z_j2vq;ikeJiQ(#wM(`4@8G-qPq5dnD~ zG@ZaH01c4|oLLGWK~QK;yVD>5zRmO5UT}yw@8dO>0EZ?x;8$>FDKI+z04)#;4QI?+5!@;sCD!+@%Y+K`s>rISR$4E4UFZ-S7sykL1ntngd{$-aNo- zu845y0q!gXPR9dad!a%0npxoObi;#S%M%XrCNMsoe()gJa;`(X28>guTOZ=BW(Nf_ zi@=-ddk^tO!qVFd0ffEl*FfzxJPfwC?=Y{qDZ*aR#wA!B{a{yM(_rclROC=#1D&s} zzzNAcY?{msf&y=+|2oWT!nl9B{t>W~;*RhZfWqSl*hvyck;3DH5GXtZFv8=95W-zA zRy2X`gnTo-<|x=*H;?jyZc7n7#w#ihamWl|utPvch9ev@L0I7Jbk}2G7nB?W$H?7d zU>B$zM{>ar5s(Y`F3(>p0j2&yRy$Ab)~aROT@oC@5x# zf?cpc6q;BVvmAK^7EKR00gjA~C&2dpIsuLh?UTF)uh69HKbvSrrlCPQ`z zJHs2m_;h;z8QvJir_4(pP)ytiOst2Wp&U0Y(x6Xl`sC*tA zUP0%qW4=eHX#@?!U+@#q@`9`t6In znlSqt6cG0B_}2p3<@sj1{3WpcHJ88vw(SzHg5)1?@u&cD!3;3DK><{~2yB@C{t~Yb z$W+_Qyj6@(r|-DTt0(o0S%J-Qf)Yq|2Z+>QQUJxOia`9dE8vihzXA@qU00wX2TBa8 zSHU4yc9l1U@#*y2S9uc|pHH{F239!Z8n}2=xDG8Ixdh%!54sL69+zC_)nNxaZ-V;t zz^}Z*Y#K~g)C3Mp|8SjG4d%@m>IiSX*x3xKFWyWyyaD!R-wj@4BSbK7fGE{q>R<$o zl(T6t?NC<)rKu0u{cDZpaPrY4^2>? zhRv~oF-u_K^u@P%wHVJ$KX;o~USL0)B4`$Bf)>d6ECN5K|Gmv?%(!8?;T>L2#^ckg z@9=7I9bi}B0mtXF>Fe+CO0dU+%HR`P(;M&c%1nQChu4GSIk>v`qBZ@&OJ0fTL3erG z8J|v{b(gmWo>OG+@q)5Q)ji$-#z)gn-{VzbJUIQsJzfoPNeRkJ^7nZwq4mxjU69$5 z(|6wI4Ptygo#z2>8dRo5Z~DUTyb{xWp7L@`pY?#Zg5w1+(_nyzrkw{H1RVJV-Y|mv-(oQR;5S~0>EVxgLmAgj*ZB0He^ik|SMLOnId5aOxtPk2okpHA0(%4@?o zb$ZrQUK>~n?Jz>PV)ly$NC|!LDLAp*f5xjn-S-(Umo_B670}bk0wm2{pmf45@Me0` zGni)Nbh5(;Ih|-e=QUwGH$Cn-udLvHHbr3tHpdHKvp7I!M&8@g(jPr7rau8@zcv+@LDk*n!f1;uMOk#>F;0grZGO99`+KN zOymUKOuzXOoJ`DK@#-+{oSyuO*MVa{A1EL{m`z`Jmseu?;a9ve&=$-OGf;aB+=6-k zinpKf>Gb;7yuOUzr=NYztHZcq`mfi#dcuczKxIn+IFX-V0IgB)oo@YxcM9XP=@;I> z)3OC9y-7@Gf6MCwOUo7z`|95Fa!jv&%WKd0bo%bMP?v&|tKB=WOJ~31)nnW_{nR^N zYj%iBZ%kkKj#qxV_IqA_#?RBO-}B0Xlemn)o9XfIc_%^R{ERikO2H4jrZUhL)P@5L z;GhFngSVQ%movYap7en?mT~R$10PVDP$xiYLB%d4OY?u^b%G@B(2uGb~)L8H&SzKqYOH++U?vMn~C^e8)> z`wMS1!$De z##;i(X}*jmiaR9kUcKYid;PEcDpS<4u zTVAz5FS}#YXZ*rDJ#j0qi1-IyGo~NBp!PXv%aJ3z!_fVc*BIm;&>FM}d$L zHS%Wq&7Zt6Olz5^2may}neP3IR}I=<;4x!b!Kc9HxPlMlaai0Unb7zjTE{H-1^n0n&K^q*H;-@dO{Z8N3eEx(WOZZU)!<=5=CRG<`pW_v$yVE93s@ z27kZ}iTFRfYZ;$T=lu(Bz+Vvn`*C{VUtUqhsngs4f~RWN{{;`?yns-O|9H(9Z%>c- z$J^oqUUvna&_oRRLl>KAF#Qk(&*nk;oUnU*VKV}teY@ZV7@&O;pn2`n(>4C{YC_LU zp94Bs5Ihn*gC8^)!0ISw#emY26^Bk_!wznjfR4(6&g&Cra!_D#tcM&hb3-D_kpbLs z1#P~#Ai)D3)t7|s#{!+HAORXA01XK;Dln-+2lTiVxIi~Dz{dwcy>7^`5om?p^soPU zbs$5R;9-X7=>h9_4LCt(?}6@21|P#DHnp0Mm+|z}PCf;wr?!Abph4pfVoCAlallrL@L7bp*6mS%g5J6la z@Ccf&z`_SQmeP-f4>Zo&&cbIW0UEql0G;n{&J3Qg0rkg0vhb-gzL{?B#OEG@ zvYP{R_7d#!4p4A`Vhl702{}*`Hf#xU>I5<9u13&k6m*mtI@$^ulH>|RxNScxpS}lZ zj0e1u0WsGH8rlP|&SHZmUvS=nkKTa>oj^k~kP*KH;PeSGe7Y|iA82qnoQ=<&>4xa^ z1#Eml4&a@Dme4~uK^X%yS7T+x06XXsw8H{);yie3HGE_bv>OzZpgxFBH)7{gV)`OF zJ&c`CiSg|8N_IZb?!blYd@936f+|33JH%Wm8Il-G^phua2N3%c$5crTb@XRJC zJ%Y^6GGl^YExvkBlYpZ<^fZJYVv5Y5XlW1!E&p}gFujd~Pm*!L^aUJz(xCO1dpY>5 zK*#6(@%G5Cty+0xv&&Aq2a+0lb?6q!6)E2eiNfe0`$hkylLuj=Ip5q~NtW z;Dv7!#1#b;I2@VlvlLml9qkoCGh3XF0)`RpEL~$ z4)B5((5_O*ePQ73g&=jHWrdK@*al&U^Ti#n-D?tX1YP7XeL5GPGU(tk1$NLhEbcKu z_(UIQHJ^k6mm4p*q5vgy$c<&}@aeJ*plJmr=x8U{PS6p4N}%|^2fG%Smq}qh^nki% zrRkR3e9EGrofM23Oo(`JWEQwTy^x#FnDNo{rQCcPQlN!{phyCpRII_I1Bxr~Sd!!a z>Cd_OR3$*`qgcRkndQiWklj07g@-Q~cK!jrvtrR#ih`zx;Y)Po!8>HN*uYDhK$Rst z7i5_+fz$d7!7N8@(2@txMEwu3>5RO5@;ELrW)$X?oL&&k%fjIZI`xfR;L-FbUOrVN zPzeKCDFZsRcmkUOud9NHqkW;Hy;~7z`I0Wf7xC!}dHHm5eu(1FIdJzhoCMztmkT~e zyp0u`SS$;g83!x96rO9_O9`Gf=!^M%k*pKd11r)vtHkq4bTi@fBW*5UtO zm`_v*Qr8fO1@Y;=B7A)E&`OR!3vEFM6DaTEjfD@O&}2gjP0(Tk&@wY|a$=zoTpcVB zS8O6Z7FxqAenK6M|1(3ETcp9u5NaBPIxoiOtp;xY!qzsJKwIdbTO2^kWFbbf37nqpAkHUe3ERgq z1H8u#wC)ZXM4Ee9)vGAx7SPh!<1J^U4^aIMB zpmikhl}T*i1*@P|6R1%J*?I_CsjvpT%mX|n2$F#GUBGj$0#m0eOYkZ2Kvpe*3|t^S zJy3!V`P5k7>4IrI#`T~(-$6|g(7~~w#+8W`1GtR>;)B+AfcCW@A0aRY);fkX7eE&w z2}19&0@cnp#6Z_Yf$L~c#SLB?uD}5giw<$n0+$|}4O|?7%5zBV4p9Qy%fTVA4!m$+1;_;;1&}a@D1#`tKK;5BAKHo7T+n0eVRy@N zLZ;ur3!y-!fLqp_7Bv!wxasTg>dF}P^}TGPr0*)#{b<^D6|5M*8)U(S>U4ftJ|)PR z#vs1fbZc2Y>3UETAC!~y8Nr*r!DV~{Xl4mgAb=J>L0YxoP2XVY3!hFz$>KYGeNf&f(9kBAnQv(iO%stFJxUQxKZ=~ zx@`UhQlki358_@?Ct(hfb7C=PQc+-WnqL2iTV%SIJRg55^u)Ix;8kc??n(zQZGi*? z$R~&+Fdl%Hc%p0$LIv{ikd=B#Q+ron5SYefp!Xm)AbbazH#Uwa}&g-$A|NZFC+$f^N3D=qr?YVh{mqW=Pm{g zdQfK^R3}1e9S(uh(^HiB6zV~Bq9bU5E<0$IzQA74wT7Uw0#vlK3vA|w9dQlno`aGH zXfp_;xJO+F3|{pCS`($jqQK<%fkA--REn`chV4KlH6&0$N2jqUfU;RT_^byx@OTEO zyn?OjfmzN9T3Iw*QH4*N@%D6I6+X*cl;vEY^aXMYsDJ_04e((MNEHfgLn?tv4``1M zoAVLMz+0!Sg@hL#+1MnECJ2*VDQ5+7j1F_VO*tkJ;DQe(x2p|XC z^jvj5P7&~$cCahlK;a11Fuh5QmPNfdUAc z_E46NsXBtpgAclbt$?Hj3FwBY6aS_PO#i6EBR}0vgHKlW26#<8xPk!9tU=p!$cqE} zHNb;qGd1`eML;3X0UCZsKHuw|2A?G3%jq1Ne7f}uMXVVYh&wVUvVn>K#R{_6O^dLK!L_0uz>{RW;zMSD+1i>^(g8AUO^>_8{wMm2BaTffodjBmzngU<0QIdUHul zFVN=WV!SXtb~m3SmknIc^m*ERmSHGa1Y#2+i$L=>sM!MEm;ox0p=%r`fVN(MifK^N zox!gJ+K>WUhIm0@x~>kN4CDIgUOIeoE}$?1Z(C51a0J~-0$Q5|UdIg2f#5u%fSmoo z*;|1{U@<2sk|6~jmo>ueXLb0@AcrwNU;vF%{t%rmpv$Mh_;b3YE}tD^+w=-uJ|+Dh zOrSkb3QiiJQ+EZ{!tTQ01vR5VohU{Hc1I3aBl(Be^pm=LDvUp-ztiQD(*U^%G6up0 z8uDOPU_;+t#R=J7WunKYP5LGa(di`yd;(mcT~*K{%XjPXsW5g=|22nKcKTmEc&8iG zTZFgZK+O!$mOao8Afrn}OK@lF|={<&gl8kevFEixR!4W3Y zjQDg(PZT24^NjeU7`vx;8iCWoIwL-n>G$UGNg&E=Jte%Y8$ zhS-Z+LANSc-em?A?h*>z3S0sPpe6Xw;Z}k@3&>s_kQoLbGeFe|=~@}@PJd~_XU=$g zx}qsxj1Z_iW=B2dvfq@?3v$^5s5dS;{jn*Z2IJD{JZ5~xOg|*1JDTx{fc9pBI;;(1 z(>Jj4ii5V$gC^J@eJn_h`5_A09Lp|ne)>c+zFcuo3B>9M8VG>rZ_qy2>GCVN#HZ_+ z^9h0u5w$nx(=_-uRlxBcXc9s}U?;fc|3VbJb(ckfBMVe8gUd)zzZ`T?gyVx*(`T6T zDO&$#Tdu?-aF0!i8?u{<)p5hWsRH0xAn+Ihn*xs;Xq;Su2Qha9I)i+}zp2x|nDeO{ zLal5D2BV$;`Ja*Jy}fL~WAn5D1^ z)R{(i2`HSvPMF?j!DpuhI;Mru5wSjkRiE(-#DlD$+U0|&8Pf&Oas3m-r+>5HQ+E6L zsY$?55gHUTKwF1d6*v@lz%B#@1$aNZIdg}Y;|`FAc@*X|Eq6T60P!qnzMw-aOQ2Bs=u_xnS_kf(S)i20s=%(0 zDbOy&8%j+>`@Sn;WueGqeGK-eh-I*kf^P7-LEid|qAI0kzl&IWt11AIH> z^d(k&dW@T=U$)}Y6O-envDI^7hChi z*mi<08rKv+iKjn;O5CozjE?X6rwJ%PJj5ggx&UeyC^7B%H&sA^OWJYIzp2x0Z1~(k z2gb`=@hP(%0Lkv2zRrfvAhs8@-r2F?07IcGF9XOIkmdonng(6T37UQ4fX)Is?ta$< zx-tUp2FD{HD_HdzL0jcP2?k^Ycvrast0vPFvFX;fe3t5f^|8Mq}W0G)CMub7y=F_ll5@$~eI4tx?WNC6;`rNBXOYZxfo zgEzB-8T4|4Y|XdDD%!wsmafNZ#d zje|gXsGyP_)Rv!a=)xxl8UzV+;ggUAO@V?3^g!JU(3y$g?MKWL#HKg7@M$pKp1#_J zPu~laCvdHXfSvq|XElT)gFrV@qj|cuD<3CP&)66-QVJTh2RHv=ra_VwsA~@zy8!Jn zgp8j+24}!SA4=e%3vj8mK@c>Q^g$5R>w)yLpaY?N;6Wr%cr5`PXTb*U)22pX+=)Z{u6=q zEQ)MQ4ho!(@`a8FZ~l=0O?`m2)xv5%P#l6*WlT4B=ToTv4ytoNWdS4*K$1wuqOkEo zw+ch=8Uxi};IlbF$Dn}%4516W5ehna)(W1sxdYv73*O=cS}+6B4c+w)9=)5-WIp|x zJD(im)ahT{`4lA=h-W#XjrW66;{>tk`W}3upoJiA9^kZ?@4;tD!GO|XyK7C)pm`P)ZHNtJ;Kdo>lT|<$xq-$x8$crkpfk-x zz|%jV(G7Ni)6=hb@~LP*#@hwJiO{hDeBj6o#0|Be@R=ZP&iq4kx`G#|(?d?o@b_%IXX#v*tH9cY(0s52-I3J_3A1nts<9Jvp&^TzZ7Z$9yCkacJ~=pnX3 zZT#>a+f9U>;6Bg-am6l-30KgNK4c99VgMVw1_HW)p52E}2y{1uG%sZB#&mNZK2656 z(-VF8su=f7zvIJaEd#mnXaQ)Y6{t@RY72u>Bj_x1=qaKezI^9Y_56Bp(^ufVpP+FmB`(lP zEG2FQ(6#^tR!7hd(;P<*_zkn5V_g+;90d>pU1C`Zb&gC~x(xLURt%tGB?r6!Zvm*X zs?%p+ux143ThNL$3D7h&D6GJHNf&@G8TcZh$OFkU;CW)uLAa0`m5+iO_Ml7ZL8m+E zGJFzasaIeHoq+_;!Cdg`;X$WA)I*X#`0zS*1#M6=Tp$jbDys$6za3)M3=9g|kSw+W za>ObVNC3PrZv$MQ){zNRoOFQ~9YQ?BX~qO@(Jp{Z>G3!+7g{m2NPrqfpjCO`I+r^h z)Vum2CU6XV7Tq6FR)rOe+>ZYl3qjR>wgRZ<1|H#KF=JW+Dpx=!%gq5XSj?EFfN0Q^ zkQitQ8G{na8X-`h)RFGllns=j*5+q5DBv0jNB)C5`T4^Y>KwhlqpnaGFn zX)vCi?h(c($9Q&ndKjM;AGCb{Jq&jG#M3;A(+`C4Nq{;CbLaEHZ?*)laRay9NUcFc zK<9PEhx19xb%-O5uLSk-CxB;5AT2mYMnoMy{rxsR*6C~gxh2@aBYHFV;T1ZlR037# zeBgFA=;*+8(|IF66}mXa3Mz;dP~)#*ttfC;Onn0NMwN|7)u-{O+OROCj(mO zo8_o$#Q;7p95g+~slb-ysHnh}4I3CeA)Ez1$_soFFQ_{N&#<7A(7;DqL$ae-mLn^u zcmlNs!KcB2j^Tx?xgepy=_mn{2Oko7gD*?UkqIUQR)EBt-WbEDhIX~Z%W_@?$ZRyI zpt=B>0|U<)fvPajs1>Lpg5P?%2DH!>>3lU-$mSI2K-&f3EXSj(TS2?`p(Pb$!1#g$ zXpseIDDH)DmgBAIjCun;2HIerA00l$hE$qe`k_lvU{1RNnHTMTm{Xki=7{SQDrf(Ig5j`zQ|3pg^t3O^)6 z;OXT-$8?w>sAfRZPnP5K>H2Yes{CMY!(;XylDFZJ`w(OnD;C?}k&WBi{2;gUXE`36 z)*;|1fyE41f^a-OvjOI(2vjG7ZX|F#Ad-cw1XaZeP_&&8&T`xbih2bkYc!Z{NI;GR zzaXK=GQGfvS8{q5o@ z!yH)O8npV36;#b5UH$+XGyp9z1CLD#fi_w~FW1m317&dz$hsOtCjfr4D0rqBG&>0L z%LDQ06EE>7Oh3@T#lm=Z`icZT(B8EB34HMhZ@_(YeMb1qv7{9Pcz+Bv_r+);y2<+! z`OGvx1tMtA0(jpKc=HtON{S_*C551-D|nuCx@;1kWGJLwMMbYV$fl6 zlfV_3IB0DJXno3bHU-2Y7$ulO7SJLMNSOhe<>e5V&NhACYd%>K4YzdRegl#ogEnjP9Y6oOfN_Q50X};pxVDT zg-6Zi2xOZrM_u=x!~24plI9z>b8RyI&2UDFOCF{q9||*KtdTd1_v5@14jZV zgTnh1pktE2i+m@5Hdun!k|}UN2N2o7V>h6d^B+(zgA=sy8PdyOb6ms10b4sc-7%d{ z9%(WfG;ntwbZn>mbou$*te|C*>}1TrDuKoYLG?6fVjVO9=mSlp@p%9TN<4YBXEZJld=-~v701JR7)~&~|jt zh#jc(5{2#%0gY8d){TQ401CASV$<^r_@tSph)?e+;FA}dAP!m{#h}0i8dm`|gh1WG zbJGtN@VQF803Shi1++ySyioW8zaprI%Pw$cxK+`Lr0t$4G5-33kJe}TH$fpLrbV-wWgNWjM=#h7zz6*;2G_V+~7(mDRfi9O+ z;sEb>1r73m_nfdeswi*>%m<&M2EOM7ykPYQ=)@y<`3FjEppkmVlMDh);5i8JE_{%; zK+97Y6_}>074h*&fhW5_Q=aF+(fWfAv=Rb*#NKqjB0g2_nUK@zz*pnc74caz-k!dr z2t4`t5khGd^SLnIo}OO}7F+?L9v1WYG5(ltP{J204qAQy+6f9CF5qzF$X4W4;1+0} z-krmxGW|pepAY{PP$vl7Q~))xC8jHv@-?unW>%08crkrtDPIWV=js1S`7{}SOz)}0 zvaZP>ici*=#g!M7#7J7%qyXOc3m#AeHFBm)R`Dq_c2Bph;*;bAjS{nh27#x?SMfIpla$@PbHAGbTct5frA&Rq(MZAlC@sBl9*0 zW;yD?_H{lGpAO%WAOfivJ_sW1B3m)tP>Ne>`lJdz>G}oYpd`Wy+TRQwy##e*v6{XT zd3sVM;e-MzEvS@G6hH^Bl9WQiCroHY z>d%6f#9&Jyppi^aq6BTj1@)C@h-5iV0qInMr4aD!E+U0Ym#gLzBPV^RvqSO$);NUk z{3SAle5)oUg*@qR7I4(YmO?hyIrd`cuNd*k)hU}8|>0G+f2-wgyBK4Z6H_yIZ$ zfWZuMc{8}?1kbP|H_1RpoTKc2nVwJ!*#iXG?gBCalHovw3sEhxe@j~g92F3u1}-WP zEiw6%d=dn?z^7z54HlD6H2vITt1^?XWMmB&i<$N@KO9Njh zXsQtu6)!}muj}L!2OYzX7^egkV34U;$nw{XA9)lcK&lsjhw>YQU|YmN0~*ucuj3Mr z2DK+Zkp)V1kkkemmD>TDXyi0wIsj^Y91zWNQ~))k9YKd1vO4Y%MGPJ95H({u0lJ15 zH1TvoGz&D;32GUFZ)yfz6i^S^_~QubV6lR)kAT-DFT|91K&7E3^8+z>=?b272bHc! z&S5iS0y~Ed3u9O{m>`Z+V08pJ@H0pwytV>&5@(1j zP678n%on8$9{x~b0ZmFc3W7S2ERG!RplgyHLAR}f4h32`eMvK)7UPuZ=bQPo8GEPy zZswaI`Ib$Qg&8!F!Q%#5!7QAmz@xw}uz&iR7CuSFNz;$D@I^2#oG#zWC#4TsO#m85 zIU$lI@Pk!}#gPX-t*F4F$;1L$Rsd>gh=5vwKSZZzwDQTbf;QnEpWf5TCjnZywyc#; zPO3#5G=-?k&>*g81gehzh$%*c=pSO!@3r!2gO26kZsSuD_#&#rG~=V`y6t=l^?mG0 zp!17BslX95JO^oxgPPMU3j6|Bz(aL6M3s1Wc|hwNuZV(<)Ig{K9bh4myA}G3J)pz}l71lq8E67s39c`uBmmk92_9Ec0F6aW04tQMFDh+l^ZV$H<+Qo0vX-{?K6eDQ3-S>5~Rze z&v*yq20oBcH^iVDRUAKvfUesGClE(oP|{#U5#nbkG)q z_0t18`9er4c^-E1sfge#b?UK{Iy`1f8$hKF4X_w@Ii5cZVBWrR&Y%15Xf@e32GI>y$jkE4q3Paas@1CnZf-H@Qplh2kimrlY+G- z!G{mc5K|NY<;e+Riu^jD_7r4CKlUvA1(b!kK*~ReO)u}|Qv;1t&F|$C)q(D{6<6Y6 zaZq4a;8zfU?iK(k2Hoju#sq6~h)=&bolAK7=UzU4-n-0-JfLX+@CuXZ{(XF&j2ouU z?Bk1K+%Wx1AD=Gc+38CCd=cRO38*FTfj>)N0=NWNB0jyZpU;ICG(-WHnSQ^YPnzkC z`1A);`6PHn{COFq9Bn`@cpyGqaRQ$zP(uK8PW6fxEdq|9 zbE+dJ@u@K`oZc{rPl@B~dg%Ght0wVzGfvWzhY8@A0xgtK0u2uE2%MeHHkHpw z^@A8_&_O^^RzU-_n+mkJ6?7^gI3A&a^+bGn?o>WEUQl}#{ts^B~M;kZLif~p1UeL{?pv{6ppdmK!5Q@O`>Dtryl0g9o>d`-%K5ZH} z0C!E}ivH14>k&O6Y^w^o=w5q&y)Nx(O!)vIG`_l}!&3!=xY!9>tvgW(J?HJ<^#o;9(sl&}kQ3fdoIZCJp9JHB>2vRK%Sa;nF`!Zm-mqOEKK=D9K6&B?4K99Z z6mUGifau+Thuc7-1`2GD=|RM1BQ{7&6tS)myl3_T_!t8=$T0?BN=9LNwJaCsblu-P zoT7J`l{mmHBv)QhP~w0LtZtYMURQr_Hh2_Ed=8)YbUtQ2?s`^76X=R{*cNzD#RVSV zgl?3ykxmrqp{dBrgFMoUmyhU{o(ax`=Vxof(E zF0az`nz`UX+qSuU#wOtLb9^^rgHt?c_zyIv$YIUM!XpY@xC1)HgCBZ2A80+l*mQnb zKC$T@A-n?9gXi&?FrJ>?F^^A%@$B@a^Z4`_A5CAkl24gwhB$axs3N#i1G>`|v__Z{ zy0z(n2&i-cHQpwOPdA*;r!Ed|jVZA?a=9z8IkLEe7d1LI@Po||2L&-`l;8`ft;B8y zUU2DnL1H>+eUSVQ@Lka0BV`^yTCSk39U}FvTf!$M2)Qu}w6lrT@r7`fz=i1>7x77R zK~Agz%?wOeSimPL0IoDa9dt;Ca{l!H+xTSNu?&BK7MHvLbywLyi!H$Ip9YaE$L>q$ z_hlihyg0pnDW9~$Dv%O*H4g5Iy%1NN4NfT!#1-dE-?fxaUJg>VF5p*U107?*qA-V1 zVK$?H0k;B&f`q`~>52>a^tm7z03Xx zV`2a;4&y*N!R!VkkbS{3VJv1$JE7ajdx%!hoY2z)!_bp0iKa;PEH1D#UUKL2KgVpFBKF-kRzc$xe5|Qa-CR{_QN`DiH@yy*CcFt~WA2h9wFiibOV3gGp<-~~F6 z;uloJKvt;S;LC!h+$)ex8er#KkbvX_&^V+c=*ahxj2EW=Th1rT*gail1)mKs zxYz>KOQ2$Fdg=;3FUFPAH>}{3X1qB4%nCkfvHknOcd$Sgc`?AYA^%;$r^0x2y3$HM zO(F+Mb!R}weP$xYeVD;F)j>)C5D6M{f|dg7R`QiGKANt&iqDAg$8>@9d}11)c!4Y{ z1P|BYF1P*G^N9&cgA+DrR0ApR6IpHxVV2v|FRbO0kiC4iL%XQASD>N zd?7f^JP=o0G~HnxpS&V^DZPkMVIjDbW(SqhOguc(CvM==ffv+^7{LX#9yqq~7Ss!2 z$(>!`?)1bpdUhh6lqENHB zNNEMl$Dn(FvH5t%dfYyi-3sy}yax>`^1w&rf*TUh^l}lT1S7pHg$9G-GH`lfTrjlGTyTkyU}sQNGZT!wq!P zHML>od}?Dd5{nI6<8If-`mJ109`NyYHfqdgXtR!ctxkL zf6mQCaY-o*+1>?O#lZ?1byi{%02iAQY|uNAWmfPRgAUZ>L@PkwZsPNj{RAp9#gLl< zaDxOOr7Ba`f$4>t`Ggs}r-KX93DZ|?Cb}S<&bft8C=7N;0;?nF#70o{&jDUt#R^(t zum*GzmjJXY2|KM4F=Tu}2y_7-xW@?YOlAqZ;{x|4M5h;S;j?8tJbnEZK2`3+;24JV ze(rAp_kMV{@+B~yo}RZA>A1@qBA_V{@N!*9lNHoNM;vzv+OmPz-UQl%IsNEXJ}t%{ z(?4wG)0sZUoR^CgvP^tq0k1sxu;JYzjAAPa0jjcU-kUhrx! zP%9C%)yV){1AxW^AlrIin@DbmfkrAoryYSe^iMy(jW5LqtQ)i=3$hanr2oVH4gp64 z%J9v8?=zdxgP(lH%tb_FV=76sU z1vQR!8D@yV`g{|_%$Z?BdkQQ96Q?`x;Im+SG`(gAUm)X#>F0Lv>BfT=@IfY!SQIz} z{((m-&=>oH&q@YOoI=hi2XD1e5K~|gxCzel@I}9nOWq+0K@rR%aD95zPF#mwazk&Q z1Rbvd+NA_4??8)sK?_KpPT#eYPf7%m5FzCYWEJrR(djRC^2uo}o+f~_78uk50}Z$^ zIU0hN27$-^r-0X>Oc0-Lu#3-L2;6!BkKKTlvWaF1Or8F4C!g5#>AU#E8E;QtzYCmb z@9yG5yJi$L3J59bE=Wwb+Rdi~+ADTBY-?2F#V$~uSh+p_<|V+8FK?IbOoPc?s)cjlYpa& zz;#YgRO>Us&WqAux*!2s;{ZB854xQeG!G2gP750HgAEse$B6hrIp7CuWi?0{IC~5H z<%FEDH=SoMpREWad4bzd&;!XJ2T*ZwB79S~m#^9%JhBYF_5m~t20Dcbe5ezsbHoW= z{pz?9rNrrTmUjq0$!&Cs!T!tgen9Lbb+pyaGU`;d0rcO@;vMaFHoVV4Q|wdSL{H} z#{}PN3wA3gJ+OioV1afb3e07jF8G;SWV-%-K0(mw+xz*{8E;R|+|L)7iW1Gn$kB`v zP#}kK5F1cPHw9-YfMR$00&gxc3uu&s>NjwL5kL()&>-4;CdWTJL1Rf^ufW`Hu$NCn z626iZG{iH5KMOU!*%9%*`v7000&J-H4Cw4xP{@L2y}(V76Z}e?0%xb29OTPnT|7;| z@!#}C2l?C`4uH-LQQ(Bk2eMl+bRah*l&lzTK*w7^I|@Jv^Z zw`12IJ&(8+g>42pWwj~?RFsGk6ub>sm}7IO)J+5B0G zpanyW*@_%IjNG7*;@ zDi}dqF+c?)B1phDEU?1-It4r{tpS>Cxqg^0%o03;#|}Mx7&I&a$upqhh!ecz@PKHR zz$NgQI{2Ceb_HHgkbMxFo_2&!L83!E3!M88@Pj4_cm(c(7qWMVPoH;$PulE+XqFPc z0-FN2z$DOGHeT>u3p@DDm_W%0G`$Rw+yb(RC(E%OWO9et^!G>jY(R(A=pN;p2~Ak1 zkMe0SPM-edD4#py-03#Q_@wzk$M}GD)qo~hIRqX}Pdmo<+X+&gJrGc01E2pU4_WQ$ z$OPV60^YfKL%H-x)Pp24K4*HNGn z4U&vO*Fiw81A*@R04-F4FX#ZLCeVx?R^w;RZx#UAkqbM(7iC?K_;k>^9(G92a>n$+ zEItvb!%RG!u$4UG$SZloi8{De7~INa10`k9=1(yNE`bfxAD-k3V*1B6-SiZnp2-DJ zOOw%x0o3AD5HVu{myev#$qUee9FY79c<6%;40$?z`YAqrBhV5IR>u!~u)!K|#J%8y zuDoEhVrYTYW;ej6Ec_6i{^Jy1t;hz@C>^K;3t8_4n(CcDz4J6*J<|@+>0D>{^cfdV zw>rb8!MJ#O@)sbUH2@XDo8ZsET1al)ag}c`LyL1!|!fj z<5tj9WZ?m4dr;d2;^!l0`GOc1PZvMOmn8ve1A!_y&@uyd1#W0|_#irc<~hEY1khe0 zP;GMuT3&$j9uKrpB#e{?L4gWx6oJBUY121R-6H-i1 z*SW}7%(!9tf{T2hd;5-Gv)8smoT(=PKVGBGwx z-*J_1JJa8((+jWhsWHx+KI0mnE91=R_pb46W1KmC>UBO<#+lQ1U+2?joI3sWbv|Xr zozwYm@R>4Bo$d;vzD%#a!Dq(!W%{NYeEJ-)+I{-V8+_(`FdiG|ZoeJV-{0U9o$h>- z&ysQH^xB(z=8RvaZ@tN368Oi#SUr-P82dW&y2>aU<4nCs51T9ZN7A-xh&J|@9>F(=!iRf?To$CAKc*+H=75YNZ|kly<-C(==L5^ z*xumIa$JA51#~$qbm)vjfd_OoEpL{%D%NNM_X!@+XeCm9lq7D@P z8d(Zl0*|JjzsqOJ_-H!oJ-!acN89`E@d+}5Lj68ph73q0ivmB31L(FncF+Z=5?M-; zpu@KWCQVm)z-J7~oskdt6hNu_0iQ0Ycoq0Eea!Dw_t=3UN+~=6Hi0RDkkN*MGn#F@4%YJ^_#&D;|RFIQbB6 z$M1&-JAQ!dP=5rrBlQtq7UR?D7as9VU~Jf)_?VBAk#YX?>?eGe85d8tf68aXxOjTe zQ@-_#i>E6+<1=MkJU!wWUlQZQ>ARotsW48R{@@v(G2`OtBG35@7#B}>ea^R&RpY)o~NC3wby)#jJ?x;yynwj`aX5K(i=Ws{zoj}l}Vr*`IsE{G)%91!zZo>)(bxTmzkT% zL4grex9BTKC~ykQV^?B?&Om}{QLz2f55ECt{P%D8WEl@k=Y7i;EPIw&fkA_b0X(k_ zx@2776&tq#lcPYE3IliibjJU3;JbKdzU5PAJUsp2TRvyd6`O^<98%L2-tlP)gJ;eh zh1_^SnjEqf7zO&L$GqcHV(gz@|Bg@6w4Ys(8B~8TfmRH#m@!2tFo7^l@$mGi@A>2z`=@Vx z&!@_GW%}*+eB~e)g?!*sV)@Q0&^x{A1D`VcVKzsWEP>4|`&iIi}nDO{@(T{xQ!tJ0?t9RpNP+)Mpz?h}LC~$Oo{6{`n z#?8||X0tg@Kk$(+j&c8V`A>Z388=UV|A|kAaoTjA&wN3QQ>Vv&=2K@p0FslQzUVXG zHWUR4)2Dsm1KoUi@(Z6TS$O1Wl5ww_&(QyTL zmIf08C@HXjHbQVHFbFJ|{^ga{5IFW)r5r%+v3E=1^ez%RKE1hwpT;e|%buC#O69!bU!A3X~y-_ zvq03+>1|B>;d~oF*Xy!6-eAsB5D-{8{WTN+G{%k7o0$1S7?)1J&di^~xM8|K8^7%I zL>B(}j2ovjvhqJbk=e(%aXKG6{}aZg(?7F=l_zlU?_%7zU7C|$hmm6wyCP`M$d>8; zT>P3$2cAu@;^GhE+sv-Wq`>IN;mD-GDsXiAJuZG7zAX?j2}fqIm;^V!E#Fp%7!Ook zGB>{#+tP>h>1Xz|AQ#k4M$jxVtK$wv(3PWmrYG_7D>3e!-pa@C%D83vX+C~4#!1te`1!Sj;L2GY zUqBVx@$<_w?wcOR&u*1rANG6XajSczC*^5WgJbk?9UX{C6=)zEOzZn{m(dze4;{j2os) z2=n_g?wOt@%RJ*Omp5%KQ7Miz_@)nhXlVq z(_hBvmJ*#7U$>$a>f#SfAQyu)vkAal43=VWTzRNjz>J9pWV$}%2PSJq z4h0s+A52-`g(wP81(9G(|hIlofwZyzaY==$#{6WlmdSsJc9aX?(Jh+l%c4R3MI6l2nkzZH%B{VKU$0PpW0LAX!={ptqF9O8l*i>!;sV;s-TZzbWy%GJc$Hqs;HhxMO;gGXE0B zZ`0LP`0b&^42uG*8Pg7S1#n!jgNm726@EY6NuawUSTvYUfQBL1L0JOS$P|F4J!SH?oK`9-n^Cn^~Um#PomO%w|kWS*9!cGMi7&^+)AIZDgOmA%R_T`UhQpdldQkaH(K@u+(IIu+~5N{8Jb=PM>JNzk%t;)alNK{2FZi z{0a;L=cgAM@_RB)n7-SP-;S|m`Y%I%d&bu3R!02ljC-di8S#fOE}y>Lh`*k@Rg{|( z)LzmTXqoP4%x})vI=#}EUs3N5BU8Nsvo3>!Bj_9oM^MIN)?gA4_|B@tq|2b<$mGV$ zCcVDof-6Mk7x15eL{-%1|UNT^-~sHp;nrnj5$ z2Q#fo6XkE@aLh&$x7YkvTu;NUFu={7D+e*_9X^|Nmz$1nt3K;#OdE zJi?L%Y6D3Kv@%0mLkdg+C#LIK@GCNHVVNFyMAS;IjU9BY6X*t2kZKkrrOW~+*r%^N zBC5t1KK;TGQDerF(^-y+Dlnd$u6k6|i|G{m^unW}Qq#LE`EA)|G&Tqbv`s&2$*(N) zg9$W~$Od%`F9T?gmE#qLECnWkGt+sj_#H&gqPY}QtDK*nXvJ^9be4VkfjRu1jK`+m zwc@uiI|ozA3%Z7q(ToXJY&%Yy3_e^Y4Q35!w2#Gc0#la2VbFc{#WkCG1U99pT`dt^R zCP;j~sDk)(gKk#t>3?ncr5K-0pHRsnGF``x-;m`$tH6ZmiFW+(NeoMxS(+lkR^%!qVpKs4E$vAQPPJ4b+?k%8m+8sf20T-wLwC8tWygA*@ zfnS1g@$`40{D#vz9QcJ87f+wu$Z~{uE3$e zB%;U-q68Fq6gU;Rz$39Kk$RCw|c7%*Iaq zfuL}*kKz}fKG%s~kZ&iuBM-Q|VN+lixHx@}6TdRwE_Mwj(5WCdKr>z!r@wXL_h7oo zKK(-!zc}OK>Hg0Ae!@4{m6*WZ1l3#|3Y-}Ncc*V~=9gydo_@xe-<9#kbRidhCG%Y~ zz=avOLAnOYVRdBS2DOnGK%v9HEeg(*j=O%e3pnyQuKLj~AkaQN+lAkP@!E8UIR0S1 z&0yCsID%bsb^5|MehtPu)Ad~WWkt5IYceyKGg~OII~rsuusd303EZ0=@5(R12aPe9 zrs#NnIT;59c1MS7M@@k{@HPSyw*tGPLYBa;>HA&z4H@rD|LDrE&$w;6q8q;&2h`*y8H+4GH|J)Bm~gb3il+PnUA%=V!b- zUCW(cgK_rsV0V61IfQkL;KG4PfmwmqkrC#${6v1~=^Neotr?e2f9uX~!94qa%k+zP z86~GTtY=J~zQlvyvHr#RCILkz9!qXVZbfFthY+3xwX2;JrMJZxE=WvnH~2+%roS6Aw_1#~0a>pDaqdETD>6GCeGisX=XR_I8F&oBRpWN#P-J#o_yH`b3Q@WU z!c&3Bz5WQ6Q-;XBf$)?da(xhU!wHjsa0 zA(CengLyI#WA5(<^Q0lX>s#AFDy1O2<6U5$B!u_w2AC%SG36@66mf1x0YzrV>5woI zgQ)D<3yyM8P`KAKJH9^z_LB%i>Go6Lz!m0p6jNk&oC4tqL8DD(fAuLL|9Cu3>hZ36bRD zb`(`)c031> zK=d&~5~1vJh@ni7U|Ts2tdtQF7MG|0@#eP$m1>O1;*!%teE3B{dDbvlT#B)CdYcb_ z6yx>j4}JJS>sfSt`6Z_F`tox~Y=M=;%-~{-mkC_k9qFE~>&vgexMRAXFTaH8VOAxG zG_+=BQ(y;e{Q-?#3xNB`Y~U`K5~CTD24s0Zv%vM~vwitB*ncpAPKtUq{gf}iBV+e; z9zTAC`UX(d$0(2nH56PmvO-Q*U~|;S5=ci#uz?P30SlgEM-m0K{UbmFwG3H~Z6MQ_ zkWFJy0PBFenwOE=kwK9eG~)Y!AxmZYYCnEe#%a?p`hi;_|NQt98Lv%G@aGR=JTiT= zKff;H(diHU`Q_!o#Xk7>0uLoN@YXue zAxq#G4_wT#UV#Z*+HoODx{?5XCB{3`rw8zBDO}@#DFw|dK+LZI?fYQJa{S96aA*3% z0Dd2)w!_o)1Nmk7Pl8f7Gw9Y34n-!%Wz(Yr`DFyo9BLJCWOO`vs8v9qU6gyt^z~0g zL1O@ccNxW||9L8^$2e)aV<)Q=U-xtY1xA5%1!hNsEER_7t%3a3jMt_g4CI$%oHG4E zAb%0##pw;(88w;aGEYCahfxYdU#ymMW1KtvVGzF}(+%F~dOH}^K=iylqOu_Ay?aE# z{5d-ql|kYMcQAs*@9$ug(t=iLr>A!cI0`uKoZcxQ&>;$|=x%{Txg5`dMW_D`23K?@ zA^hngpsL;R1Va|6X6FDAJOXp4uMgpuX52jebO^r{m#*Vo=l$*%J0H-jd!}e1Go-<7s~G zBaCBI;BahU%o4ai-7kz^RtDN!K~@23uRv6^hw&>hUZ1`yj9-!II`4ExM}GO~Z^HPw zpiLANNE1atkw<|`krUcP5eSDjQQSeX!r|D#m?iL#9nl`*0QJz|9=g#EZZFMcMkruZ zV1r~CsNU)G!ufU7r>*Y<9a)I1kVApXjOhf(N8n2|PB3N(9G?C$oIjcI#`Mq#{xHTz z)7M1s8!|qgelLPwUImospRg-%=rjIcRN~}i0^QRH9@cFDg|0xB0-wP0>57s3YNA(p zVXk3P-~j~~Q8B$3<(U>SPoE#o zFFGxX-lw_LEWk3%juu&tYx<^v4(ePu-7J=0O=tp0 zArrR(vm?71Q;Y($5V$Jzf|1RPmFsR3#asJ#r;TA{!W4u4Gngio-vZ=X-kPvo}}p2z{4`Ke`O zs#j)ke84b$Pa=Pi>!o z;+GU(%Avrl&&Z?11nPHyd)lCz_0CM+nZ)lQ{)7jVx;j`u*;aH`~vJy$?4W9{PNQmu}K+=KgVI9bqasb z^s8)A2t7+u_?5+1v7vG27yoP(;u#v zmz28=lLl4WkhwAiX3!uAqXL7#r|An*`Q<=^2?ta8r6mrtK?l=7J$2B~BXgl6gS)`H z>0eU$RYc%JZA_p6Bj`|@P8z=*{gUyX77^uKBR+KjKJ zYo_x%avqrkE>K_cOqb~ujn#g)trb+7z2t!`*ei79wekI=?i>{Tf&pOeViH7bvEf938R+UQc(-4p8Gmb?p?8JX%GSrnNa7wkp!t)!+qX7Q`kulNscON((k{)BW*L?Nxr zFTcPoXAwxhYT6xe%UKxGSls~W>Igxa>YE@=$4jKcrc^0-}!( z(m3t|nOV=o18s6Y>1hS^8+f=KXC4MOaJeB4={*bPaY5S9MnNDZ3^DKngvSI?`U28>V1&5$ z+Vs9`emBPR)30XpM>2L#*U#ZEW}DvKAmFGuz2Sy}C}a2ZeL4J#_GXsd=5Lhe% zx=M`+R5=7FfD?cMqrfX>fi)tab$VcN#2oQ4Hi4BQpd$hp)+#Wsby8?+0r8o*6%hR8 z)8z~J&AAqUm9gv>Shzi*fZv~yaq;vGh5Y&;H#{ulceX@v!xHRn*o@5u(_@SHeHmwN zUtPo>!pOK}S_#BZ!xD5umtr?`2UbJZmhk&3&jNdyW%<6{ATP4)=K-A=p};DzNCY%J z%c8(4uynd?DZd`b6TYSV?gDRk6qps5HJJrKgoMDd=}SuawLy`zZu;d?er>g5YyzuA z6hQU0F(ZQ_2S}BHB0CQ=x8r=!DcZII+6>%|^S7&%@qc1uoHt#(f?ttw*>=kc{sKnE zr_)ze@>eiUn!a%{zxZ^kDt;5jNz?PI_%pyIE|b8+>G!Jm{h{*HzVUNR_pRnvWt=p< zxSBr|uI7Fr7u>!|w`L^tpy#gK^VznOc5N%^ysP917sN zfWeH313W{SO}WJ=5S;I@vlzrtL0Y|dInlFz{ITpI-be<-hx+Yg3Q!q$N`;x09)k1Ah3RVeI37)^sQqZ zph9gfyqt&DjRGIpr)zLY$uKUOezA^US!@wp0eBotfgRjfnqJ2xr3h**F65Gun(kiD zuPF2dJnaJ>{bx{Mc4QJ*HT@lz6nFrems`q5WDzs8Xy#=Fx2-q?9`j7k<(5(dAKk+Y zuI8BqeokM&E#=9%tp(byp8kU1&#a)qDUTqv?@6TdN`)L^Gd0zz5+F;!0lGJex|hwT;Oc0!0fn#DNEoY z&-4krQW6~RK}tbgAp0hMQGqXvN-Snf2S6ikYziy_>!+tQ@heC|>ghX7N-Vt03e1iV zK$D3OhsMF+mLn)p*|+k0Fn*Zc(aNuY zl=7h#g4QO14#w)?m|iF-rJxS#Y4vi0no2WRp;54aHA{g3X6OV~h@o6<{9g6vK@B2s z6BKS5v*Q8QECpuA4%RGz-|$q=405I!(+N;&J;9dccon1(+-Qerbme6Nm4#rxD=-Ok zb3nrqI9Y6$?qjQk>8QAki`Ks1r6@C zGAJ-PZUyB9PzQgyb+>37C^ydT7Ik1+#y|aTx2Oz=|GQfh+$ojm5!D2VyZ4AHOkdo^ zuMRTzOc#GQmhHGGn>-BV<3H&maZ$Kf% zf#h0Un<>-zCxShrH<3SF z72z3#nLj{gg4R;(I}E8Nr>~mGKa+9kbiK*^9@Bd!@h^n1UqdLF>1I>-FEUP<&M}og zfw6IV=2U)F#-`~4)A$V;8>b(f%CEuLH2oDwumvp0+sp#GFjj%tnvsD!c{<|*DM==Q z=INQ!_*EI(z$zG9ryrcgFTuJ|l>0p6^u${na?}4z<3GwYgK0YV3l`JqKc@4Cil8h> z6Syd>z$kEjdg2U77CbbA-;43%bl#c#){Gygd(Pw!VEj0J)=Yjs)-Q~pI_>RDem_ty zvYo~6&iH0}>nwf~_KEDE)gmjV7yb~GoPKi_zbogTgI%C|wC6HU52%+>o9;WCUt4N5 zy8??bBa0Gy0Qi(aP@_cwv>i*}^z=!y`PG>>9BY|w5Xdhf%%#ZW*mm8i z-sb_$qL8C^@ppk6o*wPkuMbMZI6KDk`qXrWP zXtog4sAqN*$P(Bxeepbg2T`y-R&Gcc57oDI`j2`1ii}&QOU>u+W?Vjf*?fK##ud{~ z&*zua-p;PT44Plm&|m^pS{hjb+dI@$K}NrtH$w z=P%(;W?VO&c`3gs@C!JsG!7-?fTgiE-ofyQ}yE7`IN>Tg_i0dx8U0fAc7@ z@G^nMgE*AfK`m-VM@>gYfs@nsujW@^{5t)?YJLO8tSr zgAuf5_UrWhYxx}+w@znV$1l&gWxC=zei6nU)6LfL%V}=`yXgwE5(}@80yC&>q`)Zf z9c1WpSJ27sZ&cA_Qn(@$d?G60ZQd_~@q8p4n0-$LZ@DLVg z`5~jgrs)SZ@R!Q{MmU87$@>}c8gEiJcqqpG2rC^7FJr8y-rvhlPH?s!Q4Q7FP)1@}?D>ELPZnueFjPcL( zP!Mn4^vX^A+Kd~gFWtoNqXcnw2eT3{cxxMr0`GD~c2I|rgBP^AL`dM^bm7hXUW{9( z$8F}16@!HG8c^dIln+7c92o_6Oux99UygCh^bec)MZ_RsegvlE1QRIC|4x_M!Y{-4 zW4iekaL`9?0SA5Q7XCcOt<#@u;WuOaHC=iuI8@`d@@q35oZht+9ueSJ1=;rk6k6bj zxVe?zjPc)efo)(d!Q1#F8MjVfyA5p46NsStc76lKUDG4B^UE{tonEn>Uzu_H^f}x4 zWtjf+Oy9MgUz)LD`nB!+c8oiwi|*jh5ZeZ86!LXr*a1#? zzjpAuGVYr0u#>-%aohA=JNfNgU$ej(lPnIPa!23|xGw-cl!!qAw1^%$`y;TPLy5uB zS^=`&N1B_50hCuAPcaB|icX)PDX52RY?JoYajC-c<-VOHG{oVXAj60_DyGw~p58A`;4oZ*Ukr54ZCI(P^GCJCT zcFHgbyq_L=hhK5}_IN4b>CgA@2QzM+ZoQY^nsMv&^1b|8vU_nlK@8#q#p(C=@~1O4 zPIuqOugJJ(dgeZUE5@zUm+a%$WNe&%ZXdq_PcJzL zmOFTmKY;PybfH7w@+jsIzc1s~>8lR$`!nvG{_7BbiO7^`pkp>$cojfX5g>xav1NMG zVSXLP9n;qz=GSE0GX3UZemTab=|2vG%{M>7AIrFP`qU%fl>OicI4y}E1>2T#l;4f9 zdHQMy@5fPoC&nGqt&f3CNj=7|&e$})_ZWXDuB8K z#^A=wsKDqb0FehRY*S!%WXv*SQUGaY0yXa$1rAT2cZT1DasT$qXZS4`89z+tImhqE zxPE%{Ies6;#nV@u<5y%{JpI%;eow~r(?!nn``fOExeUBi71YE7^~snVH9(15Q~*+) z>43w40o($FNE?6(p|{f)oCnt%2hQ_LGoGA&=R9~y?dy4d6UH6WwJw13x&H-lWz=?o zKalb0^cx^*%XF=a{K1TCr`KKN-^I9Ry5%MQV8(gVdoS^qGp?V`dYM0gapUx~%lt-+ z2dB@x%r6t!!3%1|C~%lD`6xi=+CZ%c&`><1z;1i0?+U+^U;{6xj+8+Xw!FgcY6>lz8I_oLL9<{T;PPt+*tQ<1 zpaxS1qar7)K6Mln*fM?d6@F{My!E#vX&->>p(2)<{8&e_5IIo;qI|1HMj)48wnOJb2Vz0UuW@%VK8 z8~oxzh%jLU)n=>$$EHWz;MW#t<3%oN1=^=izQOM<-o`7%&#k~D(9WyCnB~~a2)dt^ zN#MZrk2m;L89z)HzsbLZam(~QH~Fm@_e}qBlV62#`*hh`{K}wu!08sh5@W;k)LZ=a zj0dMLy~VG|xMTYHTl@x$JEq;{4`oXM6TCFd0Oe9<&?-%MX}aY$e;cR_y~8ib z2rgTXgPKrx`F$7@k8@80f8OUXWr${WV|q)`5wPBvyQ9`ZXd zPM)6qkl&VZ^7NGt`7bk0p04+v-;Htdbj5dIl{}C6&FXJ4GqKh)*C{hNI%Fv^tALi# z8e}OlDllj=3n;RKmY3=%GJ$pufG~)wp~UJa;0qc;aAfuc1 z1x8aQ2GBS;_~IBQN0w|QmMl{SkPzsYbOnZN5U&MtI|hTJi~{J+J4H4H21f}nivu(P z=m|1ck!5<454(On8>mtOt;qnL1F682<*1P5D4@WUtpuGCRA2!OvM?$zfo2G~K^vW0 z71&!9*&P`a8JHcwy9<;U6`1@%Q-RE&73&Nj9SopbnHd-q*jt?#6c{ua7@TfjywE!9 z*8RrxRwo95$)Hhe4Umi6L4()|t%~dljEbNeIzjuzShAED967Qz89-y)42}X|78__b zS|Ce-4aFn{b_EWwfz#Rj*yZe5*S0#XKk@bG@ipzc7u16#KsIrJYyvg&ARQWqY!#5p zxDy!^7?|o67!Noy_^~)RE?6?%@hQKU@{(x+8cZO!C@?yHU@UZe!05)};J5-V?6_vh z^s1-)rHmJ*e|XC8&Uk6M#WVhi5|=^c2eT$K2PkQRiV)BaG)93d(;q(L7h}A-{l_!@ zn@rO;nu)tZIvC>915oPO~otY0EO-TD=5 z++AdPHzD%8d z|2w}eh?e`o|4!j8D>%a`Fbd3MQebdA!T_rEu7H>-AlB^ZIzRd4m8S73FhF-i9s$XH z04oFQ_ycC1o1XiV-&FApD`>GU_k9Z{xq3!WQ8IxwTZtW%gdvsp^y!Cx@~1J);GI5U zj*!T7`(OOo;yb4a=rS-^G4wDhu!DNw2?`tv%mOo~AN<9?S8OLZfrIw1u!D{%_yAfj zF=6NQDZlyS*g^ZSECd>+|NPBAm2uYe{y+SpT(fx<*!3CbFex!j-~X52oN?ClXMgz3 z8Rtxw`^zuMICr|mUw%isS-hYI6twzehpYsiz?da4j~BFvszi}VfnR~$@djvNl>)m4 zlYtT&h%!;)6qwH|@P7LCzx?)MU^4`uW^gEgPKDqUSTLREAHNCX!s(9x_#GH$O>g?g zufw=#`g#cO!$1B4#>LYU|MRb7pD_(|i7nXea#KwNDj8=@T_>QgzGRw!qrN}`GjzW! zXh}HexKa)U4o4Z#qH85)N2V-+57Su~1s;O@#wZZSz69*$2h$g_2zWBinm(0Dpg?3P zFKC?xa~9|}CJm+)%t|~0%ce^*3j{FEnx4fh;Lg5u8t87jhUxLF0-&(-V-fISTt0m^ zi-14ltm&^=1aiSDqy!);#AosHaDf(`{9w*f0AD$yAg#bDFnc;T8(2d$n?N~OgFZxq z*!1^o0`-iursuN@*sw2ycnV|}Ok%qShk!Dp$Y&PNnh=&OQ1EJi2pxeH+v_<6x>2PR zKvF6KE2hhF3v3Wr$*Um73%d3c>=1!D)9-N$fTH#Xw?Kd-I9fPC(E@faXl&UL9JSLE zc?1;MLGj0^BstxIPrw@zg_2OUpeW=~5EEE1{k({P-E<9JfkaR;wc``;6#*N{1X9Qe z3WN1ti($f@68k^ncs}UP!*=069ni8Yu$vK)w_c5>Vm+g_wwv1USJmDv5zy z1@*8P$R8Y_oss+sJPHyJ58F=vDkLDrw{V&O_*_&5P_!(VE-5Tv!?0SwH*EX#$QWXzA*=sDKw^!*n+>fjOWxn;vYSnn+JvKt*yf=rkGd zj&VIk#(D)tQ1)STWEFV7JzHErpHX;0TbqERg+K$dA`_1tsGja%nr^5gAS%-U8Z&BO z%5r?y(<+uz#3?WeOyvc4&p`waWUUdi;{v8EfyLANBn9+^etT{5(OB*@`992Qd2HH8Wf;IRdrV4;e6@i%wN}-FV`%4Mv3!MdNgqmsvGW7(+)D=MJXtFT4(< z5o)R#$kYzz>5j?*64RH<3YZvw``;npsD)&#DR{91+*k{cu{JPc8<;`S%qJ(HFT5Bj zLQFx%&S0KCQA$93db*r|sqv@AP60;$l}=j83S z$tch;olRaK+~j6kr+}jpk}<{#%;1&6FmpUW=J>$OSpYU?qP&1U$3KuxkU1yh1?(87 zPG?sT(B)VN64VfAm~NvWpsjcc#N$FT+z7M-4Yb6H*>MBdqz(lEeU9rOWgwIGD+q*} zTm*#|avCvIULFP0n3WS^N0r^uI$#MhGggm$n z0?7#pAahb+=3D@q!=ogiFZ>9k6B?fepn!h?4fs?g0aKGcP>R+>GFKloB8+5i2FTnT zn7I$Y=AHwYy9=ZfYOX%W+#k%~5=HO>Xsy5p<}AmSEv*8M#sUq~&6Ght0IAnNvPl;- zri)}#0m!Bjm`x2Vprmt9SwNrTIY=icBz`ChXmY%~(Eu)|rfaGQXmZS6-6G(qC(tlG zN<|>hb9ytxY$zLJ)lL<46w;_;3j_noBTmtK%e6SNH55@ z>KX#!W{*Hck{psrstU}G3y^%f0Bq6{xJeDHplIHrA)wFE49hsLK_+bg`5if7sz6uO zz%tGXut{s+CQSgFRG}%L&v6H&7v!e(ngW^}Z&ox2ILZn%On(64%{|d1;3z53FkMhf zKvVea@g@OBQAp*Z2nv@Qtl&f}a{;u7=K^b%<7SWwNr(yskctp`q z_-Fu_M>l{yx&`jh1~yQT#b^uY3(W`V1tl&;CLURk$up)W>IjHQPXI0Mn823hxc74d zq_|dO;*kLkR^q@({O4gB0w5DA)i}uz@YhaXu)!feJ81CLSq} zf)ii`f(Jkf4zOi8Zur$8;AkY!Fg;vHK$GM0zeWK^8-a%D9U$J1h9*ev+zH}MUfwL= zs4LJg{S}CJbWXE?qntp)bZK1yO^yjS8w4C>1RAFMfOrRgwFo#$2sBKu1@YcpZ2%qD z-7tL}h<9RN6GY{G5O3D{CWt8ldIFjpe;+l2eKXxrPe4<6$JZ9H9H`C12XcA`2PASE zKocYl99fP>CL&buf>g|as+a&$F@Yn?aVN-pP{pLk#KQwpv4Uf|puB*@^zV8CdS*SZ z+rj-Ac-(}u6zF6H6%aeXakmE^cMCW`aTl#Gpf9`tq}Kov^4ws35W9sofb8DD zk>&Wjp-sT?0fRup^dtHLo{XQT^BD*jn5_k^H3wy7STO(^q&xsxb_UI?2f%h7f!lci zY-fpqfWG2JOuY>75)7>Dh=G7U$5xOs9)X7GzYPSO7(Y+9GZc_!oH{+qP{2sByR%ck z5tQU$)`L!;IRdE#Cvbv%x7JWVUwJ)988cEr06JO=?j(r9|AqqkLR&!!LEceh;^6=V z!;9&KMgn4j4?x~}z?tRP1G)thlupu(1T;C`Eop&d<{2Q~6Hpp56=;}#62$AA*a=Br zzd*bfmsig1oS!PgOq^^ zrsF08F3Km`n*Y3AwGH$>E?*IEc9Fix9( z&q81?tDPYL7mU()ko`~3VH!A@r#;4Oetpq^3?sr)UlnB0LhAsmI zFR5e{cs1SLT0n{M_4FibfxV0`rYqP8_%TkMo^K;y%Q$8FS{s2Gj8mrnwiN*Fpi{IH zkel9RD^P$UG(lks_{6Ck=l~Iu22+K!B53&m3+T*FR)J~LFWL#jFwU5+XD^`0IAwc) zy?`te zpi^xGE>8dFBmlYyLCRSm6-Bq)^lKoY3)5{}1lnY_9|V`fP$NJ`1A?!Ef5Dg~aB=!Q z7XfL;)6;*s2rTD-o-}!3I-`fU*!2Cb0wR3pnVG<+tAK}au1|mHDxfG0IhKnHe7_-R z^*?meo&vkTqv^740-%F(EZqbQ7|&17aub-uxPAIxHvwbD1=9`P1$seOq_Ke}e?aHr z9G-sKT_BS2$MiT~Rz2U%-a<)+bO5J8t{bAt2B_J>JKtPA_$@G%}0t$>broRdh zaAABhT|ZD@zR*O_LTAvq+@MW%3XG0tc1?c}C;&RK$S_DChjHTcc|ii8lg>{D2}Ib! z&R=8zox{nY0A1Vnh*=8c22gWMiCcj~0Om!|5QV@aW<}6a0}g@p)8m2#JQ+VtUlAk{O>)7YPMtIoD8u2B!bK(~pM=*fKty&Kf3QAUPGZK95b4`2rJY z+!{R11B(6=i>DXH3rJ2+4-<$HTr^Dpw8bBE43DEomg9;=)31aH?BrVnA4g~Mi(#*@?khYNtte@}=ImQpDZtFAv=Y>iKf#dY zxT7C#40!Q-fH^a$tGl6p`ll!X9hea+(E>{tXH7pDEnvjBVEUhEf%}XXrr(JX=(PHM ztwX@^Is@Vic1T;A8InJlA(@r|w6I=-=>=$?CUjEH@yhi1u>v-X3#Q+R6`09*eR^4( zfGgvt>3iY?vLyfWg2qii8?8VinJl27SKwFnFCYmCG-zXa9$3PsF@u%K$Mv?Nhp9$D`FP- zGurVmv>6PM$y)(*@?~7xM*#r(5R>6fw@9zAj%t zit*y~llcPDj0dJa%@=TCoIYKvKtP%C{dB(qfhUY-ryCav7%+aBo>C~_Cj6cewqg`? z6Fi$Eqrjx;dkY1waL!=kR^V1(6PP)DR*`@{$-0I@st@btn`ftf6z`vRxSmk3Bt*DMp@V?00IqD;U5WK33>Knmm4 z>F3J?#F^R|r@tr@FkoCTU9w!Do$>DUh2;XtVk20Z0a>y4jL?M^;4?VEGck^P`lmmv6wp+F84bQ6;SD2rO#`cA3#d^H+V(hex>l8d zd?4hi$3K|T;3|_9bfonUMl+@cP~G1F-s`~X*uaz}Fb`~O4-=-bv#JE7B94xB1s|D00ck_ZS16YDZ+PhjnPGT_|)brqK3dv)Q)dG5qGpBE;7O>=* z3350{jzM7N^sm(dCbIA_1I<<|usU*NDKUU1yjT=KO5AD$vN&ckDL{BTY6LDKcoS;{ zg28utGAOWtE=PS=E1<`Cdb(_#fTZ+UW(Cldd(fLV!R==W$Xd#o(*x@S4B0xCv|)e&;qrIZZrwlF`k_+ z-Yj6qxPH24vw$(Jw2T;PIi9RN?AK`u~GUp)XS0B! zD7dm_*JO48RXbdutj+4UZ2J3V0nlPh!xjN~#`V(!TLca=ewi-ZDxlA}Y`Sx+Ksw{c z>8o1>>=?IBf7L2*hw+Ge)4ISaq`CxB7#B^i?*i-I&;{0g8Y1_!OCXk%-OU%&#Iro6$f!~we15Oe?>7breh z6d1ux*Xf&j1UeWWO}Fk9kOIXk)AU*00-CI#^EuB?KhZ6qF@1fnKrZ9%>9T#uhA}}5 zV^&~8F|4pppoQ`7^lyCvY9KBB0zr&>rWf=J*fYMKzM)^hm~rp)C;b9C{GhfQyWy{4w2Uf`BpO@#zf{1o9atPX91Lz#WuCEGG(pwmgJS6tHBRI(_0q zfj-8K(-kHO$jF^wgWfj^&T9}4fw%HADliG$ogOs_9HbK`3dl~MGf6;`aq{$IlLXWl zUrm2INdRw4^I|w5ZfdGwSboyH2XD! z4RXY^rwFVCU7IB-sytn1ssJzJ`RP_u1%5KFoNh8rz=-ku^z>;0^^A9? zKc6N5-qI{JU0@mGkLd@e3mCJXXI9``uEaLo&`n%)y1)#91&jx$Z=4}8AJnpA7C1jW zY^FdnWB>G9GX?Y+7fk1xC9oLOL16{27gOL6I6QsVECFMtdo0u6&k|5)d^=rywtzCz zRJQ3Gn+1iZ`_C4TWjs4QceX$}~eJpwBpQ z`i(gPb`rPvlmr!c92wl#)+h;q7WRYAJ!2MFK3#9FfSugT$sGdVgT54aq|KOaFoCwt zDzGVVI-X$45?C?4Yp#GSno!8>jg zIKf-mxCCxZpEplHg>mup!}A36<=gmSwJhkCd&du;12Z+4SQI$H`{$-l7o0D!5nP^0 zC~$%ra-eg*FU%KE;`nj52{euUb^5RQ0;Y_=ryDE~IL7#U`u7C_8jLHaD=ZYSU|cml zav?bXbS)H+W1TfaKw#zcwF?FIasOtOa;#Tm0X4R!N4=A2nEq{%z&!D@pcXjjL{~`h z2RhtQAWLB9^wo<66exY*fQ>%F0f1>neoB&l4Sz*;A0TJO#iV=AcAq)^uXod1lhP; zAeQmL^!v*Nq*)t4cY93#zg%E48%#f<|MEn=!_R|^gEuM-V7Iov~EFa&(3K84WNM4zF+_yp+12Tv=oZf z5o+|C>Hk*=gmW~$X#x!leVrb+S^%_qdg^Kc0}iM~Z>FDJEfCGI9;C!T;OlgQH3D+t zE$rX}gF&NepfhTrw!fL4x<(+D8I8R7%;X@|Gh@Qi1F8Sy|n^{98ed% znV!B@AeLhWNTspB*Xd{03aE(w0bK&nz?=m-KuLq?2$R4cMg{ii3)TyWF#eb>wNAjC z1vHE>{r!3Y<>?jc1m-Y4oG!XvAdT_v^qTbo7NC|XsD3}eJUvlfPHg(+_28E2yY&Js zPTkW%m-qf)&QjtMs8(PFttROJxx0fU%h5)l%JE=FtAOLw9nAs?9FEL|j!bS!Owvjm zj+~Bc3QW>UoS+fFEgJ+%#qNSmk>P-K(?Ex|u!H36HwvhTy#UGCAmlg{!1^jT3iva= znSOGkfF=7TAy6A;&-C*f1w^OIZ4yXeygR*qlYoO_E3*=)m(|9uBp~pENtYoIa+E3u zX#G!&f`Gu<=?^vuNb?~&4-AeM`loYl7SNMu1>Hf%?kJF@BnVmv1Db1B$Z~wrKiz+` zfGlJG^xVw?@{Bj8_ih%r02(3LB4EaNe)`lc0<%GbVeFt~r0fFS)2+7(NQtjyRs=1h z0j-SywSnN0Ia>w78GlbdvQ?l3RN!$4teoz*O+Yd1FzECWbk(5I7iMcl4p27^)Y64i zv>XcTppt+c*<5BGc2F^mZou@T+XQqN*H8bnO~71jJ80a9U6;WGv}%+Ol!FYE*aUts zDRJsDgo4IcI2AYqR!{feE}+4Y2W9yMQo?@AhvOm?jM#mEv{e$<_ef{tN1q zg7kwfJy|`yV26M_ijG-31XOe{f%a~42&`sS;CBRCYR$$j< zNC6$ViWGT9I|a-c*G|vcDPV$P%gUVsCXD;1-`go5V*=@63uN=LFtac)F>*72&Q0KO z1Rrh2$pbz`fy41K=)eU|9!73Q7DW!nyVLb{2}m*SpYFL!K$`LJ^weDfcA&vGP&T?S zy}?dcY`VZ+0dZy~f%DUE?*fkn#_tAo)S0F??G|XY=>FLOn%jZ4AVGOY0d#}w2F5G_ z*u8H|3gA}%21YZc10Z7$FoN!Vv)>~iF1rP?8y0-37pn#nNXZG1k`s(sj=QH9?-8iS zbc-b8`RQ7F1qv9ur_bIipuu=ydi-tyspkn(h+ov`Bc{Z|F}Kq}8)6{uGc0u6U^IYLL;83k@~aH9*|nqGBO0DOYXtfK;Z zh0ii8a4GPBMi7*^6}UhL)~%nObxc4<>M!WF6<$bdMG(|l0hb91ECMalHyjgaXZ$_g z;<$jTJfhjcD-AkK2%?HjfeW-0K%jN{oZ|v=i006t;{xW46Q}<=F5u3%YP!=2aD$=v zgn)+dUN&fhheLr2RJO4Qe3`!Pgg^)5;_2om1q>P6rcaz9DK@?Sq<{-3+{`mX6&Sxy ze|A#96~xs&B_Ih2Mz2!>3mB(Ne|<_IjB(0zr_%x*yr7XV@N!rMHi2o=ub&pkW1KbJ z?TkP(NayJ@kPg!KGXk=VebYtH3ivaAoSu4Cz>@Lp^!aB6Tp52%7r!82!gzkV&jkUw z=@#b%Qb8$x{y6~|#tYNmT@a9+e)F6_hRm6l9iVy~n(RTFTO~l%_5w!G2FBR)0@9LK zK`NvW^$chsCrJ9@^oi#Mq?taxoWAb7Kn99^%^<5TUVvHE&a~>~^m*-ql8jrXPrN7~ z&A4a!+KU3>j2EZBX&01cJT?8{MS*6vyUdC#JWSJVI|N;)&Ew=`ygPm8B>^kOh130P zg|(;4Ulvecd^g?UvVb(>l<6^-1q>M9Pw%}fAjP)vcZ+~P@AS1G1wW=wv=x_|{^l~c z_xks;0O*oqq_oNSeR|au0Tadr(+MO^#_!Y5T@_fscy@aJH32Ec_0zkq2}l_%WMgsw zZS2-j;slQgf|sFz4)=Fd05$#JvO#Y4fg~noflt$~Toce@{5<{tH32a(&^2D5YLiES zOJFmvBBuh60=K}H>Dt!?elk9tu6hHUsKRat)G$7sei_1JxhbH{_+`4mO#xX(*x2$- z0U^c{)2nU@l(0=8iH`o-y`L=eaG=!T4bM)Y}49jIXC(xGhj_ z@`_oB9dg8%D=!nb0*@nmAuprAJ^}DF5~Bhq=rk-PHU%z$V{A^$Z3-aP>*>{Z1ZHqN z1y3BTVVbTGC@wNx|E_>2==z|$0x^u&r!TrI5Xty-`k%XChwI)G03ERl9{-NJ2XW%}xS0@0vE!Es-pobk={hWi3y(y#&@bO;oSqehk)lZOHeXmOC^x9J=2 zgND7Qzql{3hV9lba0JhKARsFNjsZ4(MiwPzUIyq`zXF@UkLl+h2fG4^vEM^b!=E{`H}NIOF;0ypIGxLmD4B1%;=w$I944`Qy z{l@}Qj4P&lJr-zSygU8$V*w||AJh4s2pBV-pYHTTpan8GA~OB<6M=lmmmAPbQeXj1 zUp=dWO~jU zu=1sE1ZFe-nC|#iz?Sj+^!m2~MvP0gZ+a^r&4>`?c`pFE*vS69zy`)e(?7fy@E2Jm z2d^BH*Yx{oFT!M8><*@B9#uM^jb)Q=p#h$=7B9M-`Z=xL*QljEkqY{t|EpRTZqD zssgml`}_2pzXU89XH6IWEl|Sw=0lT!;{gVNpVKG&7SJGKLSg&s-vZj8lcL1`3TVlI zMq)r`xha9}3St)c&JJ#jFe|VM{NtM*`&U35l#0Mp#}Z~t3SdblP+7<<@MwDPUjZ4$ zU(;9p6_Dls&JG&W1a*W!qrbnVU;8Vd!gPUY`k%i7vP?G^rc3`5n8b8|X?oyxDS1u~ z#{*1R3fuyZreFUjAZL97bc*E!rYr>x(3pY(x4<4YP&`dwQse|J9_9p}(9YrbgAt?x zbiD>Q=wJ`MolIbMP5)GgY|%x8i1~hI6uAd zzkr5X2NP(4J7}dpWQKwRG~^7L%3}r{TFRlx{DaY)xnp{xh>)o614ht2k7i6eKo;y^ z%5vlss8RqOnf`z=ONmXO87h4MBz<72prCL)*f%GbvK$2ksvJT4**G+rS1>8@IsO0t z|37~iFPj2~0CwW7+^Z@RQe^ zc?F2(09`NwIyngJG8QD4^>1wvaOBK{)#KbSX9~1H=O93V3Dyoib_g5^j zU%`}R#spV?2$Ws~Vd_~?)H5kE^RP~zFh@{i`Uhq~71EN1@bm;0LD72R@+PAK2WV&l zHA8^1r~>3jElAq76{u1G?Pmd4B_*!Zsl1z-n=Djz)7;!cEJ$AyUd`XlR*L0d{y9ZyudVl9=o6t$Ko?h0*>4Q3#Ol7 z7gS(8J^dw!`ZAr1Lr|Xa>vSy+L0KWt02yd@7<8kI29pbDZaqtAZ~YV&N8)U_3uvmRoQw2G-i6{ffF2_`X~p8lK6H2}&?_PtOt(l(lVRRN!(v z!kDGRq`(QPsW~;6CNMcNW+^cXyoHp%pur(d&_Lk>(3T=jP%X*{I>$laKhyLhLV`Mq zGeHL&GYK@nS7)#(fCmEwK%?f2poMRO!h*U|^FYc#%lE)T5WEZuJW%<@=@G($W{mHq z_X`V33I1h5ENpn9A*jgs zcDk~Jpc2!6rs?hyf;x)-+Q8=vB0?E7p$A@G$O$_4Phj!%DH7mNJS`z8%eZg)O9??4 z?13pe-B?mkk8#%YBuPOv>3vMx3Y?%_HYyC$$LrU;ABX={iqND=11`~r4^K|~dLK4%r$q0rsHc#i16?~+1j!A(P z)RAD+V4A?F$PT&gkO|aTn8FAOYj)6b5iSK5f#&H_a)L7%o40R~6KrDS{J{h|KaxS< z>U4VrL1m_eOw+;l57a6MO4frLOAHE(0*9HUK-(}`z{whPpO2#qXdPn{GwgaI&?&b2 znL$Y(bnX$e1{04W3$ud)3urHDliHhU{(Oxs0cb_i7{J|1$_HA$c}xW zIRo$>sogA0T=h(K%G0xUvI|aEQxr5|JUl&GQBa-lCzBGpqkN$frvjtn8^-Ayx3e2g z_luAXoi3&%m_2>b4tDkFe|NEqPT#8}=*@U|JEyYXaYn``(=VzB1|SwVXsQb8GA^7R zt}3X=IB$BTs$i0Q4>;)9Kr4hmVF)@PRDsFyAZVeJL6*S$>AzG34H=(K*HIG$Exe3X z6I5h-@Ss6JpmBPOnxKK?B-orU_^25kP>+!#%aKvw{q(bHf|86graxB`3}yVi-Bw-D zo{{nK^jZzUI>96bX3$72g94M|6wn0D91SCA)}TZQbi4+G0*5st4`^PI)$s?zbU!UYJC1`- zn*@3t4jOF+Q z(hiz~Vbc+mlWGCo2gnM_TA+OD$dToE2joP4fj86bbOd8L+CZwU1insRtRtwy*gE}! zjv#1mhgnz95K?2XIzC{U-f&J3O<>hZq-5H`EgZ&D6}$6HI3OG5wF8 zAZUeZp01$t^m2W{dd7Xzzw3h)#2E;JmatAT5CmOJ3|7ErC|J+9e|n!GSix6AL3PGA z(`AhWjTkpg4=@r;VB9x-qmf{%$`2+bR?yrDXs^2h1E^EMroaRm1!PrV5m?Erz_wh8 zW%|O)B2v>!j0HOwPf!1AESLzYc0i||fvyD<*gZYlMDP^H<&RAQjw%B8rrVkd$}=vV z9&0KH>O*cc1v~n;g`o3v9W%jt#v9Yun1S6SY%ZwA_+vV>o2SEeIE7Q{*1k)H#Pe11%sK$79 z`d0@*1r5kpHz#80SA1OY{9&@v(sMUW&%mV$tSl)%#I4;=;9GcKJz(Md3a={@80#@#|9+xeXZW0)Ct zOwVx>+`+wA7+hn4&M=s+?=I-h_-J~$yC7&Ft_n?`zGf(sab zPe1P^*v2?%dYHGMBGd1->6PAs3XBh?&+-_2aepgv>gblVs~3C3m9!(s&0LDx#x#|SDj zE}MSPPf(n3^7P#?f;Avf%UD5u#%0?xV+BPSr_Tux3}Re9{bHP;72}TSJn@2Nj60?$ z1`4_`ZkXN?FR06RmrH@&5p<9$qXL(})aefc1w%lFNG1pxf@q%vLG9^Ng9P~*Cr)oq z5X@$LI$barT!5-13K}r3m>!xa=+Ag|`qD(fEXI}71(F1v7(2HYh6su=GESVHl`QDN zcy{{5P(jeW%D0mRWf&Js|B);R8e-B*5!7W|H9aOpP@Zx1^qLgGYR2W$f20V;OfL!- zv}QazeL|`rXkh9?xL_h^iA9>A8Dr=4>@>lpj0>g%>Zj}|(dIMF(3Ty&r zw`B^ZGBSRdo|Xl!pk`zVS~5PGekn^3v^4u~7P#y(%@*utyfFP>wqTp(%Fi93N&((; zVFlkN&Fc7rGYftG?+2$DQwNs_>p@KJi~0u!feL#sKp4?#t7E7f(>+{>%{4&iUgGzuT6hfBxuh#ak^eH*pl7F zg43kHmbilMDYE0?;s$G)!4A=sT>|bf^p^;RF;1NRtVB?b@%nVuQo&V>)3+!oGYZt1!WmGOt&Z(v=*AguE6TpzzJG*!Rq*iDNA7L^wx60iHvuri&qFbF+Q5U z_o$HC^o9ySQO*qlpgB1aCAR5|$AqLnOH7XmDNXN57vTVxOwTF=``#oMMSk8ENx_yKq{{gtc0ACWaZ*GHtBL}1vfmjkU^;!#PAv9PiXh{fo_)H1Zpn)3lW_o9} zU^vGE(8>-ifv?kFR12zcK+SqHU93hhl4CY##g2x+*XiXof;t>f6W>f39u0$kH|YXwCEAj>$IvXnqe$5}O)j(|=vRbWtH)nsm9a$;<@VE~;J z!VH>fo&g&06Zp-x+>yBue9{uQ7XAY|#FGV7O@OsdpHvGD@2jyuG8j1W zyYn(gDKLUZrIyh zje?m>?_W*NZ4^Wd@H0UM`1em=(kR%@cz3!^lb{rD&$|u*M@7e%Z^2tKf|~?&7@tmW zXc7!&d^-I~lOSkO8%wjG5#yxk=FNgOjMJx=Gz+#cPM`j>Sx^(SVF5aL20B&8amS+R z#w~)L60qgmGN7Q+VA3&TvH{(cylDEA7QuYYeSFYmu%PZMWZsJfw14C!ALtqo7Eqso z1vKP4bGlBepq?aX(J5$)253tZsO_r20-nPWSUSD9Rj`S1+4OI%f>w+_rW>{if~GFh z+5~$TFHHa3Ca4Hn>|J|RP<6U>yI>;YvFUT$!S${DH9={~8&5hwtBIfm3ux+|4OA-% zK;{>j+MiA@xF#qvUA99okMZvGo(@41#;?;4b_h=5XgC6%u~{%Zx>K+hH004K2%2#F zFhN9gx>lE9DPzL)1zm!m9Jael(2Vi?^iN%ap^V+rJ-P)e7;jEL*ewXUI^ue_pf@Y% z9KY4m)q4bWAyai?)3bX7TN&?8|JWm_#`u1^M6X~j&jKMPHc&T*!SMm(^ohNK;KA<= zy@FZ_Pg!^wK}$LMSb0GMsh~+8CJiR=qz`CPcEj}kenBzm70|(J&>7R9Gt$_=$J#R~ za0r~AexP4a&!<3vO@Ynv14EV>(*n?aQwtcg9FH)7M<_uX3D`853zT>vW6cpP4hn1v zJm$;^3T&V&J{8zNg}VYTXsDS@pYZ_W^!^{hGHGm@%sUtrK^B6qE&}VoW=rR{76Fh| zxl*7t{RN85AgV%<1$1~8XhwMkBWze5+(c#r&9{I?)tNwd;Id5@U>B5_{-8%tfbs71 z@P0vg$!9E}B*g)q{-Rb$9HUD}oCAf#F$MujL&D@Pvm$slixs-OiQSRWis2ax59CS= z#~q(rKoggmur<((Rt(Qsrpr$h6q9IV1&vc;gx!njg~bA5QVEb55Kx?g`hbvlha{r9 ziGrH-pi+_zG|UGr55RGyzy_KU1H~9K11OPcG8dRLcQ7ijfreUlfDXt8ry|fya|CGT zl^N&;Gd4%i>Ku82D$o);(2$D&b_~{sv=~ zBQH1+vokp;fKwza6@vz3!D$kl+*g2ZW&q`VcrxC=sKgGMDb{3O0Z+vTK(6I6XGU^0 zvl$b})yyDQg9<2+v)@eLFiB9P9<-K^4ZJKQ58Nl<1#M>o`_+sI?)tv3?E;S0uz_#T z6fXRFM9|$5Sx_Zlj}a~~JHAc76EBW7*|P6Z}M9Y-cd1_dsS>9?i|@-aPS znf_|3pp+buWi$KqdD8?rP46-*vV(Rpu!D*vCTa5-1Lvr1Qj%4o9w`+hl(hHHuW)shRZ-_9)PyGIKnm@O}CmZ2-?dOGhNV>@x}B> z(*?a5pH9CwT~Lj2>U7o_f}xC0r$^5K^O|M|S}=Z_zI%qCJ>$OVzh?+`GcKLpK2tD_ z@#FM&GX*^vA5FKIC1?by*#*8$&z~h|$<+3K`l?xi6By4;x1KFn%(!Iw`q_e(pj8pG z!R-~fIf5G*k59iaM=*u)?sU_+f~G1@ARG5UgR%^u`zOGaAAedha|z6^`GaZHn9io2KuaCuq+2ZTd%$ zk|ooH=L=d$E@13cC z>GDFst&FFqN6U)H@PLLQ!Tk(2fz#7BE)rCiI?D`MYUu!4AH)i}9ZiWtfl+~3;OzEK ziv&#>MZsM$(5N%$t{)}P4g^ktv(s&s2&OYWn!aR-ppy75(BRJlM$qYGcV15u01a>6 zU=(Pdes_tW7UQGo{L2KDrfV$~d-~+%f|`sIr|(@Z7%T!A?Ba5VUOWlfVAD5UWrd&`O;qLC#&UR!|>AUtBAw&UkkE&$WUIjMt}2trJXQd^%lyji4Lj+39&} z1nn3fO<%hPY|P~~gp4_dW=!omK{v*8(~qnZG-aGR{nt7{Gsa!h4c7}wFz%Y}wO&w# zapClQ5H)rCl=XrojEuXcb8Zw=Wo)0WzfsVD@zL~zje^dMQ>QQ4C^(;S>U5V)f`yFd zr*GRNXuvpq`twbK*BKv8-@jQf8#Vx7utiXraq9MvErQ&PjQ!ISwhG!Z9-KaJtDp|! z!Re>B3Z@(WWm6OY-HQos%@`;MD1f(%aR~fnQxXj1WreJ>Vg@&s7{N{M>B-x`VLW@A z;8w;T(*w7IoBp%63Cc`gvR$x%@xpY`9fC@X7p7b65NrcEXNMr@ID^|e1f?b0zoD+D zB};*e)A@G_N;6KFuDw$*jq&mHNjnA07`II4+$AV4yG0P%i2~m}2U@_c$P8-a zf%fzrp6eqit|0$XzIG3QPhB<&2<`8fqjX=%858 z?jW(3P8kp6j?yh9E#9zgftnT;aIW?h|ZeygU8) zK0#H;;R!jQ&Uf^F!EVMK)1U7b^g=&A!Tx}t0pq*r1qTG>*iNl(0!`jbIUuOX_-OjR z1A_XD8>YWIAeacs4}k{-EkJblK|yoICDRWd6x3wAKK<=M!913y%nGd24NnQmOs_s9 zD8{iw2s9M^fN|P(S&%te+hsxKL~WN%1L>c?TNZ52pY5``jI*X|?T`hTW4K2)kMZgB z1$$&o8D~wObVM)#R5*M&BACngXnN97LC~P!+@pdGj8mt}9TO~Ld^D|22xO{3olp|U z)DKlcU{ej5-(o4I3p;{*f#yn8E_oNofQ;ky1+QS{H&ldXaU%qvw~8L zFQ@N$Agwk1;aNfL`pJ;v6PQ7}&jqp^8<6=wCP5`Z=kk1jaTq|ybAV0_bXxhzy}|Lb-#cMfsaLWe1Ocq z0pox)Ux0BKKxgbsUFv{bK}!&=dqFUW>7U^A#tVXKf{WoB4M3-vfDS>}aY0Z9 zBz^6IpatW+>HHT3oy0nY92pBiR zndBuwf5sovGcSQ#PV+7af{u=fx+*9&-R81jFVo+v(@$R(l$1p*g<%7Ai54)LF>L^K z2{$liInJ2Qcty~dam94gD}vdKKc+9dB4`5II?1(MiD|mv21(KBAFl{zFkYA*byaYs z%&Kc0pc4%dNfWfh0yaG{{dGcKR62_`~}l@o?^lGz~J;#dUE zGb=Dp-?&FXWcsY@f{ILYS*Gv3F4!Wq9dve*2CQ`sIz0$HLL)GbWqR}tK`F*Z)5~rM zg4W}%yCEpcczF7m8-i7gcc;7G6f^`CWmPu?H5nI7mwhBCt$71-mN@v(Dh4yAAB;@( zp!Jn7tiTFh@yI6da(dz;K_heU9{C2)yqrJ-ha#xtWCEX{+5y^81KK77+CR@C(7+*Z zKt$lDh&AH_Mn?u7mgyJxGkkGBM+>UV&R28lZgfDaD_jpiySusUjF88b2n925by2|<^B zf@aG>BEP^QjvOFqTgDfl0AK|VRy<&IWCqV)LtTCVWI1TqgVhnV%#=moKRev=6HFj$ zDiqoEKy-m3hXQ!QLxC0CEQTlrH9$e98G}?LfQSr%L(>hP2#VJKfjHp=10)y2+~8mi z3IG;vMNrVNYBIlIG-tj6Wj|mvXTAV(kc<^W1E`(LWX13RB*zSHtb71T&46rB1Wmev zvNx+f;~ZvK_GUF@n!#+&!~n|P9N_%T>bPKf$Q{8@#$D4_-4O&`)p6pEpc3PP>96ky zHZ#tdo_|-+o^j6f^>;zdy6JcB3hFXWoz8Vn(3^4U^ssw^hZ(0%m%1V3g2 zjE|;EJrJ~Gd^$byfnYG>`soSEa&nC8r`IdX$un-4K3`eRiE+bp{fC0ij2ot_smMh# zE}VY$p`fXB8waQ=x&SU}4zaQ@)ic#G)-u*8GdR*Ad0!_jdG}G0yyws-dEbDft$|G5 zw;)a!_~d=|i6Cez(7PvslI$nWfLe8;(;w`TRbzZK9ba>7KDH*${OK&u1uYoQPPct7 z=*c*Jdi!%h4aWD=H#`^o!u5A_Jji(>_C};?7oM9;5{0T#G_8UVn&mUZh|Ng;HeE2Ue z#asSiD6aaCL-EvXAyB&?*?)$NLO7yBi3vmT3npBOZ!%*jp3fr0Gu`H^peokbW_&+= z!cRd^PXWm_jPIu#eg${7G1C&`J8T->O<%wwq{Vo4`e_y+DaM1-pRowpYPAS~Z&QNQ zuHcnq3Ty)FS(Mn!m>^ZP0xPJE#V&Agx-YAc9%JkD4Tptfr_W>+l4I!wo%*z!RmhHU z{q$d~Lb{B*rfaYXl`=L?pT{ON3v^K+yO0XwuIX{?LM4prr(b3lQe)gT{TI8?WX4C+ z`#6NmbU<^75}@Xg0uy+}9AtB>600M7HXjoU1Guxx4DQ?ute^gYLnw#w>-1PoA<(*H z=#IbxoI*Pp4^OY+5;9~wGkp!0kQL*C={bh7lcra43n`hMWmW)peL0jkLC52P_Pi@_ z2!OW4uq%M)wiP%*zU4Gyl3;Rx>^J8Scr^VYw~(sDT|wB!Do2ehCFuTb4uQwp`FMo9 zKnnmOd4)jh3cGlPvKiZ^f8!MbRkEghLeRtI*fp6?U>q(7KAmm~pO7l!lIgqngc=!7 zPq*P0QskL}eAYuIzmO*5*Xfh_g`yarO@GHPq{6o9XbY(8Dpr%it(AY{Tgb-K8qkSwSLY9=TY!ToxgfC7^)1B1YSw&^nkh1?jYPJbXMlp+Z` zNv8qBWrgtqGSe%Cg!mZWPVW#Ba$$Tl{j8ACB+zJ%u#l3(WAKIq4WK!F1^YY7%SCoH4`I&6k@I=`5Z>~v`nA<&Gtv4{|8x7`jAp$^7N z(;Y>Hq!}+xj};Y?W_tf{dX=cqM8+S}dBlW3tHEu>geEW^nSM@82z2fpqqq>LsVy%q zRLyvI`fPC_(DD=>F(Czz$-=CVoj?D?!KOD$2(`%0oYoAQSA%vGKnImIfR+t7f>-8G zSCJG_V_Z1hTT-Y+7&Ji#O8ww1FA7`=oB|W3Kavzmhd2dp0jt3I=}l5XS@P#5cR~+K zVRvLKRAQA@;&&8qWKdw0RuTY>|8q+V$$Pz+1XIK#tt9Bk>BykKBdr8IsGnD$T7g>u zbeD+&ufSXu1r7y1q#X+)0#yoZAXzrB?DP_8p)|(s>9?hYR2ZL3lMxb;1x;pgfPDg; zV*t&TLj>lrOgEGfl9Kv7qd~w?1lETE4K=~#Q)PsDG**JPUb84L3G5P7f{X!!1~);= zq`~JNfd;N12kc173VDFGrtvx&WGRR%un0_;o+m5h&iG^cHd!IiYRq@CLZ=x2Pv0pg zRBE`A8KeYaDrAK_im3|V3(>$+pWsyn0(Ym!%L`S3)ta zwDi+PQ78hT;H;w1cD5Z8n*|&-r{7W#0KKXfh){PvY?gQKbVvxG?*lmlm%L+Z&eZMVw^bL zK~+dxYyz7Cuj359ECpW27ra>tyc$ejcm+00&s7ylXPhwos;bZ}#@*95s0mpzo}K=6KkC9mTF zfh+}WkaKnjfQ~xh)nGazpeO~Jh~sta5X@2#aXheSnt;Im>F+g!WErna=hYOF7yQEv zUA@oCqM)iEBG5M7R#Qk^4zy7~M&LV>0jQnGQCzyD3o#H^vha8 z#~6=JpQSBiD1iuOp;_bOs?WXh!-6 zNRGjZ;i#Abuj7P8(+hQkG_+5E&nE>r`GuI00BD$k*Re$$bdDipaD#~fq*y!)wD{$S zj!+EDCZ<0iQ#LG`uCFV!l5z6%o4P_4j1#5{=?MkfoCW!AhXiQZmVm%cHjv>vB$Nbr zxj`YnOTv|xRe{&>09c;MaS!P7d3IQ=ex1HhPe@kS*iX>2vgjEE#7`zost~rwOuzSA%JR zq>`lquL7^YS2hr($-F|+oOy?&0dYAWQw_;k9NnNTL<+35?+gk%^eOy6rJq`|mz`ZF`35XPs|t<8lJ z7!ORJV=knixsXXwKtUapYece?z=yV|DXUkf2w&>jhcECp$S1Jji) zg|r!`O!v1Ga%4O-eWImM6yx;iZ!Cq}8D~s4uoe7O%jgYk@veE`_h*Ew9W`QHqS#5>pGR~R4*jC7c|1z@@t7ARr zJXLW8R)N;(zifp-3z`(|g!VC>o&La1$dK{qbRm18Bv7$gW-p{E_Jc`5T;M!ppF8;W zOeRMOfqm1r+6&b&UYTyV|tr|kfI2&M9J#?4DWEUY#kmvWg2!W1;-Uz9Z z0$hb`**cH32sl2Re$hinn6Z1hgS(LA^aHL!>7eNlHz5_qp6R}BLjI!t98%yJVkO8l z6lA^Abc8u7(|O&6Bry$ZVC#S#7!ObH_7w7E?4N$qQ%EBWaTF}C;})hY$2Ev^pm-gpFl8Yh7R&26hbasB zuvlKux)a!8v7oVRUeK0g#}$jFhkFU-g6d8&Xx+)GATF?a`V}uBPsVlA<-COg85d12 z@D?&1qislJ^LZTWQSU@H81QsP876%0(P+num zQeqPL!J#0czyvxiiWhVq9g21ykljhsbNs=DSf{^G5aWjFcl?E9(QRYwnr96>^A=$aY3rWXVWEe7ReUJa%>tf0&Q%J?@}VNEWbU?DSw>&TqJ&tcheZnUG4@YSjl>!j zhA~25b!wn=?62hy6r)%Q2KPGcp)RsldzM(rXNhfOg@ZVAoG%^%O(hwF)d}C zej-swmxBZ3EFOXT(@!M`sbFz|L88zZ#{1L%CSsL+5G#~C{aBKaHx``_Vuezt??@Js zVw^Soax!L)gXDqa>1$Jj^s#7{OBE{Nh9nvR(85JrUXn`{N|yw$L1P6^%tJ~<&_NEo zjwb}B2ZjoXPVY|>5@tL`u%Pl4iUY3%s1ZyHLoe{s(CC4s=!r zD`=jINr6p)89eXP09ug*n!f^zgI2z=fWBl7nBHTGu9s#QRDzEz%$4K#f}08Vlo2evI8KC3_xohFUhoegyK6xeE*E0AXH*gzJ5X6}A~5(S$k zGic`S1IS4-RtyV3$(0E_g9pn76F>*V?*Q#N0WHU8$^y;YvFS7JfzRBrnKJEw&D?P^ zf@bE~91k#0*RK@PvIH+^19iw)p_v0T56O|Gz$O5Z0d2wrT^8+l;{R08wacKhY8V_3 z{GU3#zd}fk@zL~+l|o|Ek5mZhia!$sjZd+H2S_0sE(EUfDX>m|$So&5U9Cz;V7hUo zkQ#MtWPC7vKDV6w^yigAyo?X0f2t62oNiVnq)K=_3*(yU|LVX4+eph<7}reKt`X8_ zoH$*dTTYU3;`F(;vg(Xar}ufuYEC~^BXoxG&-BT)LODbjzX6-^8>XMH7cwBMd-~rx zAuZIEHq+153-L_9)hMLOIB{B&kObqz>HC_5B#bWzg3AL%P|t@KbgUVhIkN=hq+n)& z3xc49`t=Hote`!tV9YEqX*y@Kko5HWCUT7eEq4TO?S>fT%(!K`Z?jMx=+wnF@W7Zx zyO7*;r52&tjN7O0YY{2|?Kc7?&I{Ae8p%jZ4{8NhqG_!{6WQi3YY}i1o37X?q|3Nq zx__sTEX!dg9@gmvokB&^_q7QbqL{jq@!j-C?LsA>p<3qYdU{-n)2lm#_!!Sm@9Gem z$asIcOec8!6=V+M;pw@Z;PKa&okAI6-}pd_RKGAPF@u)hf!1|=0G*7P-X$cN^Z;|idYjMx=GmtOH? z32dLfwp&Ps@%r>r-9nyRKbRCj)y)OQtm%c91VyGB_6UJ?i2L+_2YWB}2z4;-ogURI zBn@9?0xo|vm{u@>*VcenhdBP8KB-p-ba1(NpHLd(kLh)NLZDMkHuVXuVVpQUz8^f6 zc(7kcneqGdr~N_>pq`-m1R)K^pVK#FaEi$OWCJaf1}($`ZEt_k2On!Wuj zM7gufjt?eH6Hw%VP+XvC4G>n~1)qauFj2^l@$B^ai9!a7lZ8Mt3*gfv9I}?zwF@4iiA#KL< z)9+0c>IAKb$($zC#&~i1hiO9MvhyI-GcU6Orvj(r0ro62rWfp>v%lH193MGYJD;MtX_GlfzZH%$LEQ^<=QG^xQV@MgOA zETKTg*VE_D5?asrbi40tAudM7>C+?T2$?ay-`+n*sGSkicVH1XKV4>?kTp{qXq7axdU`V40LV)v=N5W@dA66Ks)1f#rZ-~rsqNO@WFG?0w9PyY#9>+ z$p0El7ub>f|8#o6d?8E51=Cl}7m{K;JpJf=q3NL0^cH|8Gx`R|21)$D+UrIbfezfnDJ6^pb@_Et23%20$l`d|(Hy@~UQJs&`~oWOh6x{>y2P_p*mpTU;NdmRrco{&co5?|e1$3t@o4}*#6PF5wg94se z;QaJ=OTqcGc$rX(-;abTDN(Zk=wh zT*#jB5wnSO1#&@sjX)90=LPZY4M6mpT=4H^Xno!ARH zY=sS}(*e>7O4eYFD_085WSleId6iI_8hG}Hg&XFF{cMh)qr5@ai-C@XcgP0aeTPXDn=D2?&;^!U|6rJ%EdA#*4!4hqZ)usaICV`j_(cc*_^ zEo28;J-tRqmT~=b|20B}j2osmt`Sg z6B1|_Qs7VkT~*dDH2uQ{A<^kN>xB3j+os#B6S8L9F}-4)ke<{_K?PPv1}labP;)*& zkqy*RW(D0!v~K!=bwUP=ZPP!l6VhYcHCxt+?cN)N zSQr_1Ob^%yc2WICAu&d{A;&igDKI{p{$it$G1CO5>9U)IB>6%28Zm+vDvGewJ3g2- z-E|W};ddy}aRi?KI*R0dmr%K2&PMdCc zgSljS_f{cW#x>KyMy$bN1d15ch&8B2tk@xB#rSOc;~hevO(G3Vf@;&_cM2&o{biiq zv{T5IapLp?JB9RAx0^k`@Hce&&(A^>!_kgWS5@DZiv`Z*M5L|S!I4D3G zVvZe)r?1{6Bn=*@X9X>A1NC$TZt)4M;Dqd3R={Q+538d_mI9OGbViT?BD;kwL5Jh+ z7BXZ!H@#uEkOHVEX9rERfHp@goW6FqkUm64L=u$S6rdB>ubGuVvkL}U3LFBjr*rKQ z^5*;j>R5wLl9+z5lT&nh@g8tB*|$dswEI?iuaG_Ch3V0Ig%&eToBn^V5a{48seMAy zjEAP1?GrLKJ^il%bkR7pOa!%$*+EApB4tnTG>Bh>!$h&-7hKgh0zM9v>0P04*wKpU%iABr`qxsE`z6 z&-AvVLS~RH{??35(|;ZnQiAO2*Hb?aUKXgpEO3ntI^7B`Di}bU&0zPYP921fd|9`AWK%h^QTYy0UG`_9i`1m+TVEX-ILOzT?rmwFO)nq(B{brS@ z%yh{ULfq49j|)jMUYI`pxR5NU-rIIus2p_a!3iPIQO&2TMI{-hOiwr=Bn7%}>R+{} z1oMin&gqghqUMYXrU%xDPMV&0Qb-rn`k8Q2$dPS5p91Kn)axgO)OoMo>kx31b=-Cj zw2)~!_bDMo#7toD*oSMuQ(1Z^@Bn`Ae;NdCo0SA9hfg7_X zr-cqNUYY*=G`QT3J0s)*y2}q#-$9NcU=f%$ebX7CX^gw3d!7|i11+;JJS!B&ICc7o zvqG~$+|+YIpo5LbI zM5jMKFBHT$b-LLFp;*RO)2Cbzn$9?Jy3R!*C&n||^Dhb|F@ns#d`Tz?r0BBH5)k*! zWsp_Vt_bxrPTfA?ijX;@Z0E-g0Y@3f*N_EW+!I-tnd+hIA`dW6f3QMQ(hxeH!U7rw zU;rHe-@vHA;@H8Qg|_~e1+?B9dM)e(FRiIVmpm7xthrxNS}Kz)NXaK*JH-N{o&YkX5*#sg6B-n-xTs=d^BC| zmJsMdfaY7^0%h|pp)^oKT>7?DpJ?ekJ#UQ#rAoE|qI3V2*U>wALj~NqD-8})B-vQ%*G&jIFi0vLb zKtis}(9IzNS&kb(0x}3Y0!~s1;k#XuVJV3nB686P^l*Gj5;0;;E1gFH}gf=5p@fp&YRO%JesHh0Np|XLN!V^}*wq%ZX8eeQlcpv*Q6aP;zyACnU+(H9h*BkUHbT z>CNwif*7YvzxGZ@i*fRF#`i*DvJZ~7fD^AG0}m&+0$yx>hK%nHnopwl*( z1YS+wpD!oNxNth-MwFf9XN;fT^I6D+@%i+NpM|^_ zpKh1=BD92&v3dHzuR>Lf&C_kZ3BAxg$D{zBLgmn4y1}H#206EsQ-QEDxFJls}VC>%ho=I4nk#W{^X%=BA#^~v0 zEW&pf-%b~16;@}R3vMIWvkJR{N2(YF-c0Xi6;@^3FnuGdurTA@=|@?G-5D27=VcQH zSLKUI$e%WScCD{bay`CF2)VhFYyV34yI(}7mj8;Jw29RScUQI^d^2`(2n_~{K6jU zcrWo}0d25?tZEez5Z=i6bowy?;U$bur)LWaKVY0c-A73HI^&7yD#F5`)AD?Ug*zBG zOur^9?7(<>ySRw34`IY zNeVw^oIhPoO1Oq`()8ILYg$OxNpoB}(03Cr{V31N}#MzX>dpn%Pm6V_qe zFnxxcaGdA_X4qAcARoVA$x;vzI5wSIURa9p_;fXSVMWFh(*^G_2~Urf7gl3DHoZVm z*n0Y2d0}40Y10oX2&+y1C@g{Uk8!$fT_N(C|u7tVS2oh za2fc#QSi1NB?a)94yy(ec!LkrD z2v89?KK-kv@G8dn(-&w7-(WmFy;57)fbqoiRodXRX{;mc&3Jlxy^io1jvq`)917e5 z$EOGD3fl!A=L6?@J_QzmgPclC;8}GR2L;eEegatnhe5{=FoDVv(9nqjqXG-`URx&6 z@F6c~CX!i!8$_`>PGAHLk|_(Ep8iBvSdH=QbZ$Li(4KiyJz*7)8$nja>j^ukoPeFB z48EvU5n>7Wwp^$spzB%>>j}p(Uf-^yFKo&P8P*b=o@*d1%=l<}qk*t0%Ud>q4bxW{ z2-`teZw!Qk823-NHxy2R#0;pK1&w%uuAD=}%=UeT!m*4@hnc4983{{Fe`h4j!2vGz z1nx3VpJ*a1BgCN~4Drqhuy;fSPERj37Jkb(X?miGupZ-)=@U$Z{TPot_05DqOVX#A32QO_n10XtA#BCCXu5@^uo>g&>G_tzpnG=CTM8>P9-sc%QW!KZ zDQ6{Y#CUyrpcS|qnGR~O3+g{k1 zamn=e_QIg0{}9RP8|;KtrcZJZe#W?WdZnYVG2_YUYaN9>RGT23F(wfOR>uuZ(;&0k zG9YI&WP!FefX)_tI$g?17_@EG!$}ylQe`QGVsaKf!FYQ5X=iX5`~^gvoi6JlEWvno zyP1oyHlyq#X3#cg@ZmO~l9ClP!l3{fJX8Q3BV6YyY|8j$`W9E=IHgC-pyMrA!DpI- zMiDs_L7RkGLA@mK79fG&(@orjjX|jxG+~kJCfvfOfU08bhd3Rw>u~#4k><9&H3LK#R#yfXm6{auk+eJKtJ3vF>vBzQUk! zT4`TlX~r$n&3%PIM+ol*3BHAf96Q0U=cDlR2 zuqxxD>AC*G>WmAgPxTirX8bXoGeFpy@%(hx0O4bdd#3XQ3Kuh;oZb*9yo~YwboC%% z&`G1wLBgO3tg;~CYR~~sETG{dR>uv`8L|{41a?ek4i;9In82q974HxMl@F|rE1olC z2~3;r6f6u{R$d=0ti(8V`l4Xr>5P-7TZITq@lAlH0|wBh_x|ZgA;L|!{ z#;hy~pvZF!6P_qO2~>rGE~1Q4fD~My3vdNyPJbCDY{58vx>C4s31~K%36znZGfck- zI&XYixUdN0`RS*_g{Ly!oSql~4uYu>!t%0*!Ri>Z1Tc&RosM)dLb$~gJW&TS4Vx;6 z!Jal{ZTGG-z`|lyIrp6i7|U1U?3e6?8-d#4Qfl3ZTRF zE`uD1#k(!h!qMha`II2{SGt039wlD0Sd6f9{WMTR6WL$*ZDisR12q9arv*T= zf$3n!uVGSR0#BKofCUi&qZAkvn5N%|5v~w8%nrJ;l|zADU^TOXsKATq39-Wa7*|i1 zj}s1MoHM;NPFRU?<@6bG!uFthI&Q`ZcgZ&VLY`3or8MxeEyoAKSpr+8H^d9eF)o-s zKVBHLMetUQ_u8=~iuhUY5Tl6s!I)R{)Ocf4yfF$1@CM7mf zQvfI=c=)FqP7zj`ekoOW8LWtg1)b>h6=}lhj2EU0qzm^jc21w0E-b@%ar!P0wPO19 zbm0~)T!D%uzqDougKk3En*lBwe`W}GFkYD6lquZC_FiLo#_M>quP*f%V&SR&HCw>iS|K!MBy>QwQdrCem6 zfgB<*bNbd?;c}B%;DGtU46_SXCSa-uwNSySfD4ien(~B`7$;AEnkO8s1u>-u?qb}g zOwY;}4r81={b0UuH{KsXGv8Bf8HQDE+L!$M(2P%`5b zI6pn2PG%7RF-A!D3-4#z)id6bs8~EdYn!3S#`NQX;IOwGga+2Qli)N`zJTzA#ED zuql`ed|{Mw>{~p2MTxL2`y$Y(c`Odo4a`X6S5{oM;2r~NX9Xt${-oQ43z;5tFVJkm3ac{^gA*-GNIUyWH6dLk$laJ z95^hycEEKy@T!j++C=OwCWJU^2sI&M$jZmZ@$7dx{@WXV29fM*eiepf`#^}f# zg9v|Essqi4;<6vb7Id>PjGCTMCH#SL(e%J-VIRgt)8|zS%QG&SzOPzXOaPqOKud;& zz)J=fO@C4?9LTt6x>=2IEaRf-Q)-007?(`HUn5+{xM+G@t*}4iqUq~u!TQhD3ZE4P z>jy3E1D#Zxt-ztco-MF+`i44TF~&vHkJkwsF)o|_t4>&x@yd3UdSP`&#^u|68icno zGOpOp+$8MA1iB-)MOcP$>Gt#%;ZjDpdBO^k3jEm$TnhXk^FFqM&EsejzQVY2`rS6+ zWX46)9ovQV7*|a%XcyLJTr_<_yRZo3%IRC%h1WAKo1WSsY|FTM`r-~@ea1D@FLwy* z8?EHyRuEB8Qs7YF23-fko~^(xu#yinU?!rV~w*t4o(&@$B!Z#TgP512)c9UMq2Ri3g zM1dV@Dm%y@?Ac0e0!yc_>k$U+K>OSye3fz8^pm|{XR`MR>oTsHZrUe2RbV-v61O8` zwi3Sr8_0!Ar{C%m?qFOuJ-J^viE;7tWBtOmJnKQ7jt|116Gb;n=bs=f%D8d5>I7lX zq)XTYVKcX<9H4VY8Mr|yh}H3faF)O(J_4masCr-r4bSj^6oR!(zcfKuMH!=Aj-|$s zoG2`Cfvk$YI^l_;WSW-iw)G`0=114@H>ushHx40 zPp_RJYzpc%b4@>xAuK=r>I`8)#`Dvk&k%NE`o}a~d!}%Q+>7Jry{8GFy$_Bzo-%;C zPZwtjD=>CU|1?wBmT|#!gIU5$>kosLRw4SOn2`@k$y}h6%+0O94O*9}07}s>7_$UU zutA3g$S!7rj^q(W(&W-?7?CxWa8lhIR@T=!lFWfK>_S~ zP9hZYgS^SX?Z}|WufRI}{2bwE&;e39bA{!Ew}Bc_Ab+wtg3f_s6Zp?O-C&Neh$1U! zO9xm`0DPVl=uCKV&`^~Gh>#K3K7G<$VGV+?*WXu&-(2)<*xfcjuVO%u*!2;m`#zoT&7Yh4m&IFB%z@rscPZiYT zTDDNwf^o<6`wN9-NYJISNH{_Yv^9_wbY-Ig_#}QMUc`A2(-sK_GyUV8&bU-qnn+_o zCv5947B1o1$p=|GdV_ts!3tp!BDFIJ%$)vevG5kqqDat23TF$w;UWw z>MMk0iL?w9Q@JaIE=qqpw?3|vpk|dXJSSjpAg1z#qgcTV#Pj_4;EJ~y#raw#Cg{W zD|4)T(Insqy3x~Ot*{G`c^)}gGI4|Jb_>uQ0zWtu_!PjQjnqWJQxJoi3E=riaE>xAW*?y^pwxLR0>$e;qHkm7a17x^HDK_&q=EZQEl zUida6AE*##(*RW`3akQOr(16nmgWYDfe*PH;a!(G5C)fm;E5_yiy1@Cmq|8LJz=x3BhxOv={j44H4uh@qnmWU za%~Y-V0=GadyBB97lq*lN+{r_1t0hH16zb;r|;e(e2`)X?%pb_#<+X>qpiXo6q}W~ zO*q&Il!n+qr7h^xCRWE8yje=J3asF3zDyLv1tzmA$b!xyV0M%*bYyl{lm!(GD^2oJ!Pox5Kd;?HNAU>uolH(^<{^!E#v#?MmvS?P;8d(F5$%#8=}8k zIEG?FPVE-m*_6|HHf^R3TFa8=*%+enBRFo*jD5{BlLz4aA%5|#ycDo z-Xijm1+*^f0Y7wd1#JFwjzd%^!1E6YYck%RKJ$=pBE=zXd6)_b`^sVALdHka-Hr&y zGwzwb>ZGtTq{RlRkipFkZUsir`AF!E5C-fu9!LuhKlk+f)xr|fRgMbVFfN*&c$5n1 z{nSxm(2Z3esbN;sF=1DZ$)G**pfv=`j|qEG92W-1h3y5wZAiy60$GlrrLp<~yQViB zr-IjC9v8L+-O6ovmGT6*z5j%;6eBdI5xxdRn*zx(J)P&2a2VsZ>B*;r^|(Oy!ss)C zuI`zB@T#yP!fY~|I=@c|t8qbEibn*Mn5koE_i5pDid|-SM%WS>*KY(7acyu_SksdV zjWQNc&s1Rg#7n|r)Qa`#IcJ6MftE-6oD1WRi$1v`lu603JhvFcbdO_F#8hJ~Es1xiZX>ulxNiG0+)rKQtTp=E5iQN%IwdsKtj&(%)hAuj*O0H7{DP1O7;}HbH-Ij z$Wf(;Q@ke3!AP-_GOi0Nf^xaz1&DXgLc9w~DAdU1;E@h)crK?(lIgx7e2DSHbibQa zsC2g96!v6)!s4o+>RL42f3>g}cnhYmGvn>)jkkprC=T9(w}fRymVgHWrU)xBgWGX0 zgh1z1QpNbd+rs+Pa_WQI!oJEsSV0@ik3-ijF+hf@&6s8ggBC9dXMy^l(*y1Z$5P8u z-n+u)3g8BX0xM`xN&u-z4O-Ai#jrYjSJ;kP&Q821tU*PygvA~C1Q2(sgF6#c^m);J zVOwF;z62FbS9~D6LGm^;w}LWw%^GOAwg%H5&MZf!EP?lo)2UI`O%Hr1+(dC+6nZ4Q zgz{ED2lw=a8-?X5c1`$WVOJB-u#X`6yv77R$etU}VrEgu;E$jqOO~Rb0tYz%U3e^< zL$USMPlWxbH7aBLRM-JJTt~6H?mQL#O|>yUW-7&1{c~ZXh!f19-tr7?aBrC(oYs}V z9ST;+!QGHyU97!GR?u-rSQlV}Mw>Zb2xox@mN~$)SK!I3#uvisN;|;IJ~nV?DS@WD zK*@pCaRE1|5T4Agzy?kWr(OsL`Q2t#pr(7WUJ6$x?n0~v2bIG=xIjZ2RJF$Cm9T5V zdq(J@b8yW_16y9c5Jy*9 zqv;#o2wO3(pZ@v{c&m)aTVXxOu{*qu4|t{v{uUOUp72%}bUI!2Tj6fT3)9)(3AZs` zo8I?M77a8@K*k%t7fxXOF+JxKcxRF0Z(;fA z_xlC8rrZ1wmYUB0LAaiA&Gh~c;EhJ#J_u_uuAi>>Q8=A({q)X{!r6@Lr+@t@T!y0G zX8MCq!qto?r^kE->pJ{d*hmy~Rf~ZFzoGy)Q@sK&=r|%ifgRJiz6d)@Kz0kVyYn(g zDeyX8V9ZhwQUF~uF+KH*unXgh>8rj7hjN07IaUQOfiKfJz6u*LKAvv!4`l7GGj$p&t6u1Sx zOn>uLSP6+M{!KWP7pz5t=>-#5MddePE5@nQw|o=UVcaqO;WuGLB=y|ig+pNKFR+5u z=X@77KvJ>vyD;b;A#9;NlkH|li-4p0^u*7?pi4$$9fh9|UPv91xk~ru{FZZ=I0&l0U z{3C41xOn>GKf?O*xA+uA6?h$&ux2^(IfAd7VF68N@jA|&+#%q&cDmtTVOz!@)ARod zn}hDp6kD#uHl5L2SbX|gMiKVur~eA~F?LUn`X^kmU7gl5Jp0592 z*cp7*vADq7>6QP5^%)mWU-@4+it+AL7LgQwi1QRcuKUO)@OEmsh$Z9VsT)O_*`PLC zF^YgrXUqR9tUA4xQACLG{PYQoB0Ctnr+YGqlrrv~zMo0NobmYd?@S^f>*Sb4+!+^7 zPh%F*Wc)IH0<(w)$FgTl0*ED<|R2g?pmthh4%D8yC z5UWTA=~&I`<-8#pwW4ov5NCoD5Pic2Jkv3dGlE)iqKY12P)iGU7R z;^Y>QW;`-om0Ki>@yGND++e4k;1=1#^ym2WHXe};=;cKSuZS??`RN(FBCi>jO%LG% zd!&a?#F%m4_5*w(nv6)v?i0U=F5lwspu^fhcPVgY3A~@KD>1iS&E-0xNS{(6+ip*p?y{AdQQ45-mxATgL zG%+ebiw{UHzX7_70x6gC34ENsUR*?*amV!A;v!y~^dAx;wv27l%_Kz>8QZ2uNQ$U{*0D*7>}32f-CRnxS0pB{$%L9~)35sCRZHgj(jNQ{&l|-$%YQJ+TB8M3FPM@eM0@^S8LsdkJ@zHc;HL!INYH;gBrk_z0kp|iQQcXmi zv3I(lI@mTNb+B!d)I|&!d#4{(7g1%LI{l@(h&=Ryb1rvY&_pnJubDvKbQukiRgAl) zAJ-7EU~HeJDFV8G-cVD-nQ`j$QcV%i{qv$)B6ArZZQraV5(c_no=Zmrw3FFTN5ma8 zzF4Ir;=y=j`e7ZB8pg%j9dtz`7#ZhJkJJ+hWL!LbwVsHP-oL2=3M>lD0$yOoX92j*Fo7 z^fN+^c~Zz$VpU;KnEpdw!~k@!<-J4!@#&5RB2yVpPrq&;qRM!7`d5YaWK8&r?&l!p+GESZT!B9j>qz$YVdSD`} zBS#kK>;X9=5o^XJ)1!<;(s>)7bO<;KIlg@i-ko~RNJPZ|e8?@A1`~%FlYjyjX!#?f z0;>Q_R04G8AQz}b!UZ}|kz3&4bR}aEEyjb>eT_wW81GHLWh|n^_;~tXW07l&U#4F% z5iw%?GM(L2#FO#S^gvUQ$BYxFo0^FfGESVn+)QK>{6xUVuq9ZE$V^Z0M+(`e zu#i3E4~~4b01&W(KqMaGD^PHl1fr&amw_VZ8K+L)86=`V{hgZ#+w^xq zBJzw=r}G7iM9F}U80FGr-oXx9dd9}Bz~%UX2NZss0#m2A1dDXa^@Gljb7XYqWs-7y z(LYUqhl$(q6^Lf!c6`%6T{{F^u)2kam@`hFUKb*Ao$=B1uuzd~HqbKNf9%tbhl+rX zM0_18@)B;_4K|Q%Od#7|K+FO4h?xbNIA&QgH$d+ihpE^AQ2{!$266@==-9w|26JZ6 zv5Md`d5swvoEjRKT5TCSpjU;%^n#B_1fM<#s+l3D4}!D{z;tUeOMtJrZvcV%R&(YK zMn@KIMX;5c%pHv8%qO7i21aw{1E3=kWvm!JFxG>-XvJ^=B*_H6>H7gl4scsRWzQY1v;37-;&E`uuQKxPFt(6Oxw92!gv z0#~L#h!hbA)zKh_ePEc*=p`sR-9K7HoS9AF{B->&k!74en3UK-gTxc2--{B_HvA46 zieMG^$EU#I&dcD)sK^RB@7@7?11t1iD@F~b00Ho!>@1E*W=b-GO_ZJ97A-P^aqD#X z7?C2zmD4B1h)iI-K3zFh#1Pb8W6@_^!KlOvDtkcnCL5@|#;5=}2X%UJtVk8)I!R(O6ER|(IQ?#%NEqYu=_c_asf>50&x#kB z3tD$?nIIy=^q+Zpc!G#8~}g#A5aT`oyPg5xop0)%ImB%&e=Y5(zpT8(U=8jf9H-}KTX5qZYN(+lGT zB&V-S5)oxwGW|%BNCZSkOaNRBgU*U`{KTNZBCuq-bFzpJizF`hqkO&`}uOT!K=J)2Clc6PXM-TUTj%Pr3*f(|P9UZ+Qe2rte4> zNn<=aT|Ps^fN{a}fD92C(5(d-BIS&Cr$5aQ(PCUQT_96L0kl;hQ^bSu%k-*D5qasa zYzkcZj2cR;pc+$?SwWE(l(#|2?AG)xnIa~Px2C_$6tUL-hjdfNlz&qNKm{BV_#jE} zO&%+dH;Ki|8;; znI4lZBFXj_tY~_5wuq(7Z#G5HnUia#Ku^x7P+$gK{iVPHz8@f4M3?dU^nckRR*dha zTjq$E2>xMIU;+(IGJwi&7SPFFbvYsuOc&Uv&&UyJPy?S2E$ql{#jt=~L0Ey=jA;hD zg0SNUwk!o<#~JKd3QP*30_UgO<%;O}-e6M@RuFc)!IovlGy$Y)0(+LDvOtw1qoN3t zgMzRo^9?p7MW_G&|NrNYU~y0oR!}f!KEb9S?6`s*WE`l+t+-r3N#O-9@r?VYn-+)|r$fpI1rA*XMivJU#h@s~tso5AwFSAJ zlF3m96rutfSU|CLfl*0>#X&)w#X&(-K|A|=qEAdeUmzlC_JA=GE))1PRbd4&O(q5mbJGa0IK~Na4VN&A82xGW;j{H^(512st4|0Xc29Vi5Kqe^& zJ8odgN&^+G!upJV@R|aOlpjoHObyHm!j2uxSqh>c7czq`qdLe9azqca5+`U+8dz45 z(~&_@1XT3H!+W|zv50#81ZD+c1!*&;8=$-mDJpKTWhsaX90Ug%C|Bq+eqiHeP!QH- z_{65f?I`RGZa0WIGAeMFI5uohCGz++( z0Xb9H5mXQ{YA`VQVvsxo&Tb+gr-QGH zmlD_wZgzol4Coj^1x`l>f$eOdRJwv0S5{%=1|_*w({0K`f|)L`O`ljMBB~6kf)qr} znC^gF2}-t@31Yfnr-(4a-qQ zpOO^q;IP9V?V#+i1C$t;krLu_&}HMAh`1GYyuqAhuRu70Cmm`LaMVE32##QI4X|Rm zSA~cY4p05V2&OG5v3ah${cGu66-M5ztLF5{i)sz*NU8cWNJiQ zks=0?C%tCG^AQfZEdZHl?=FW1dl;{5C@Ie zu!C9^+@R9)3gdL>Yz|i|hEpCO$AP9jL2Z)_ELj5g_&{a;6&CO@6!4Y^xCzPu@)-xzXBSwM zILw%CfDJNZdcZQhwqB&7{sV~5Y{v8gWb6;HpP3Yd9YN>E@+$}kbaR0WZ(s!s9D*;iqc{e)?oU<0*Z(~ECO#BLHc`e>aPbGpuyC^%Ia9p4Qd@bidZomU{w%S z5Hn+%0is#Vn5KYe4l||+tO~-87eJON2s=(-1rHSo>oZ=#X*w)YFR+?1-2iER03Oj3 zcD%uw1-Ze9Ralex0qgW14I=7RFJO`^Spwh_p@lV>U$82HZX{9=cU4e;B)0$d%>hNc z9H2wPgdHESfSPqTrbjl4STJ6hKB-Y;V)_@TYd?T26t!Xir98(Cp!OfA;|O>47B*aA z3X8A}pq3J-33&iK+$`+412k$3I;vV&llj2(t|k#R#&^>Ip9r61zynj z0Hj+CDZxOkQBF_^#tdq^G_Zq)!N6_G8=%?_+}~D$)k2gYo8p|As~Yt zL2cPPpq2pq#8UX z$iO-5N-SoYObQBM-VAn-k7N`$6<8c~ay^!RcCaS`Oi1HRiu z*s)>y_BIiqr@@;r00N$Wu!V&0VCd0DT+5Fqj!S> zTLDp5frI%08#uAfn0~NbM2sC8s?+bai%3|3>mdbj7=n%zfrlYd5OSF@$tZAP1mSdp z4iN<*#7GQ0jAidKD=~mh2o!f!U;y{BU0-Jdh zgdO*Qn$8+bGN7IwD2zqTn6^Nh^cz65um+Qa5{ntr4g&3atxgeL3R{Tm&=w*)QsWBJ zq1ym*B&bcKgy__Dup_mkj0LI`SQP4^y+d|z8&X(<38dx(JE%bj8irxda%2Q00Z>{b zsS`j%-%p9vjH#m@)V^g!a{bOf9Y{SqCeWw?%qQ?(9=Kr$aVorLcmkx)7?yWI_bfqu zhTggZB^-z+K^~N6&vN_+(#nX?iqb*++$Ex94oQ2^4kGvlAkcUPe5{WdeXNfe6kZ?L zrYEZLh)hrD7U5$&Fg?FpM6~_~co-8@u7fUx0`(*>!;TsP-?;`Fi2)r>j#_YlTL8@5 z3ZOl3oQT7Th|mEV(P9>WC-LdbJtC6CR$@UtB0}M)2d86q9(dyg6L{!cfeB$5G&?ym zxEF#?q=b#w2|He3pT4_Cq?@sKx_hrkH7jU0$nNRKdqFElrcP(<6RF_=t!V%+Dsfyf zcY0@^$Qik%tO_iS7Fi0AtMXVttB6?O^CWMk7x#nL#mw#(xx=`0dc_108OAr$r%nJ1 z?wufF#JFhshY2E1jE|-pPZUvR{4w2NvIyvk-R_AZb&MCLKd2WFnVxV-gnzp3B#}7A z@6&rGiAZr?gkJQ=H2q<{fH2dd=ILygMa-xFo+Ki`_-H!MWHf{1rZ-In&kDdywLN04&aRl9!aB+HlgMc*S;_36Ih%_qaBBjzSRtA0bgCRe!7Ud)CQ((B^DJ1CI`?}EDTDl zj>@2wQVfn07Ek{$T|}8_7u$3LVGfb$nlnTsO#Uz`u;?;4I0|O-@iQ{Ava&KWf&nWd z3n(EtPFM_?7GPxHVdrMxRsb7QIzyz2aq;vIGei^_4^9`FDWb%mupgEK`O1nzQx4*%C>;8I}GXXFrQoGv&^#DVeA^q^THsf>%K@0cYr zn{n~hK!GcZrBJlXDl&iBfIpe9H8SSlvouwK+`6i;G0K4r==-y zDzFNyo_>FYh!*=qb_EW7#skwGSBeNv7fqGq=LFr~vw{({p~-rsh$Z_fL6CwM5CwfJ zMN%0jPXDqJylg{ql}Ha`!}MjVMAR4?rk`CUBFFLLZj*qczQEV%pI3=kvHoUTF0gO9 z(Q1)MP{!g^-~^4razWNpbAn29Zh=SBm#h}CU|c`_?rQK9tjrn_Z-goNYeY;Le{Wy9 zM#Pzkv3dH-bs}|)&C@g1i~P_%&7{BxiWfEwrWY)Vtd0*rchQ1wbbSLpHVV{0WCdOJ z!>Pb5&^*0&gUC$A=I!bmML3ukPfj=3ERxB1a{8>zBHIL(flu84-;BYoz$CDId%_kG zHb%zN)6=(t%eDTkBC1knL4%-d8cYtLXz@^Ba|B&p%&5R2aCZ8+ts-J#kC>IXKqq0ph&yBRbm8qHn^eI!$btsl*&tCN01*HkCd}ptTAl!& zT7I=%L{;Dq=+5&7CQ#J!F9*%#$?p)k%Gfyl>kg5Jj6bGd-w9q>%D+nlbW6|NT_PQp z-w!nlIPxP3K{oKW9Z$`fX>LoKPusOb9&T{OS9=BVhh4Jq6$Gb%qGM=8^ zx(Dp_wR=P?nHu?~f1Ds9GX2jUkvzuD)3f)AED;1P9|tX4=K#;8gM6y6Pb8di>hy|z zBGVY3PUqh*0=mh^VZTTUKqrm&=Zw`w%F)p31e?+7bv}P`*Q&3|1p(7%9nEp+jzTl|HH4(@$LP}zw zsS3~pc9!FgMbo>EiBt$K0$+NeBxBCB2Q(GFVbONs<03hX!ZShFenEGZoB?H3ftk}M zoe*&Z?OozfK$QTkY6MsH;B$}`fXBjFHJD~FD=~xbf>#g$O(rSvf@-M+%mS~bi=7nF z!fHeCNf8gm_uJ>36bWb4o5v14#ZOvM2DESD3`3S8=!`s21C~(%YBbo;4Io1mPmAdD zgPqL`+6BV|IyPu}{Am$W8?YeQ$xINJGdP`r9;T%L+FJ`=+@Jtje4qqY1@#|T@$?I) zMZ_S+g5@BBUr&o@>vx>%5O5T6{B#zw&Jkq|EF+a=rW$3u6j-+kR7rlgL%3`xTFYZl?>=!V~6bN3%UhFrms6EBEfimdS9%pENBk~ z`}Ei6M5Zy`ncj3>B!%(r^ylYADj2_QPq-i=!pQh&dg(=2Lq&P|o{J&^p!Em>j|60< zzq%-rh}8JWWxP23+$D^5597<}td~VR zFc1tnDOljqbeU@+5}-1OGM4}mQO?SI4lE=7r`qt|r3ZT1Wu3r}cUy~|uLj-)onc)o)CElBFIs_c09rwHe zMdkE_8zPd7)2CP65K(75HGR?P(*y2^1S`y$A&>+^MD(Y+)AKQ zlT~2l^uu>V`WR1554tO2%D7;9$6b+QjJ?zS?}>!!yk=Gqs8JN)VdMri#MZE6DS@w@ z6H#ITt(0O_U~oJF8jsXq5)f#ee&L?Tb;d2zSKJrrQ-zi%Y@qUl$#D&1mSYb@2qN%= zG0SnrqUq5OL=5Gj1q{DA^9;~Jj}{Q0iNTy{35Yjg(e%|1L=r_#Fe@=A9aJGPfm=3U4GK(-516tX zUo=clc_gADd<%5Z`Wcdjxg{N z4gqWif?ZhnSj1WP2a^JWz$s>E@eaAX1g}0RtZv|YBBIOqYP!u65ml`6B~L_R7#B^y z_(UWgv=->8h>8$$xPM^*hkN={5l3xUIBx+hL74#Ky#ev2ux2?jIO>2V`#BU?1b$4v z{8U7R@%;85Peu3`nZBQ$&hZ?)M$P)UNC)p-W<_Su<(My+vjmP$zwlfn8q`qMeIcR< zI<^xuoW#h$BLGT2J&UKuzYtMpd^ElNg@^^?;^_xoh}>gbJbnI45hDXc1Dpe-7Nr}Y zzy#`92nc*;m#;+f z85d8Fd@Z68h_C{*^#GjBm>ge#7I1nN5WP!W^YGesan126_NVsk<*jpS5 zjNmi8Sp;4&D}wsz44^fR5IF_~CYapzdk0dBq57wt-h*E&nPa$J#SZK;Yx_Q(r~Y7#pX5{3@cN z)d+4Zm@{{Ps^K3EP+kLwcLLnz1F;&IvIIU(xBn($!1!@`!8Z{V#%I%~eiN}^{5bvG zHxU`eXVYIpVi@@{g$v;KFH)OZ}6gkTHak}p>5eLSP)BApjfUdOr{7a+|9)Jxzpb+GQ zgy7HVRlh}?K$h166fiG9;Rp|y2O!=GUWfx&9Ut(30%qPHk%f#O zr#t)=F=uR_Uh!8%A8zLjK9HU45IZ}j@BJ%cAqS5%evlj+w*sps(-kH~UU1BIOc(wK z4rZ5sA}ajd;Lrze?f`jydig&Q8<3l~{u2S+jVk(IBoY*S|3#b_uTS6fUnGk0<5XVJ zaK?{QQ$;lyH%#pp4QKkpIQ507J>$pe8jPZ=K$@>Gin_8KWfth2F3Ti(gz@9_M@*vN z#et&CqM3{zr`I!!<}!Yq{+3zPiSgrf0~S$N%>!?`1VF7-1txz`7Xi|!-65pJ3LZq| zWrSogCV^wq=Qpy5GajFQ&zo7E@x=6h-ppo?Q4pkx=-1~t(^Ewk0kN^A;@0xzaZbBKbDy07C9ozJ*( zx*Vsdr1_zyMgf6dQEm~$qGct=hTcxFAWGxy`lAj3M?J^okH9s49;c{2GI7JN@ z_f0>~DJsgiWBOB0QF+Gw(^kXH1$6rc zXssWkz*U$iFAFHMD=-RNn|_c>v>$Z40=K9U*>4# zqI!(errQXJ%50DS#=*%57u#+lAgT@GW(bO^Gfvw+K~PkLNvd-N_?}wC79A1CLlB|q z`-DYxut)A@A|rPVmdFK*fua)}xoeOk*J`tnA}gqHHONw7P+;XoT5jI?r9;3`$?@rD z$Z~UjXq-ASIMxd^iE;-|XM7+f#tyoVo>}0_^flt5Dtw<_K{jiGi+X|S6E@1KF?LMf zzERd)tP?ah461op!842k=1dHZcV15y*(965*fG6yldRVCw-TbD?Gpl$q6VPLup~wQ zF@BxyASG(Z)V5=Kv6Sc{^ZUzN1O$3e(wCg$mQBr==}W@#^2!zg$5Sg?1Oz5d_mLJ= z04?lc64)}mNLthv)R#OcEvm-&cKQoxQCq1yZEc|G^9E)}_F(`mat8Gr|1(Xuml4(A zcma|Z5@?vdu!6;a@!j+VGNQh$Q>FFZ@hWf)&gKO-yJE%uaIflZ&Whf#^0mqCFM z+_VQN$(0lJV%#@0ySjL8CgjstiFex9bN7~_QLt(u}M7|%`D(*jwrJw;1Y zlacYp^geA6clr@+(S?lt)6;ZBr-5ok9k8IWuINI>_0zBFidr!~o-Uv#YQp#lM2Sz2 z(Gyi*d@;RNPgH_;3cC`AD=+9gZ4QCn>5KG4>lk-VSJW4s&G=;cUVU(3^Fd$q9^;GY z=M6+9gnzJtl!I<}GOnNg#Yohh zalv#OW6=$a3#Pv{7G1~kgGu1R^!X;Dt_qKs75No76?h;6YW$A!g-Se*Eba>Mp*0p$ zQAMd;pe+b2pq3w#f&wRK+W{wNNReA$*K~VR(N$J2*+KK6V0jC0u2A3v%>b|oykrM+ z-FX=l7#tZKHU4mem$`F-)|Z2Z3>v2^n~CZ&Hck&T6OCtVn!eFYv`BUbXc-@9T#geo zNzP!#w18286TI_>TVTg@2Xj#+#-{1X=As>p&C}nQi*_-7nqF=pD$Dq3`&0{27DmSJ z(`Q+V$})bRzQa;{$w23fuy_r{8xFm1jIK z{l9~#B;$eUl8&M(jFYC@If}|NPMRL)C_0sCBKvfS*#b&TQ`x3(Y!(!ruHz(nMjPI< z25qrnQUGnF$x>hx_{bK(3!1(702(I(4fTLl`YSt&x-h<-p5ZKdQ1}(IB4|?xsDxz! z#U`V`tLZi_qJfNOr}w#tg0^m7a}mvEyguE@RaBpG;`Aa{QDq766a||ma{{R0gFLz} zXCxxQ>&U1GTBaqC1-cV;`XyJl2|SwK=q9Sj zxMTWaH&M_&&--qoA&fhwo4AW^0d*qWMelinhfCQ(u2*6Km5l-dpb1UL$Srb5`jt$%jM1E3c3)9C`9q88xO2iQPU!=P;s0&k~> zdx~Z;KAnEZQxrP+!ludm0D1C-6+Zc*;w2g^@d@M^2}skC9ee}woxf8B1inr0_YzHE zygvPlm#8D-)9Gg3NajtzFt6TQv>GxH%nZ&gpuuK=Ebz#q0=vNX=^{R&F`!mnk&mb@ zh+gO;DjK|<7v#4yjJ%+}1ZZA}Re=pO8qX&1AG~#z8FUf*45lnlC>aPm;Zp>e3fdRW zqQD6X91dLu6z*#g;C(obWUGU8OGn!)qF+unEvxk5AziT?awav6;%OQJJ(m# znDOcKi@r#nxxtJr-lrS+iHb0OneOf<>Z^1aTjk2{xEyr5<-Aqk%5|Hcs20eEM}DGq zqM#@Sc?2BGAg6JFMyO5wMQvEVvkDxVUg|HZ!1#LlG=I@`_^)IK%^`vMX99PpX9tKH zF#eeSVXL(A^!)*%0*vRUUkDIwQo6tl+J2PY7rNpklC~#qV zNuX%GWc$|+l;LksVfz7m3nx#IsFdUkkTiTfB%=c8GB1dqC~scUd-tfaI~B}K|_ye z$=u0`|0Q|3|L`(#LF&W@EYqSz#q7_5hOF5&m^hSpKwF;KLBYla&Kw*9f7uj;K;zKh z6eXd+4l0^K$%I9L9hBff3Z{ofiyDF^-#Vg2<+6JivlO^MBSY+>U=Dl4}FyDq~CMo`hs4!ymaRiKFz z6gy8)RDxnhm*D|uw~i^h0=p*j4Mub37a(gtK#F9@P>jGV9t8%F^apTZ#Rlr^f~G&E zT9_1hKq1rs>MXN^HmoXu%BKx1Ag9k@LiMC0gCZybS1`$DDe;5ihyjv97BGQ~n8Kte z0HP;M?}`(Zt_NMt%LO?hghSvBGswIhkWDQN3gGQ9oS*{o0C+%z9klfYG*Qg1&v*n= z5p2|i4Rm0g0vpJZ15A#L0uB5iQ_o;(xWJSp4JvsQpmC_dbb<*qJIn@Be}!qfeY~i6 z{RJk_lplivCn)8CE?rk(RN#h18WVW^ErSAV%`Lkw!viMJ)FUL)n9P}9fF=|^FoAN< z3or@V1kELI9qiLD==xa{c(Xw6{=j6$#Nf!F$jM{D#H|2YYzzi~E1rumA0FwXN zHJKMMnKS?<%T9d}E&$wW^V4|qF#bMB#7&tXDaVs!`!eYyym1~M14r(NI&AM}PY@FE~aP@^5}81PadXvGCu_+!n;0t(3oETE0t%XpZ0>X|`( zq65s?O4E`=MeGnY04KZ#-~iVET%a027*PX&Mp_{lQUQSErw1j8<}m)4zCQ`vU;dCJ zx`FY+^o7Zy*^C>e^QMUEGH#e|og%8oxPE$8if9kx)al<-L^T=rO;=16)noiJJs?%I zkn#HTL#d+I8J|v{l_mBds8z~;DtHOrBuh*g0fq-F!F z!1w8gGew(0276?QYJ!>^z0*sxMEyCyOElRWcT8WHFDf?uQI@E%^m%5GSq)sEF-kL`zzLc@2ak!eIX>V7r*}4e#y6ax;AB$Zbmawg8N>w+ zPmj(OO%Oc6ro`b09v%Q?R8E1r)6e9J?qqyAy)92vi*f4ojd`L@LWh}nz+);6Y@qM} zg~W8$d{H~bkJDZ9MHM7KO)GFPDJTel2DZ6DD=L^BKTfa77X_WaH7j2fbTHPXe9;4p zZ>LW#5X};~%dE)3!vY$T2W_+CQ4j*P(*z4e&1AuT0fnc80(Ta-qM!ns;{tY&wO}PF zg`(<^aP2P?4P@Lm{b8Y~0^^tIOhuxdj7O&T6p7Yyy#5TH0{l5$uvk=-@%eQ1Vo_Pf z4bxqVMM1N&rNyF_jAy5>FBa7Xh2NcGaJu+gESf5D2hY5ZEB%$lwkNT;}EboEaDz>;)c*I5RLXFvNiN)HCmQ z0kIhvKG+L9nts1hR7Lc$hys%)Gia)UBMWq11%nfVz~<=^Rid&HPryFBhkut`?P)+yat@ zZ~Ov{K*OZ}R*On9-kUC7BWlUGV0vJU=n=U|eQg3+`V0)#41A8P+)5yya%N>IFgUUo zgO;uv*NQq2QZunuRD$i%qE-P#=IIv$Wye!W&yrhb2Gn}8xS4?njft0I%* zKCl`dJ_zseYLE^dUT#M=MJC4=`&&RNdAJ=p6`35roNWN{xFK?@&o+a2T-=WAicF4| zj(~Zb+>RWIOpg5!9tXE0mm-tn8VHXaA~z!h!e!%jWKm>toNyOxAuGiCeh7~RqO|=j zSdJN@a@z?oj|rmkcxOAvdPaz2zD_?@C#oU1cLsQv-;4<~jLqn{WbgF1yGR*T4T)uZs##;FsTS!0Zqw) z8n?{43mT44JHMFA55SnS}Xz=*c~~tKn0D!kLiL9q7qEsr%u;y5H(?2 z&8)yG@M3yugQzZJ$Mne!qT!5P(_c4;nlP@OuFxo&Fukrx)Rghy^es)Iw(M)zK?@9d zrss)E%1;+>7FA%H^KQCjv#2HG_UXmVq9Kgir=MsRwc=@C-5>y}n^_z$FiZz6cF^=t zU~z;ja04IRA+U*EU?-^E%c9R1Va><^9`e2UX=b&48+CN=Iyuo+Kx>=IRC+&Mj^3p|+92BNl3U(qFMtbBTUr+}k?=Cn#y=*`mAnI zN5MV9#JjEqc9M5!2 z7f@gjSTub}kEkxwaiQs2>HH2HM<#U&ID#g+q)blyHuX^yw&o4`t^8}y0la!%a?F;!^# z-VA56T z5S10X!w%ESt^i6#M|!6T2%MU}euAi~b~l<4Yzm;VLEt{SBDf_1Dy~7Nvp6ycoSy!F zf~dSX!Z1)i01Y)V2%H9~W&t&>L2AvI3_#W>FgqG#Ij-rOCg8{{Fll<|L{U|tV?2uB z(_xq$+0B?j6qp^?P4Af~sws7h2j)WXth^ahh61zW3x+JmJ=4!m6qRK>HvR2HQB}z{ zG{=H=^gm$868Jh@dy=TX=rwk*<5d{A53?|_)H8zG&<)f3Cy7>aeEi%Da>m^00+U5^ znf_0mUO!n>6jTyTn=IPHcy_w-6j9$G=s6cGpu&++;2h6dr~m(%o549>fl1&zj}vnn zsObh?*>izM39=CdJlZOdC2$cT!0pJO$N(w}8>SzcB5KWee)_*DqMJbzy;DW=7*|hM zoF=Nl*7vPhz)@m);WSZUt_k4vH;h@152oi#6IEioKD~dM=sKneOw;YBiw46E)nahu z6gbKTi5Ku92PIHsLLJTE$R%)e`tIqX8hSezvruKY!P-ERcN0KIMJX_GXD~5Bg69Ln zbio;-&QefQm=wT;Hlx5L9t9@Q;!hQZ>5Vhx4edk^>^i3z9s+ zil&njBFO`iT)>7V$pwaOM%&O16P*7 z7IsBY20FksUGX}zXxI)e1qMxK21Ql{X2%m;ps5gM#~oZ*pi{Is1g?R`y%`mlKna7j z4qW?y22VllGl&Ni7#tbFzT;M4faDvH121q*ubC~nk@pH{9h?Ga1f5x6%66+cqIVe? zzf6~yCt3hHd3v5`DC7F+_veZJW%|Ro{oZ`g_~_N?O$$XM7}rm~y-+kBRJ+MWSYmAEz@d7WHD>Fx_{tXaVE1>H8LoD)8R~St^hPuHab( zE>C~ESX7f~A@lUN6>@UyeW1hg1Qt%WT_S40*gidPiKv9ZGk7@(YQ%!h{4itU0G|!# zs3)+98CFDrt1|^=foIdVEfLk0ftH|i;S0_{^$_SrPzHe?)Bl20K#MI@75a>zl>)b> zyDSyeV0<<`cd4kf$XsTO{M9ji&Qehg(M8O#1;~uxAtwe$W`P^iZ!Q&;Wn47<`%=-3 z!Z+aM4-ARPSsxU5`{$QD?0jR7KS}q#Nx_Fv^z?10(%SC0t%;(c5E*G^_ zJqekt1FsPgI0>49N2-=3z?}-m?bF{c7u95(KV5Q#sHyDr>+PTtH5Z&*d6^wgAU0GS z>7JgwLR5uGz~<=_SBeTV z?wqc^R#Yj{M*!v^XoADqj^=iE1!DnC`hs)Bx2ztssfX)7PyMm1aCT{nRQ^9ma>#B{qpF zFg}?sv0Bug@#OS~)uIZF+oxBq7S&~(KYjUXQ40d0@MkqR6vWqvDltx;ZnZ|#6xGh^ zHKM)ph%mUpAq97FfC9J?;0O*7l@O%hP+)RA#gOI5h8h+uip-!OVNhftJ}l<1g@uK} z^cQPI1td@+2o#1&EUuts0MjR~5*24-QDDv%fQOLhI#FH5httc~iOMrRnLd4;s3YUa z={MJbL+IB!QFF%m(~Z`PIuHn<{`KGxTD2Y=LTA^DnxKXd?*`H7&=3M`D!GLeLa;d9 zIsNbkQI&9{5CZi(m>e%NWI6Jp1`-b>kT?hjQURp;b9^v;{#sFm>2VuHIXE7C1*g5- z>FZaCN=|RzC@P5R)+HN7H5n&QKerK_f?jO|hYvIbS#A=wSBE(fGV&*I3YyIz5ogAv zp}_2@k>$93`ut7c;Jdy_)W`yVHiO0yFKBoc()4mrV0LuKc6>11akHp01taX~&aI*fpu=tV?gHnn z=53;O8mJ)yYCQ^U1)U*=5i~EiiCQzxpRT%H)S2R-IkH{U9Mz@lJ49<3r%Z3zA$mZ* z8B{@ljyMy@lTv`WqXFbk(DdQX>B&1qRU=^TW&$_76__2LFl0H(ASF7yAqa{+&}cu* z^a&u-CxAoo!A?<4#s|~aZxxl8uCz;364jk=wu(wlPuL|Yz&Lq&;Vy7;Lk-k>yF`5% zA57QTEt<&qa(drxQ8UJi(;K!kYBIg#nSO8&qZEj~SS{xUqIq^ODlqL7p02lpQH^ou z^tpRPslcP@&ih0?823%@*(a*Q_+t9beWIXa zDcSamf|l~B?H9EW0j)*_ zDNBJx;Pv!}`$gj!-%fWtAgau`dwS{tQDu%v>*m|`u2mO3M${gxIA@g+!D(c1fd3wQ7Q5CisjST_V{5Dw@L7 zz&zdYxv2Pb@nfRGj6bGp9}|^l{5jqGn5dNKNe)=&o|h5ibw)>4fnC$9j)^8RZkc}P zn5Zh_mgyUgi)v5TJuVu9BGfOsi32=Vs>lus6KJ<))AW!NqI!%ww>O^r%Rm{H5c2;0Xllq zM2QJh;A$`#uqv=}3(T9Iep=L*@!<5Wr$rSQJEmVdE!xhwWqRBhQ9s7@)7PF6HDNqB z{m~iGIM6o9v!a$F>p5U8NhXlf7#$@A4o>eoD;mhSW%`4&U`zj>6;)N(!U5WdA)|ye z1ZgWZ0 zi}B#}_DiBJj2ow)xg=`CxMe!$Wl?>`U(+owiv}}po!)y{G*Mt3ha+f(IJh0{s3EXx z`oGJfs&ZSvfy)Cv2ZlibHbuq^TJ69n@N>H36;V~;UEpav@FIWEdK^bVfi2T3uZUW) zfUXUi{_d`*%=GQ?Qo_^w?}>6ue|JSRiLX->v@REvPTw*JbWV@ED(b_yX8P)@qSDg4 zV2O*DgPYkwfeGC0S71?M71%KS;Z@OOu^r$D&{1OMF2MB7BOy}?sQ!=mT~L!1=mHj7&lHoeO*+N@z?aH*TI2fctcd3an1C|8=@wR z8>aW&5RH_87`%j0iJ2F)dJcRV<^o26dDH*j5cPx@ZNS(uz3QfD2jkZ1%(p}XWVeFd zas{jflxmou3jo*^m<2XYFSsQNik0qLqJE59r{B6Is>0YY{r@ddS;m9YWp9hxG47cj zb6eDfaqIMjw?%g|9-JO~M^sq^9^$+#3ea%gF@4G%Q47W$)6d=!m4+%%QDWi+bqYae z-U#fN{^yRUj3h*>i4v15FDqyQg9Fs*ag-N0INk8Bs1D=7>2VOM`>v=q(|?}nJMM}a zF}~ma`mQJ!BWPUX`#n)J#*NeU?u)uIc1$n14_aslj$1Zv1rEnw9n%Crt3wn)oSz-j z*WVXaVf;4z%6(B~#@6XSK-9tMG7m&`89S$YJrMO}Tt9ur15rh`P5cVH0-L7qe;^9l z68z%oV}$S? zOb>r7Y9|G0WwSVdHl2f-0H78YxXE*I`ufMBnv6ZuZ$1{4X6%{%^|7crWA}8~C!$J> zJ<}bYh)RP74|N$B6j%j1r%xz{~9L-)6XWU?TV zx1NZ~A?w#IV+1Kyd@6c`ankg_yNqJf|2!4dW1KYIv6EGTMS)SEd%F8G(MZtN@@JwF zOcQyhKU^;_$=E&p>NC+@ShQ?^`&=}dQL>Yj$pJKW&H>KJpcAseqvwwIrYF7>b?`oY ztVuwTiHDuralx5p0YxT9VMS&hHg3npzpWr1vm!I-u)n1fn+157xgEDa)PN>Dn7JK~ zB6v*Pj&G*Fc`0hZxNW-ZD^VS(_l&Sol>s!G%;U(D1#XlHY@MF`O0<^o{q~2iMB5n| zw@uG{BWk7modr5Y<#IH%){1E7|mz>(?C z-iU@X9-VIYR@9L3{q%yjq7sZ-r+2;;)nVK|ecM}68^#^e3ztcYP3L?kx{dMM^aJli ztr?GP|MO1NiIIKxGyz93frja>A4K~UKZBbzD&WJuSv8mxlsG}d)(03sdtX5dzxPc4 z@B~QgT1zcwRbU05bzlbU_?w|e>yTbmbqS$&5|g+kc3PFfyK)KIf;X9LGt1a9eEV^g};I zw=?dXe!x^rgmLHe{$HZ9>^r9kC~ym`nf~stsQC0#zeEifPfh>*OH`V1?sW0rqN6?==jq~%V)ByLSYT863<_)tTnbDIJPO>7 z3<5i+`!kAZfy&2fMloIXbJGMIRRkKQuV)mi1#=W29M$O&Ok$>t*QWO|i5aRuQj>ua zC&(oxN*s+w`rh zVit@Sr@vzrvt+z9U4u<5iT&v`0Y?#mhUpX8#FQC7Oy9~TcAxR`^r`G(9ZFr(1svr- z2@$$%4!j2kmJmUk8W&Hu=MXbs2dQHcXxLuHA*R8INF-Z0#grIlPQT76rY;0ZE4%`0 zz^=c-3p(v@`axbXo#{4QV%F-XK=VqVu`E`{8G@kJ(uc*<1ROzxz!h-R%@IWCSi>$R zIQ=%4n5e)H7J;i^=@vH75)1~2i8|b3%XzMW#qY2pwCQk*2~C&f5fkB=3wFd5G&w;~ zvJ??85x&PUnwZ&#dvc27eO%tP{67Ri-9IxYlX#9Sg!LcvQJM`7gL?iB_ig+@tMVu zL6O7p$n-D~F;MAKBO>O{cw_n*5wTQ`o8Zvc!Zv+_pqTpf1W~aYf;%A_5SbVhltJB( z89S$YiivfxgUU`xfi=@_iHYU0-vVoUGW~&=n8)<#;$nX6x4|NBAR;CbV)r=ifJJ_= zLyT6C6XTffDJdo^Jb?++Q)&UVGuRY(1nzfUH0Y`K*I&Bjt6+NK-VwxKx_~d zn7e(yidX^21_L#)4QtiJRKZ~{FR*6%O*OG&jPs^1P#2S9oV$F#x)>w-g=qqg3IYw= zk7Efga(ZGrryr0O zW94U5&{E(Pc)$-m9Adhnp4hhOA9TfdrRVTEG8TdknQ^?qhn54UOX!K+VgY5g?cemo zmM}72n?Bn>>@MTn>6M0JySPuoOk;7Fe!*C5?(_slG1lo1jKugMMe+%LaDMRsrGFnt zaWAo5+E}cRk@4sBUK24>#uL*In}{h(L5j8`pi&xKHymJB6o+J%X{KWP5yi??Q?Weu z9n%C9I0V*A_c9Z6e|W*(;M8FH!ON|{ zB5-TEj*S?!!c&C=><%_?z*c|)wgwiki)_T=85z5$GuerGvcHD5DuV39jtfER9SbEU zka`;>W`RA^we7`%l=e;&a0L5+9oE_ajgB1w%^=nAiEd)Dj5D{_yNOL@WPCqe)I-dK@z{1R53x{20Z2T6E>F>5TEghqw|%{* z*fvJS$I~bHi^)uH@)i?fd@_AwpqTLV72aY3j87rrS0UmHOT>hy{|1Rao6h4S=EV4X zy1$Q@BIAqcg+5~P0-$`)slejMT#}{1#3Ha}`T`#@BgU80FDi%&i#h%UH6&Rzm_7&# zyaFe(EuuJytE#sT%4MAesjBlr}flxOf6iYBz&;UZkK&TD~wFN>w zfKWUkVmgd(r(1@AHKanQi4Y2$GA@LONie>J*!(9%Op@{Kbg@vdVkZcd2cc#`sACZ7 z6NHir1FQ536H}7}B^V({f>8orAO&fm{b8QIF-uHr`us34F|Hm^Aqq-PN2c!&6LaHu z2~ImxSf)D`iHS{D4i^(;d@|iK9PDIJa89ob2fGOD(q-Xd64M=n#Du3`3>T9Gu|%f- z3l|d?m_JQG0ctbo{&bz`6T`(srdvjcNq|!^l9U=msx(3@gYm=kk5OW>(|<>Z@qxP^ z>;h}13q*>^Grj<&aXH2(AbFYT*^y$_pe7Eo4b6-Yb52K!Il~J>a67<8iQn?AQk#%I%O zlf?X37fb_f$-9swCc=ei?N5J~Bqqc7Vmf!Sm;vLm={Ct?a_-;xK|y|*-xXXI^D8hp zu9yqb3u|}qf+o;e9Zv{l3H(43V}(SI;}-@6W(5v`o6{F2i^(wFoW3tvOi%P1Tp_49 zhiabAm?9>n^8%c_w}^rVqM7OyK&!qP1%86MDBwuHAp~k4eFNqFU(?-F#Eck!O|ME3 z3uOE~{Y;9OM%o{KN9IECQ7Pahf{Y3v7f%5D7H%o%vAM7y&R>u!wSs=FwK*INv7$SVp zTnjM(9KO@#)5LTcUrhH+6Vp>!JWT*(jBpmR+aZeKwoRX(26pGkG%*#%7t`ORi77Ds zUh%69QMJSEh>@vw-3ltZw@J zbTLjIxJ~>@>=0qj3^8t@|NNkPTXh*egT2KHI`LF3Lrj4S61zQuO6=1aGsV=WmuHBX zGJc!BHbcyN`kD+ekLeDXVjPTrK?3&EJ2J(D7#pU~&J&l2v34N^M-A@K(3hh^lb%Ve7HP3g$?9kvFV=+#5A#bSica-!x4pW4?``4 zM5@4=>H7-B%)tS}Bd})rpF%Nna0d)F+|e`Lu~bZadUz4S^X)}&&&z|OnjbONCkWc( z!3)}|#Oufc35^Y~fY@FP4u})QVrpo$q`;c#|BA&-*&*qB3B=045^!OfS0ZM_2yUmS zi9zBX+CpT2#?Kyz@-HRes+_A-%z$zBbn8+vW5yTL^Gm^+7nO?HgYy6=?q8IO>41A+ zAdYmIm-3T;FP}&A&)7RIC6*7LEu2>5-3)Ht<$R-Y|^A56!&z`PO zC#KEVHr=OA%$o7V^o}|)6YxT=E7K3wi77J9o&LB^Oqa1^x?sJSD&ytp=JjGqEbRh{ z9Mk0{iD_|c09mSt*&wN#B*r#fhD}^^`kQ*O7;s#$2sBRX7n7Zy(;z0y*fG7KK`a~G z0R-vpJ}9O$U9M5gOzl5t1Qt|gvOBggg8EJhtd2XxKsB0{0*e4-ylRiw^ngw=#p$yf z#X1?grmHrIfp*PzHHjs#d}eVxGW}hXm?Gn{=>pASVT?DYr#Fl31GTjvyA>3Kpuu$zOGGdEqljw(4n(nPQ~3v;dCXhy`?DPj+Vor?h)0Ml$ zocSP~KJcIdkK>W)CEa40jI*cD>lSlld^!C=x0nv&?CHEc;C8HT52Av}>=DytJTiTH zkC-K6*Yt}$ViJrmroZYDlVf_qKmFk}F@@<`y<*}HkX+FtsKmw#YFU7ym(g(!BfMP- z$y9HIpz`3BhXQy&@`Vt%+1l7EmdrSN`qN%;SCYL?Oqr!yfQM`P#a=OC9wgJbr+?@b z6JvZaJ*7`fnXwz3-j?=>i7?KdzN-(c_YO?LjIjqS9nvo*r_d_^8np&HfCF?|8lv3{ zbpW_JUEePz!rKR`#2^E6FNCHqoG2ztq;7=?Vv3Th4vapDAohT;7*gHL8qL|F||9xU|(`QW-lY+1= zO@v#*IZ4a`oG#U1*)wmFST$qg^jDL_vKiZ_hfNkU)_}x2WULr@pdaGFAE1n4&C? z$udry{$QGzJ>#V56Q_fNYr}Lgh3WCr#YE(gq5>9j;F+)^yb3%5$m*>aCxXnCoz5{s zOr3GUbb}d?6q-0qOlEq{3^7TFJh)$`x&8DEu?$AWhUq4=#P+hkoF?EXDbO(e$1Jfr z_QTTz9JK@*rq|8}Pem-8Ew+?#@^tq(VseaArl-vj18tj}I7iF~nw<CW=WjrpM0{6IGauNQq#-ybw|ZwW~h}XDJ9Pa0hd9nL&XpfgjV`7lT1b z=_xD3v>1r07T^jA&{uB0$AxCuu=sO544GQ!SwibV)Mb}4Jf;S+92DN*Nas!LJBSE z>DxDm1u{;b&bd*{l5yvB=Z#`6j5DWqY!urowi7(b1fOD>Af~|TIAQ1X=uKiW91Fo! z^B%G354VVkO`p0+Oo^@IPm_S-_UU^!iJ5al27!Nwfrc#pZxSA z>4iJQ3i&_@1=i_!A~rp6tC;+B{+(j(9CIMq9wEdry>+LU9@uURfrjb3c7g{fZtWC1 z303N6bQV95mVH#W60O?sQPhiTwq%knBDvHXY0XRbJf(#lojI91=5PKR8Xm(M+IW z`p!dQC17befrjap=fPnUd0xzA`i#S3-R!N9X<^8?kH-mL{6n67YCtdYHKI_U0W=r9{h*kU@{F)Et1whsw z6Dt8%56U18k{cwBi!B1103E2C4Avqo&@esvgjkU}NWU&<^bIm2z{{#2019#e1p&yd z$4Z=zOrZINFDJxiGftmA;iOnFXdYIVfx(Jlj)(%Q0;3sIhlm2GK{<2!?~}MQ(797$ zGK>qSzdj{q$vA7e>S-|r@Qe??z>(=br@>-vr^WnOj`J&VOy7_pCOT2ghKvvV$#!> zofVVkS`Iek3#!~=E=XcOBZScM=bV@sI4liN!ty%ftm%dq#H<L4_lb(M5oR|*dtm%wb#l#t(OqaYW7Rf)0mxl#Zo6P`?zX?pA-gp&X#J#yH=E}Hp zy3sYUEXJMF=Ux-DW?VS^<~1>Okg3I zhL|n5lm*p#fj7iD#KHEW`He~7{qzqv#8xnFoBrmKnBDa2H^o#S{xbu4jg@=)!|P(& zjI*XE-xBkI_(@F?Y>)ygv=z#%zyr^~?{A4&FwUB;aa&A>y$4z}M&A~j%{XiN_uFE2 zjBV4+?uf;(gK{^hrwZ=P9lawK#5jAp#9gsU#v{`w-4*i(r#?`p=EYsHFgVBco|qGu z0~-G6yC)_O=75xKxhH1D_m07n5Urzg^?L*a=XL`tgC71>=+HZ{ox} zrx!mIGi01Med$B7aK?Gl|2`D6VVpPJ>JeBl=aJYBseddAtd0#lkj6Eu;|}gD1<(pb z27&q0?H-Hmkopgj-@px%zrh8QUoc(ZiP$ctzbwT?wo%6rI7L$S-{TgEQYgD6|phnOA zD8@eB`i+)O#z&1&U{@w_<9H3#TW( z6%z#yhb)?2{Z=dm(pnRlp8HL9KZwOK&Y8aN1GwJ&^Fb^E+A#Ekwh32$6szWX!Vl`qJ`sR8!(n>fCow0+ zCDS*461xt%u;;T_Cb(@2%5OhEiv=<+o9_KZOddR*0m^oTU&It3qhjm=Kc>(8B9_W{ zc>4b@Vy28Ar<;BiQH4$A1?S zWqd!q^t)IF6^tvVm;Mm5Rsc6hPJmW{C@_O2&;*|FD~N;cXfIJ< z)nq=wH{I}|nEdqjKftXDzn@~xj7z6a`YGnfxODoJpJMKeOQ*~H5>sdVGu`Ev*hX+r zFbW)*{^ysNHshV?8o$MK89z@C`z_YY{$!efqqac9^asDi7P0@GCg5l(&@kQcubABQ z-+#rNr@#6m7Qp^*8tAMNu<%r{8fzpq&5X;Y*Z%{XyZWD4ELbt9Q2;hW_rF*)WN$LC!N_6xRfgtV$~gfyT!{ zosKora~Z{tfn5t)68hk`nAr3HCUMZ@|2!t~2FCZ(<(b7nYfCMd#Z?&JZ;xdbzX~cs zjakJ(MQ9GIcq!QBvaoRi#JnPG7|((6>-1PQaa*t@pdK({0C5N7v*}gr;&wrE5zTnV zAHrFV59T6uH*df=AA}+0VuMJQ;}vu*XJD#8eb^&&r*mP1oZT z*Wd=V$ypsiorWJE0ZZtZZja#f4IJW%(%P`KHzLry5mUBKYq&4<_`ejb>e5Sbq z)BCQ7NlcI75?A8{Wiw6Y7eY$Y8TrJ8r_bXO4`SRo{Uet+sKKqkEe=}ra8W@VH0_zl zExrsiqz9T!ozBN2Uc&x(nt-E{K*Mwee(*r71Hbr81@P_-R>uxOa6JU+Rf4t)gBMFM z2&|cGO0xNQ0cUU3yE$dK6=VI?MB==cEWNEC2$JCR#lZMq1bco)|JNaAEx;+QVT zBd!E$+p^Wpjsm=zM69luL2|JD8H2H9~Hz^r?-lT$AX8yO;M6C zzo>XF_ouqF?5iUw2&T8W9vS%YVfz=M?v zOpY7of|eOTmLh-#3m_E=c*qdksdyoz2$|>Y5Cn~tOcoQ@V|)pk?U$W?UrbySVi-Jb zu^I**AO$Zi>kxz*2I_bHn657lHVm4YK1PW_MyjSC5*JTqTs~b*LcEOe-1NB;;);wb zrtb$)Po_VV5I1IAHeFOwT#a$#bQ?)=BgW;^^CiV47~`jRNQ!GP9+=l!qUL`Hg z&$xVgm$bMaoN9E zkC7EuWCXiha{6>xaXHRa0*Y)-4BU#=)Az@VNld>cE56bO)I!i;f~?j?1a^eb%v!~yY6L(--GhJ3*+=8h~VEVZ@@YpK2ExAu# zyv7P*hXbg5aY46(U4awH4(Pa}BiIg53NKL*2aTLB@DbDCmIj~g3tCVCUf~2S2|TA; zDvC=nu9+U9DDE!_Dn;}edjyrlctJDMYzj=!+2-kc6vd5{7Ecp^PF{ZzRuba{owN*D zHlVIfP@WCUpf z-z;R1;^hiW0t!4V^`H(t@^m6>^kNHiZt|##xDimlF+SP8SxsDuk#XJhbL!&D7}rlP)etviTsM8WhIka?hUrY2 z;(3hgrx$99uVq|6U0zGPpK<;4^;+Vy8P`wu))t@2xPJOWZE?^c5#~DL6};!$C~5ueVuetL+mcnK$1hMC*(_4JFn;wLW zYhY|y1Mv*T_0!u7#N}Al2`Dj5@BhK4JpHtRcq8N5?Y@TMCm9)=r;8hlS28wFpJ*)p zK>Hl{a6WKDib0Vba&;gpsFltFTAs@ex;BstbZsEBlK6B*a~9?4`%T0P7@M~nn2I+t zPG4^>uE%&{`aN@TImSiP|C)>EFfN*&Wg)K1xM=ze3vp$}Mbr0Ki2JE8d(#3sVBtQK zz*o=-ooiUK92r3SYIZP!wv2%Gf7H843;dXFXelnmv2;tbfFrxWo9V%p;;Nu4*H{%8 zLDwXK&#JjSy~9#mopIOn4VL1fn37j5#oaMQb*#jlF-7aG#O)aGPTyxGuFm&kYKMR( z1A{sEgqM%gyM;Jprt@2ii`ewBE3zxFfKQGEEgs|mA0R96h7ojv*B?eDHWmj3P(8_! z1-ar4)v58;;;xwXZm|}3frv67d5gnFJX+@L-wvdkTOqLmjto$tSZ^b)!uAKGf^m9` z5QicbM@us~E}s6?MjU+Twu-H|2IzDVKU;Ap#vjus+KPkjpMAeYL38>$Tk%NHeGr~@ z;xddErr#Hp%bkANPFzUx*7*(rM?u*6cc24|z=yF5Y?=PgPFz~@El8RTA)tfh-)oMc-g?$KeK|4LK3(zeWQbTEmQNn=?0GC zVhXTp4HzM3TW6RtRe%Qm8L}L^=QRpA3QRAT5}i2xyQ8=jUR>WMpK7>;o?R%qKd%d4a6_^ovg7Gx;7dOF=FO zU{qiiSUA1HSsb((YL&CNj^fAd%>n`!xFFk3z?TFtLQdud58!YKyq*5tS$qlOl<9L^ z#64u*gU>H#ufQU(dHQKraZSb_(|@^(gD!$J@DP`q?&&6;%y?mXp_h2kba{7i z5t)4*jYtQ4gKj8N01f)CV9XM@INje}T$=Ix^lW!=JE*06pt}oL9W}BLmVQFD^nyE@ zrHv5#q^F1Lu6z_l-*d}uvWEMObfu?0G;ATxf<0T1lyS}&h492_DPk4)GaUTXBv;|sKc6Yk1 z4@7_wbb2p~z}@Mae8kOFAW@W`Q4UAmf-pDdhko=zLK@@R5c0{l!HY z7ft`_FW%3%ae8ZjxT-o{YnVZv2UQt&r(X;ZcV~P$T{2J{dI12ZCi4XFA;ZwS4ZycA z7uX1kO|J+P*JeC2eMz9W3ge>bCj-Snhu{7R6t894Brv`4s*w2f2|?nljE|;I3ljHa zJTd)2khn1~=)7Lg(FKq^q7W=@DEJn%r3iFjBGgl#rY8l9YcYPF-Wx0~!8mF9vS4vX z#;Ma^1dDqxPMmHSB5uOiI6W;yT$yp|^sW$bC8jTY(*rK>i*SI#6zsghcmaj!uR_GR z7~f9+8X~U9yA*U)l9A)bhoF0SrYnbv+cGYio){_~!FY7~u2AvkipK<`K+Ojh1!nL$ z=^UV=omfBZBK|2=VfGEIXy30T%PgM^ga-E zV*0vhadoL#pm{{l{G6V%o2K806Ym8Z&5mR=8^~x*u+jDL;>#HE zDX>ozKfuViXj-zkKI7Ht2Fc>m9GyoxKpW`hP7h8N52?S-4ytt-967Tao=HmG6& zUGON8CGe1437U~Xm)SFzF$E~FfQDfmw?K}ngP-}t%jCHBT9<$$`0OKGnj;`bRXXkf zY33FHYt{xI`OBmLy5d73OW-~a)Iw-qh(&?bj7dQObY`8v_UVBs;^K_gr)Q>!Ysmg! z0u44iV^&~sw8;W>zCedsF_V-f5U zutONpyrF>{2B6ab9kLa`M*f1GhXpzy4>Sh?^IRLqNG6cy1ff9(S{@A6bANhHs(2C8 zTL@BUWQj*I-kHvoE#9j4W2%6o1$fyLBPcg9 z2%H1mht8nOz#=e7P=Qf_!I2fTksZttI6r-Fws<$w1K#O{{Ol&Ij3ojOd8a$NFdI)_ znT$7Yx2Z-8NuRe(;wuCH={_-$wx?D$QPf( zcxHNTfw(wh)AZH?@y*=7S*0B76+t6h&C{da$uvwqTqthBvPG2JczU7}m&$bcB5_vR zhrF=U%A~+YIS4%A1%&~R5(6Zg3Y=i%=7vf=MVFeMSR}5-IBR-Gk+>pb^Ym3k;-47b zPM=#WuFSY``oUsx&|QOfip3=upH2T-EdEXIC}5b4ECMH{&ng!;WjrzcLbCWjh)YY|;6azVbEpe+0O;K5 zjTPcq9Q!~#9)Y>jKUau*fXAUvPIssjxAQ@01Rc4zLng~{!SN0OM;1^vfbU!4QD6pJ z*8%E9B3uE}(GN0QTww0>Qe*>Qn*mg8xVLSccq)2*t-GfXcZ?EqbfHW#*`iWlry$t(p{fl~soumXvJwB813 zWfqt_{d%>y6XWUWQZ?f8jHjnt)riZc_kzx$VRW3gycN{xIU@i%Xypi#5-aa|MxM3c z13ykMfzBiZ-6H%Md=Qso!xkj9S3qjlG4iYdtGxkNI~!u|nFHYSKhI3xS0irEcy{{3 z8{+!Yb!)|i8P833tQ8k$yg5CxR@{>DBw*iAzIG zk;iTdEQpw=^VNw+h}x0Y_#>27!yyP3pxhVs3&`$^>Rmc(5uc2+ZJ8 zU{O#II1IWz6m-*o;|#DAD5&OvPQ7Jxe6knfeQ>ZYVOC=0UCqd|5*$=3;A-!_YY`B* zH2p-qxGdL#)lCA9oM0Q@*Ne*p(qb zW`WCK8=kNzvAXikW#pL;w&DfcidRb-LFw`G^jRPimVgchW)`?S{Q!t}{z4N(?iq-8 zW>q^VKVP2C(CTBreA>@oqb4N95({ zbs!UVf;|UwAJ~Mcj6Bo9CcJ=~uo@Ikpu;UsflT;!v>D=t4<3w>GX;)MFKz+njkPV}c8uqz zziAP-N=Gfxet^qbX2%m4dEua+qA0KBY}Ommi@>kt=Vyf&S?Q(T>`Z<>I>b%E&{I>jXzZ%hyD6c_eJRF(`1puz_c zb*S|eDC#spXQjd`HBk8nQT;H1D_Nv4|u(;v(g7vVY~mjxaq5V$t|MW?vB zJj8C~V7!5pv~En->k^liMvWR|1vjUsbcyFP-kN@;OWca_)^z@EFy#fITD!#+7;jHs z2BD63gZs4qyTvUTZ%()D5jW*|&8(=$1R9-U6*xS-sz+Rl@y_(6J>r^jcfjj1nH?9% zf!Y*okOsyISrCU^;Oz7_J>ss6XQvzWiU%^Do8HnZuE2P6`qEx;XU3D$U-pW7GM=Aq z+$ZkJbc1Jl-~@4HrUzhJoTou7%W?X&PEav2clySDaW#(1hdMw5d2^?K=o42*SI-Vo zuOP4pq*PQ9G%{?)bVCNbf$J`)#RCcn&~-bY^W9klz$S`=zfE-q$D2&vZcm;!9^ zZg)&vg5xzv8K?!*Gf6y{{}`xPV|4tq3|tSKnf`8)xSZKHcwGj`&K#iZT+h=8$;}+l zGS%@#vCfjE~#fmPr!8|c6&1y+GQ(@my{gO2x)pC&HDcyfBpG;t%w*VETe6BkEn zd4m(W98$h{Fb$<;4wHwwOmw=q2jjKranr>$KuP`Jba1h@aJsk@E4Z|oeqg$|B;(EL zx2B8NGM=3tF+V)0Jn6TO}isILMA0a-c@@Yv|FI%#Jr?5MG4GOQizNeB#Pm z!BYuJBp{8Qpk^Pa1UN8L+@JC6bb(poc8uqy`_B>=wE~4cq9!;X3w9(p3xS-#paAg# zC_gE%3&7kXslX<1bo#tm;@XTSr=OZ7ZiN&frJxW(F399&qeKWy{tl@552~1hXNx;A z-k&~gwz$0ss2l+mS107mm_C4V;|Dp=4#d}NilD>%K_vp{v@?*K9d{s?HpbI!=7{q% zo|~R`L0lGEmls9b8>WDBge@1E~iO$Ywd7*)>hT@kuZE zo`Z$c@6QD%rk``ggSCEkwFwA30B7SXoS<@`f~N``MVz1n1gg{-9Iu1bOfQ=!F2@E@ zKYbR64He%vPh2Jd#CBv5cnCIW3Kz(v5}q=UNi)C)wS!Co>4mFV0#;MZQwmbE000x}WjMe(Ks>+s;);yNrx(l@mttH$J%53?9OJaA?%d{j6ZI`a#r;>4zw!lP&|gmrQ}#@rNiVg29Kbf`$Q^ z9U+m-?D#=6OW@@6+Y80*nC`JmmtG_;14?8_H`TuoMP!NTfs4fTvB<*{*{nt4pqrG< z7KVX?S_;8Ow6+#<8%0dVau zEO2)E#l_-rk~eu2L>zxJfaW2X9YHSn4bsagFn7Ag5^)*EN7GZ6h+8r~o<4txxI#TB zF)#=$U{->5h=MM5X3PRz&6SNQ=hy-omIM!+!8Czl7vvN~ z`3;fL<>dqy6c0o}HQx_0aJ!2K;TVVq;6atWRJ@$=$@Ird#iJQ_O}Aer9uGQ#Y{4?| zFve%ozb_L{2XPaYi_3uMy5-_ojL)XOTrMulv2a&2s82C>I^PO$O^y?%S_B+H0b;*G z+*|QNJ8a|-;wI2;aAwB_8L*3_vjm<`U%f)yfN|0EJ1fNF8J|qISt+i>_+)zgN^u#r zMeu+F-=hHXqJjWIkV`>Sfy?p8^o1+MwHRMaKeJNYLi+RhCIJNz1y*S@rUfzz%#Jg_ z7A=s;5_maXewDZ}|Qr?$6Y5Vfz2o;u4H6r%S96&t$wYy=jfOp%h#zXe5^#?op5<&aM%6QGi%4qXfFR zj9G(8LXiv20fuYEtrT8PL=9$MQ0pAjN@aHZAOi~J?zQ4t9I*b$^u24v0~nu7=UXQZ zI@ex*ow%#fS#YT`M^=fImlrfe!t4l2He3RTAOaZ)@--}(O<%T7TpKCx!Q|ly>h(Ht zOOc}j;HxAcZ5B3xR|1Yl`lef~7q@48J-uSRIOuqnx$DIv8E;JgzFypjanW?G4dNb* zPo@`d5LX7BD8E5Gkn!pCmm9>*ok7LFf(R%Yc8CeAXE9?sAO>ofiDhwv&)oyL4VD|> zDF<}u5U4%OpdjGLAn<5<@oV!t6Mq%+ZkQgF+g4BWxfo03-H#dq)OU*?w3nUNA zfz$amiHpnJV{w!#ag-}{WblJ040sSZZW7l6^-~~;pO+byRpDXOwMpEcamn;so51sx z0-MFpFkYE{ceD6%8Cc=DKu(FnjOhfZQiKE|sHd@Di@1|GqICkQ!yx4+yTHxqKevdh zf^Pa%*eb4T4!wUJbOVSCsKkZxJ(XCb6}cS2!vQZpw+JY(NP{MYz+HC*P`9ULtGK55 zuXPOqj_;NkorQtz1F3Rc1S~dKW>93ArrCJ)i+KPEa`r)z1j- zd4h^%W>7y2Y0v<4cn+u?s{tw`V5&hO4ifwUG6!{_73>ZLZUrvTNbNRpMYcDPFYUI7xAwHY&^7NLS;(8)4z{in;ty>@t>zy6jDXz$PZo2F*afxZW#5pu3xl^^F+2VM89ZHom$)QH2h8ArUE+3J)7FE!H=v=v=`(hT%UIn2-&f^$bWIZ| z&>$nVEux?{Ng7WED9~Ssz*;vGK-CW z$=%|XSh|zO)At_*H}Dqk7T07vIUUrva|ZXx94}Ao1TEr49&`rf15gVb96+E^29)tx zP_(rj?htU~1C3knL1~?Wbb{pJMP&XS@f^mppkaHx>0EooMVQVBOlSNpE<9bkQk)YM z{*IqOeRN@@lnI*t01w?OFoRmD81{q4`{Cx-?iEi#_Ae+`GfosYm@dChTnG|N($jtS ziSsc+JJDVH#Cg!N5ojpoHpmsA5&I4MFgyg3hmV6j-6!rNg*r?Fl7~CUd%w892&m8j zO+F|vC@^R+Wq>Y0PJAI~Z3^e}7PXE=(WP40pvi=olSVk1Zr=T7QsKam{IdOr85nx?B z$0q35BfP@~Nf{7(K?55M0*GE8DCL3dg+&BR6KGybVfxi$;>8euLGm%EGw)C-ZZy5) zxHu1}W`Tw$$P`d?!d%Zh-C&ovglsoxqyp9Xtf0oXOqRfX9#DFg;8+Y&0vgOM=rw>v352NwA9r^Gwhc0O+raMYh3e^@+!y3A>D&^4g&$YOr^yk+{wgW^Tg z+s}wQvYZuQa+n@CMO<47)Q^L8_91;{Q2qTuPGJ3X!L#CGlHZ}Bsl=iH8U*-+7zA)Q zD=sE=A6}e-Dre9rA0+ZCSQ0ps>3> z{li6Z(4HSq#~L)|@?fsG1mn%=j+ews%|Rs%I4Q`QF--t9ZXm7I3E(;x=8pw(u$B+F z(+_g(+e_kR+I!d)L6;nY5*M>0L<`7M3hZV~4Ppum3ZUx?L8G0F0^q?&5kAnICAcs2 zK{iVOJl5^Xcx`&(b#c+@r!R{Op^Z0#!Wh)R0A;EhGFbvQrvJGtE^ULzv*-$L!jmbu z$_15!P`wJwjvwT*1g=eAJ4akww1Arwe#Wh_iysxH(<&s(2vd`{~(N#bp@ZPw%)YF30#``f><$ z?5emYmzgB)lu z5OiPoUN+ETPyuMfg1ie-1fHP<%}+TYp7B_76jeENn5;!cQw%D+uUKuNMgY!sM&@H)6Ti8Z*K?uz$7O9|MB zDfkpf;-) zj}Is)JA`0uRt86in&};n#pPgn*E|-FfcMKbh?z0H5Ce}WF+08x%Tiz$*fU+>iMR~o zx#_k~z`n?QB5sE?oeC;79!NuMU=_GI{lF7(EyfemUq2C704+A=eJZY_zMsvJ8MNYp z#X$j7Gd_^c5|{!hy*Ge|GG0i7EZQ|a;iH9>@54y5KW$ zImY(s2G7KG3|@dok?R$h9VdXNR3MJr#RfWoc9IyYBe<-B2)<@sF7Rr4&oglY#*@?c zK0~RIK!Z{fWU?H0f_hM(RV{+g#U-T>bG0z}Tc8>XG_VVjuSX;jm^^Yvh)aRn@gRdg zxWjw`9CojnoenUB@q$WjkYy)9ma!wXySTx%?+0nnz!4}^5cY#24x|OS+sB;(+S3hM zss^?KB)t@5B6zS3+GHZpM982B!~qv%!DDID9bSk_*}kx>BAr-TJ1tgSfx^$YPp#*@=+Uy4g{TmuaZvJ1?e z9{&`5z~t9}7V&@v?gXEUi|TC<%R3X2;`)pyr+z+TB9Ix88pNZl}) z23WvOFL)ykI(N70jkvok=yEb<1!e_iP38thbLI!K+>YF!eLz&}lY_eNZc_W-*B z2ka=tXVX>Rid!?DoSyg=Tv0E0E3OfW+Gx2U1{w?idshH4i2+)92^LdecDw+dCVe2A zC2$?y0s$3V$U1LMmwhMRV*skr5pDVjkTJOhpfNd6mWH+Z9U=2cp!(_NJMi?d;vaF@ z>6Y)sc|b!%5&9CE(+l2<3wR)03Tp985XZSV4s^a1xJ*MzpfD|<9ChNoxFX~G>95|4 zgZ8qEe-O7}eLYP;;NA3y58`qh@M7xW2XRr!3)0BRoEcPBibGcVt@(h`pN2_I0Ob-; zDfsY%xTHU#l!M8`av414nZfN&h?_xmC35il;o*%{4ppGs1D6Ys3ItvxF zpJ&cTaXB-X%i%^tRxCn{ZjeFt2&lIN3PDhCeE0}%)9`!}m*EDP2Oi@S_&i<0P{L93 z0cbw`0cg!5XoVbd5(gOp>IgAAf`-q3PoMiqT$1A;NEM^N-0Ay1f$R5spTuPt7f=8F zNn8?YHfTZH=jrmF#l1Kdw=_VOG!%Xo7nlAGcQ&}*0l5yAgQqY4EFR4GW%~Ee;&O~% zri*72I``K$Er|@FG$SDW+BEW zd%uYXGk%-?@SC_C@PM zG+OEXN8AOerUjLwpmYzb_NK4=gHp!8@pXZ$?f_@B53(_i-Kwg1E=WY9XO z9~iQrbN?Iy&!%tuC$7nOZTjth;yO&%1*Y5o7nhJlR1T1_D@Y*&Ex)GQ{Rj8!BL0h4 zOT)tKgf!^FnFrDe%#IJFvlPSy{<2Mf_g`F%aqm=72^Yq*Q==rj8DC9ZCZWandg?_9 zJ;syM7$rr)em>$a{0UDuL!z7_92I_510Izoj_rjPRCy0Z#h(BkN2xj~_eIm1j z==1<)2{y(X)5Do1TT z0SlV3plAlA0aVQeEE0;+3z=c=Mptli`WhAqdC=NOsK-Dd_CY!eX?Ycr!~}5J014+^ z)Bm$b$U}M&N~{uUY@i9TAHCE4SS5Tj5TOt0Jb<(yhyDae7GZW=AeN=TD*&I!2Vd$4 zZghj(fT#_jZeRnI!yuWT2U@`cZ`0SXOGt=;W^te@K;x4j1)!DEhHMhz%HVE{D|ksc z#4d;c*baz5|MYA&2|3kX&<$;%zK$bx5`&ry@($Q0kQxnvMbp?NL`4z0LCrUi45*&fVwaEsjmW|bfmsR*gXxLv64H!s zr`NJe=uKy0laQ2vwC$nlVg3dgb%$L-T5J(K%E5sKanS4Oyc`lLF0c{;u7rt)1#|!) zB9|cIZv%Lc1tBwuU4a7>W7A7HB;+~fg1SYZUc(#?2}#M<@Ni*rWB|9cLB0b8+c^#i zCC1IuKXOPIF>ao&!YSb=1-Z%kUCw}p z6&R8FUMvc{3fz#*cg&8U_WMKlE(;dOiqH$7MlGn1egUKx)HDzfkPw~zfnS0RsWt|k zB?fXUJbwxZfD2?D0SQUa(p*C~36XkGt`k7&fx|R`iwlUSU3r4o@sdaMT|0l6o3K-R1z%^l#pbcJKf$zLUj6hK?ycc z0SECmc%}u_oDYH$q8#uvZ7(DtDhrKc_*5CJ_Tp6lZIZDU0*Cm0Aqh#OMWs+Rj#EKd z2-G$MnWTWjB*)93JP%a`s$@ZinIcxGf}6A;-@ub3(&As}R41frzc5`_SfY^e;Pm;z z5_*hhr=Js+01Z9!w1{i-I3jO@uoIC0txJs-kpK;jFA|Z^5JR+1L5>H_5rK!3ABaeZ z)Pwq5tO9SCK@&+2LLk!%3(UNgy+(fxL!1+5$2h(sBo_rDs=Q z75K*nGPVIU!~v27EplcDucU{}@+q(j@ca`{(sQzJSI}z}csspbRKg@2yK52sGj#Vs zhDDIw$Lh!k8HfQn^EPNI3KRoeViJ9jJtdIM2iKd$jhI0lf1Va`o$1En5=v-`l@}oQ zmL|4{OEaFFzP3f&iWRgQ1hT^f)UbgjI8cHG`5r`rR+l3p86*PQa{y0!y{+PsX2?Bl zkP7^I;i>Ho>3ZR5P`gcBGJrIDv8GF8r(T$DFDX$B+0>yw{gI@EFw&SZ$X}pY6i{oH zP2l)+J}C)9$o4hR79IE;33xi_$MhXi5*m=5XOfH$rh^u`Vl?zY^Ink25zr)OO@$B@sm&Em_FOii1?b_QR zD*@_gfj!D2Cm{fuX7s--F3Khc8Ye$I-BM1%fa$-$^lUi^_4*m05mMwa4)B3xpzY7# zh1Q_`&xoW3D$Z|!CMH47ng`MeDUu<*2S~37Ispl($KYig$S9ACh&rANMwUn9^6ro0L=hOD@uT80P7SbKwE?26eXmfUC>%Z3DDZ<>53B7 zjAy4W*dnga4O$AL0BZQ11+NFwo?f9OA!Uo|7*J`(0J=?y2Xub`_*7W%EH-$RA9%(K z0VwJr?gFj&pRRaET-X&9 ztFU2qSgi6QCk0S_2$>{n6hy9PKpNro@f{Tjc_}>dqN)-~jO(Xcs7feE9%EC~0}tvz zk{V)AXL_Nkgj#(Q%obP3ZIa;0O-J;E2kHYcaf3DpnK6NP%Yd$a1a)u0(F>Y&W)(OF z>hypzKexbNwmQgKeu0bdGz~h>hSQ7*o*_6GU^iiCaCEEmFQ$l#UpN0fm1Y(F6l&?W+Y%~QB4Ka`yXl9gKU<>G~Q*c)i zqz1MM8lFnP?GTX6CeTFq_GyrQcrt=J5oskNF-;qk+rb0>plk}u1{Y+NSj?C}EC4Yj~!u#c968ROaMcP5ML zOkb}hp~2K52wL!?HJw>oLRu6xRzU?gtH818#@Z5k;^6q=0>u|7OM~148eTp*y?=_h z*7QZ%5@H^vE05!RTc12<3v+7M1+a!`OQ za)KQE!~iM?CddlBo!+J=k*4wdQL}(RJGgXM0xlh-cw|6npaWhyT)zxbFZrk+jD7|ZGE9FNr{@?*C^O!eKEXgjTns#_1j1U*L31hKS`;h;DqQ8VATuyt^(R2v2f_O}ph*p+7*dab z(ivjf1ZoXVC_(Iy$x>ofU{GKIPq#R};DOd2 z3ZO9uP!O^UbWFc(46a3#O(YyZgG|uH^&p>v@+VmH^ePhxhx#^9rUp;;!qhN1fCe_? zvJ?cMgF#G?u@q2Xffo=!6+))gKz)i2{nG?M6OC{QNF58V1R!Ft>J_xQNkKrMA2enN z9UG)ojxPtR=*!%UMZSFus@`ZY80_^qP0Nf~ADG zAS<_m7^u4_#>2?Xt-vV&cCz^NT~-pFj4!6MSW75zoCKvv(9#1vYY7F$*VFy2B^1T~ zgZ9Qsg9d(}A;yHHd!Ds~1jo#kouI|%bEogKmZ)KzHQm}qLYA?4d!&toDI*`KT!6Oo zxCG8lzk5zxYx*%;3D6|dZCeR>#%t4m+e&C4jc0%&1Tt3*j$wft)9vgeq>)xFpewiu znOI{kgddLrUjh6Al-&72Zii-S259r@;`XGj$2{+ z4LgZY#_O7GwS1L!RkkhUpkQ~+tgGh7Zb z0XPM;QWlgof7wfDiLPdY9S#dhg&;$@1Qt!Vbdd0oc)<&mf+Tp*L?XKax4^6Ea~&i~ z4SPYxAaB$F+0E+60_umo=0z!X#j_kihB`Y+IK*{9Dg_=;lTnCA1XKoez%sofg8)Q& z3Rqf@M;IjigBw~VI5G-!gLSunr3H9|K+-SZ(hLIK(;qrY*fHLmuHYmQz_@36p_2q? zc~+m31Za`tE+=r1{&kX&6?w(1z~T$K_z^szp~RxVD$p}s&sjo_@#J)0X9+u|^8(ZT zwInpAZ*`UsQ^Dv1fR5&5EQIV@0Sz{(2`rla-dRG1@y2u>7nH#*Q0Wd*u@uw{1hq%) zUBF{tIF!K_l1%Rd8H1>tVaC8$4jgomuw#5R%~ir2GNEJbDxt&JK0U)#LW>o$x@)?t zgb~tc3TPw~R9k_f88own7)=4mfSd?Bn+QB4D+d~qMc5Bhvko+U0NOxf;3k2*C=4cl z3sz@>4Vlba$tPo>` z3|oPRmO-l_UQhq)CLu13XrY072_TQbmV$vjCJ9!HJcJAyR0fyYpiyIaP@YB9^&oen zgxd6p?h>Hs)}8JW9+JKA_7DqnmmbJEkRPQyBxI0=SV6|Xq`W;O?$^o|np$(cF(|f#7Mw-zT z+?;;M3p|o#<_)R2p@{*c?gRLI4^ZQ-*IU9;2((HObl5wn8Tmm>iCy5)^c&t1ii|g> z|MHfwWZX5~#79Db@#OSS9|_Pv*AyQK(7^`heIz7}5eXSIki7xvi~xAa%j{_H3vSkd zWI^?_w6BCDTIvKzfnv_nS3=VaBeAi76B~R@CTRW=>KRbfg7kunUEwRCja0*cq(EsI zn(T9J808r)_8?P*hBb$sv|G?}TvbU|8)Re?QQ;LUVHKM6S{ zSjt8C1l=9e3;iUNWeVJcT7jT=1I77-00~)ca14O9Dhqs`z9T@wgRyryW1xgIGK`^+2=n0kp z4caaX1{XKyf+f5-?t)fhfog7r5DD?nPw+AfeX!;cNF8!GGIA?`_Y*rpJq%Ay;1UBQ z2rn^uLL?*^FHBz+B2mbAcDh6;M!yVsW~4Y&LX+|4^tqwnLFj-f;wIdXO;4cV`tzVZ zzSMM$FbQkMYtvK0U_;TO;1cWs&vfuW-Hqu7!z6T>ehYxPpaX*X!X!XPpect-v~ny2 z?MdVSjpBq$h*@Inz=AiW)_~L@`xrFR%LtluTpPKu?R35aobZqq0$uLI&2H1J-MZ@7Y1<$x9%{y;VrqzQaJArI)3 z!8agXpj>}CUcxi*GiWLiWjqI5Zi4!Eh;us_kydDfVgOXUz+wQALmbR|kGk_N@8qJoydL_yfm1&j)c3Tz520*|M=CrLP{tOl*R1ot8!=cfOskV5R2W}PzmO!M#JFhs=Ol@6rZsHS*KQJ0oSvI3F%86t-7KWScz?Q9 zio|*ZcUr2%TE;cg*QH9xG2WkkHdW#RjumX$Y21Zaj@8$G^;UY%U z6Rrudh%nVEusH4jWn6&^1Xx8A$9zlX1&og1BeG#CE`Uz2703dOH-Z&4b11NA zG7BhzLQo>hn2|w|N14IVVEW$-34W#dA_|P4;6|LPB8K zbiGUoeccscYe838gY07l)nYLFZh-7F0NHl~Y~O$O>0Ox;a*Us+ugsJ%tcU4TFbC;m z;Z}s2w1Ux``301{0JJt7WQ>dz!vxR)#Ee!9A3$=DfNlVt8N7li3pD=k_<%7>;3+fc z2>vxpN{pa_fkA=AlxYQ%ITHh@L&s>%2s)I115=g?1NV0pP9~;$raFq^upTo8MFc*G z2oMp00v|*OMxnq*5&V(JngzOqVLD@#gesQ!`h*@|2Wv=h zd>tbqzD`pVUl*tqUl#^Jd>x`${`x{(e0?DzzP?cuUq7(L7razs0GDb6%0uv}=Ac5@ z07O^_{18!K0kJg9naM021F2O!(x`O2NL=h)BqH`MQ51WZvBe&VwHdf{ygUeU8|`Yd zE5yau6(Zv6Dn;>ijau<_ZCJt!#%>}4-N>SaS)VvZ}oeNS)~o3YTEaROS$dIP983F)6R3p8?c zTQE&P>sarAsDO0Un>c1#GEYG3Sc5v}puRG!e-7?gPk&h_p_x7dtQp)rp1|mc(i{YJ z*c}x>-D60f{Xgi)ITlT31#{*JP+b~M|6zck*_?R>qa&i5JcH4k8PvlDwHGH$uUjFh z&-irux)qWdoOhWSnLt;Ykv}+r+_4q7PIx$?k6>SR4*s4jxFgE}Y5WQ(u+%$($0G!8 zfZM~49H7AoTSi!un5?GtEr?MXS>U*U8HHo)AsgHZr`g~`9~(1EJ!36pqYvDi;55x# zC@^!ndy~Y1Od>`ddI`qUY$D=mdO$PQ0f(dLMbh+Uk_Q|N+a=@}k4_J0ALs#xJ#5^} zO!dq)ltmItG`1n4cf?g9?{HKij*#-AY5Jm8iPMS%NBO|f#W;VudXF0YSL^#hgGdU=*FIQrn{!fBae0r3q9M5$AUWrh)f1u%Crs+0YB}y5ara$PF5NF&n zJ-$FvifQiY=})&xfG!xF+$UjIf0tR288oCV02;1m=00xB#8uA>YFcby%U0r2f!v>} z$gRKys(eA$P@ZL0;8NhyU{Ww+(oo=XGyvTf$qKqJ5-e(9#$*8+$XDQU)W}lchOVvS z1#KGSaU9DSk0JzfTSj{LTr^%;Bx!{XM?XzRNz$L1?}yh&N4y5rG5{q0+#}d z8Pg7sE=DVc1`y3;#`K3pflGlMJg@MBQGrW=1I+AT0tEx;Qd={oA1n%7ju#-8A1g2` za5?T^&2nS{*~gM4aE?=fOP}!ys}d(KNH>=T(*;&DrVfy@2FT6K3S5pI%vtpcplugl z*g&dV*dVGkm>Sp=L55F2R;j?Mz##xpI0de70-GYpy%687MG9OR^-M3A%$P2KYfc96~;EO4D0SU@^& zKz05AC1Ebd9cIj+cmiMc37U=Ia{PfL0GgcSa-0En7nkD&mMnn=up?%$PG?*yAu^qR zk_5XCOnL=#mI9jsm*WlQEJ)A_oDy_mP!s`$>;jNyKsIw}GS6T&XMOBxf~y` zWC=`V19@)3^ox@u#3PtN>3#t#=!^u8EDa_GGbRQFE=NWyh9#i10!b4ySixpP5){~t z0?Rm+I3c@(K%ovY9h4hESJ`d?yBch|zTjy=N5(>Ms6cYY>FI)#B_tWoPS>6+A!QBA zXD=9)IL(+oFe-3?=4_O>6?gui*B`+AWkP_JyCM9lO4p3IUz%>2#WC_K3gi6p96e5*@RkAxWDhfbUgSJ_4 zfl?7TGeTnf3CJ{7NY>Y7cmTSZ6YSR;OrXea00p^-Ir9uqG65w+P*#O#`~uR*0ZJmK zADCQuLFtuCllcW$+XPV76ESB7XRsN}SqeM?-~W0t@fL6DLMtdP*rWq8c$%FFI_hQaA9 z1IU$+Sfv$392pe3c{o9-1LB!_R)Kfm%mVfey8=6?z|v&^c?jeMxQBj#yeDGL3Oi5#CU8~|lrP|(TmaDlb?stiS6&u`M;9@}Jjwxb0ZOp4@UU_# zaDY4sx?E0yhe=@KbdPBga>9_39DGwUtR$aaISsr&_P{g=F{nI0a!Eh^| zrm}$YI=Hmpas)Y>Nr6q^{PejqB=qZ7up;tt0~4rxSilPDOt1s zV9s)!dbP9ZCm|{_2g>0t*`$HfPCeEe61@gZc6Wl`!K{~|+;5s=#-eb-ZfL%Zi zO5t!1f(k8`EXQ3SJ&Xdmj$)vb_&|AFgJ}ngA}gpk*}$U6JU!sQu;lcLSrQ_QU#9oY zk}zWYGX20T2?NG+(?8CVh-JJx-G8=(I5d;9I4JN#vj!t5VIpT6P;h`MQw30QiOBEZ zoB{Is4{%usu5Z!u`wvht#0*K(x(vUWTzMG~S>YEGC@YwNGCd2($_=2Z2`Tk~s)Q|| znB@ky4OTEiZgp1Ra$GT8a*l*1(*xG&E^{QD>!FA4D{wi2T+J*1<$FqVD={M#%}+pu z4>Krq92T0!S4LNX;eY={a*HR02WOEU5Ma9oq~s=?O>;)T9T@EDn&I zb%WWQ`2{EvK7i}x7bwPl0BHdm`-yq_!?_YF{GjR|)YgNPt1Z(-=1CZtH?Y7=`@w9^ z+yO2Ku@?8>TX;|!31Xt6+zNucpy4WTiP{0ycVYUp+D5Rr@1FD{gjo&I*7 z1ivCgmj(`DyNNU=kdU7l_?U&4#AV|wR&P(cH7n*gYQfyn-6 zhvXzsnqbKSMT!83kPx^6u5ONiB2q|!%W(ln((wQbqL`Wi7TLjqQcP`N0Tm0N5(Da# zH9XM91nB+*7KeJ!ee5h*O56(E0#^ll>HmNB zph7dIE1)0%wbhQQ#5S1#a_#3R_)>W;h6H z3Ug^Nb+9UNf|J1kkN~Lt`~N?Cp&64us9y!@5eYo!0QX9u7K4)kBqTs(AuJipUijTRF`Ng{C#Huk0X1h?vlMs~_#GLG z6*xiLgCX58ZeCE|-~wxwBDnnq>w|G36~8TPO5D8Q%Bg`3TtUOSU!2gc7p(Z50#XPv z4%CiBE`C8}HxJVUHfZ_#0NhQ{gf(7nU~jx!UNw9Vf7X+an9u6hNK41#DRYb3r+e*^Frg$So__vK*BJsvH>=xgpJQP38$~N@8ej z3UJ>T#=KLRskpyhX<3$N@_9FCYyvCI$s2P}X?BI=#?LSY*2W zTuuSayUdE*poMOPIz0XTG6~6C_+An&NHZ1Edw_JgKuHhON&sm_ z>J@-mo3OqiC@n$C8!mA33#0w~095=if)eaw7T4(xDm>{@$IsZOYv)VyGM=AqEh?uC8aMNt{(ZfK4%1wg>8cwfZ+GH#m zOc~SPZ<3Ijp1wgMhVkh1BO4?Pv#!4A0Nu(14+>@tCIJN&#}^D)0*LIuq5#rt#?$~> zli9$S<@f}oOA(P9Ku1Y}w7}ZV;E5~^rVKNt4v>}(#w^G7>G2yS>KX4&zrRt!knzWK z!A%mzScd&Vr|;Y(p$l^P15r8U>D-$oq8Xn|Pv0zI#Mm%>)@BJQrg<#WSBuF>GWJiu zuo-M%z!nKZ%rL<@rsz3ceXB$lTi1yW0Y|CnCpSpwFfN<^WGmRHlx-5mpes0LZj+E< zTt9u=HVH+>4byLIlh9>+KAmm5gg#^2bhGUe7NYCm?Kze@vffD{jclDgchV zlIiL@CG;6DOusKGSI;&96v%wjb2dxpN-hAg(E|JfLzckB>8r%#q!=P&VHU*fn&K6+w_Eb z0nzE}Qe`=(|J^GQ&v;>a>^_MG#vRk|?URs_K_nnn1y&8F3UC5qbp$1#r_)9DOY|v$ z2aj1DRjn8d6j(vSoEi$OpkXIg&^Rq4xPyFTzeGFZmFYeQBn%iAOs_p4A;Wlh`m6&I z<(7Au6`4Tis83)7jS@3)3qeAG$NQn$FVg`?Dd*rzQFr8>as`E#c4inMHw3 zgNXw~@Hifs9(hJ$B4fk$*JmU)Ffy*5KIfc-73UX5DbN)H0$--zKPM3k<#GvpnQnbv zLXoj!dhB@#6~>P3P3I*H85yTd-*Q3XJg8V;Q($$JnBHh7EINI`MF}y*xqJ$&;0&t( zYUr>yGJpb%6;uN-C@?B83;dpb{i1{tNtntlU{PSz zXRJ_S0~PI{LX{m4<&iH7$*cAyg#;4PL zuShg7{y`Jey(;0s_+@(8RS5;gj_K2{N`USQJatt9bnnEQs}esM7fpY5P2zyW6=4Mi z1tv$49B`~=3xN5I0#~N*yDrhhxM;cK4GBi3MSRo4KZv+6uASa-Qz8?@<@zY%z_@C= z$t?*BM#e?c*WZ&+n%;j~BA#*4_V>3Xsu&qpPS3h4k;J!(Pl-{1HCusAfi+uT>GWH7 zCCnMuP8Yf-F$bbcoAKlH+xH~27}rl{yD#C$_-VSweThQGPt$kZmq=uMIbG&~M5O3+ zKG4=i9wjDFJFVXY>)gTp~A>Gb$Z=r2@S?8)0cmi_{unK``j-Q&5VrG zw<~^=;AUc+zFqf+#APPN8PgemOKfJGI(_SJ2@A%V)8GA;&}N*qUFwfSC`hv4pTsN1 z+0&!{OFUtmI@Lkaf^p{5N=Z$|SyLBFMlep>`bV;jjq&O9W_C$0Py^sRyJRHe{pp$< zl9r55rzdkr#xd@geuzWTopHx>E>6i%#;4O0I3=|icTDer@E&nWu48;UeIgfFa4(nS z8pfy7v$!So7AV7x5yEGg75Frm7{Gg* zcr}40IFob%QPfFIX24?G|#XebQ2?sg93viN0#G< z|5L#w4HJU`gX4?;Q>XLD%c<0RD6oPmDFs%?6AW1j;A((Pfl**R*n$`(&;UMz0+Tf( z2WXQDE2w3o!0LE|0X8nds=%tr9AM6z0NU>fuFwkFJ`9j-WKNN>s9u z@$GaSG08CY!{F258>Scj5R{mHVSy~i^p#?gGK_bp9}|-dXM8zbPF&K1v2A*~xMTvy z;h9YWj(h?Ork@v=v=Z-QS7cLQ0mZB$yCb_Iv*W~j%>s%nlLM8ErUyw#YSwQ&1mg3E zb35`VGCS^t@Wi+sg%z0{4_<2!P-Ni|<#rTOWOiKeum!{ufyjN@(F)=Tb32MCGCNM~ z1@nZs9R(Db9e-~F>l1{S*|QzY6M*pELFD+k9r+ZQ9p}{FY62O<$L%Pg$n3cO44B6Y zG4$IHu!TI_j#7%ujxDpna@-J&=Wchyh* zlH!bSreBkk>|*^lRY2hO^i(OysbXi?U=1lybIBRY*=p4Q`)3aqHLmAgjKPV$< z$@pXXZyCuVkycQpYmueE2CC=SK*?XAVS1yiq`Am*W(78V#ui2;MivJJh|HhqXJjR# zM4p0Wu3*SWOuy?X$~!$?PEw8W&-6AqNq5E<)6dCC$};|${zgtxMhetGVHS7;*51Jc z&Mz>7mEDyE!qu9Q)DhUeoP8U;^v}ZgtJxo>7k@4{K8LE;#Qd8ML{lGPh zN?Xamw`BYLZ5br>37%lQhyg%mk|Ftr=N(*uk6E z6u1QLGK08m+zQ|hssf`UPnH6kz=r8s>XO+alh_qF9cM6QDR4T1W`Wogcm=LcU#Tux z!1#2!l!jyo=v*Af6N{&pXh<5f{a{ky7C1hAt%hU<(_yCR@mGaJr|W1+iZH&P?x-o* z!8m{VDNV^IjMJyD*OJs{d_R4|b3xJRU$i9Wf!b`WjvSyi+iY#gD8|*(6&giFrgP~? z$}=`j*V2(RVCEZNQ2Fg@2qQk(JX^qD4-`iyI* zpEQwFVEj7$m5HR9+*d(R(qvNLR^V0ORNxR;C#1jxVmPvvWeKdCu4gLgz}PlD-&E3= z@yztarjojhyQW_>l}r-vpC+Kl3OcMwff+PB1X>KD#3=A+x|f+`I@ABD(>I%eEB?1; zk}DWLPM>BjStjv`5wxvw0izN-FKA^fXh|!h0+Yb^=_(eI$`bDxmDnLYFa~g^PKir_ z$&pdu#q@X!No%QJj7m&qOea9SZyqa#GoaBR7SIYZfzQ*oSV(pVZV&?b1JvRL9Y4Y+ zuwlBdrDQ1Mqv;t|l0nnIT1sj%ewi+BCFubXn#|Zd-9AxVe!8@^WDaBV^bTvuO-z49 zrY~@k)Mb1${hX7eCgX8t)wyI_37;{;Mlfxm5gG4$_&b@Z>Hb3lN6oqZ!am#@m&y9AAVq(F0Uu4L0qEh zCN@!ZPoL%_X-<^m8K+F=cY&r%msDiDG5wUgq*e&RPG)We z6gxq8sUW)nbiW`HA9Nbg0w&N#T6o7<+Hw2DP62_&=^h@E${=6mdPpiT{+{0FA!(xW zgGqyl1=K5KbX>!drNAHn5ddujS6~qM!pIF8PI%@asm-`^x{#-&Hsj&xcAk=^ETBIA zbO#wOh3V5hB?TGJPhaUN*~oZdy0({OE92$q8@(i@7%xsg<0UE0^!wxVmtK+{%CDIf zSOR$&L5(;KCI-+nw}b)%Xu%a5xG|}~F7SGKh_|ExlG!V~!DipyB_KQfy0>I5E4nV#k+8Oiu``T;*lSH`o`+59Etg+V8i3MjBSN`S7=0C#>LOt~yCP$uh=c(|3kQDl`7xem6wYmyvPe zbnP%nGsfT3lfooj8ShVD0pcB-em_jolX2>F&2UL=#vju|!zDpuroG{khZyHg4~URV zW4t?kdxWGSi(gpHGMC@^X;A;w8S-SFn= z4`L;!F*a{6kCU9h$oPIbM}nj*sL+ERHUa7bn1B`|usAXcOqy<+AQ{FuWBQZ?$tcDd z)88jZ7BSA4o|Gur!+31^`$Wl1#;wyMlO%Qdnx+YW8u{Q>LPyi|DM^xUjN7K)PLkAM z+&-NpSu&gd5wny62V`iOU0@;G^!MDt64R$8ONxvC0ks`CbQuC1!MD3`g8HZm0^g?} zNtRS#d^7!NvZOv^?{v`=$!Nx@(+g81eHkZC-=89B!Z>aEmlR10#;MbFQzaD`8>joF zN~%asWm8~K;Lv1#!D!CJ0NTu03{6$1x|st)7PX)Rx(bXu9hyj z1(ZSWq)Ubhd}mc+2X&g+K&sgV4o!E=kSt>SF?~yhq#5J+>8~>+dzk()O|Q(9lx4gy zeR`&32jivb3R#lUj9aGLWJyX(J~`PT;0Rwm0m^r5pxqh*7pE6wNlG*QJvqHMOR|~q z?sUOy$w`bqrtkbG3pz>W-9Onbg@2%NDmF8w4U7t`pd%6-c?GJ#xl{>MqyA%>KI6Y^ z6Vv~bQ)T2N8MjPV%$1a8oH*S!S5lmD%hW76X~qT93v(sA7*9?AlPf8~eHc6f$)La} z0M3e1Y~3>(1O%o}x6hMQXM8*Tg|w&)H)v1}wB$5PpmBO%o}@n0JI3i7n+1gh;RTt7 zZN8)+Qyb&-1NoAYY;!?tV3?-IZ;(il{WYxt zba*TBm^!Hb1`Uw6Gfqz^kd$OSTz)=7(?#>2Er);3jE&>;)KPZxvW;`_gPmyF7 z#gclO=RwyhfL2?u2wZ1Vf*ha0;-CN~8EhQ%T#jL}9mQ00X*+Q`bS!0rg{QiC$X0Y-uEtOC8$+e#%Byml~UDKI&L&)o$r zePnms02biL0=tSqfn9+K%vu3**8%X!66}sEm_Wq~Bj_4$1vUYQYYt5RP%5cmatPBk ztZ1%b;Rdb9g@hZZ{68_>r%Y1b>;fnRAc1iMWZ46-mq7~_*&RwS%Doi-0V1kIZNOND_H9c zkXFz_J$6UXazb{{WTg_L0y}7NA81iCJQx=+gZq9A3XIl_44@@=?79q#n0XmdTO;5g zWHe)10kNu{-EjrNt_>i&K#PB1c5PtJ!fMwJ6uUrX>N4zNcI9OPMG(Zx2S8?>fa*WM z3`&+D_p=I2W>;W$yZ{#Xz*G+!d}Rj*Cb+x2WB@b1}0Edf!=6?8TtccaRcatN=MMLBbZ?=pcN$`J=6bJNQyCauuNXKSD2IC z5wxNQbT5x_rKFqG1QrE$N6;D_cJSgn(2)IN4oD8XSScy0IfKQVc?An-1Rm`E4It$^ zz*d1~aS_T7Ob02i-@#(ed;+8#62uok%5ShhqUZt($fJ8eL&BhGX?DjI;KeZPjwir0 zH1mVQ_5lkhY&k%2#bL(u0%XbyuJ-?)3rJWq1fU8) z=b*vj1V4XB}M;&as>r4+ z8$i-KShJKsrNIVPP{4F?D6l&o0Iv~ecbov$2^u?u1`E4B;{jIW?85;n1E2|oU6d4>@(!d7RV8-+S zH2^cKU>SLOeRK$Z7y3575F6R)Gc%P%eRHoDPt92OB7$8m2F(kQ z1#W?@B9091Ak!U`_&}7060ZWE0xv||9UN6Xi>J@6lavHq;seSwjNtR85ctFv}<};v!o}ehp@0&G8jaEYnF6ooH*U8MKZ+sz?&{`^GSip8?=Xo zSAki9QD8C?>=a~BOa29DZH&M%M$jNm2KZJe$P5az0;?`Vmca4p7h5Fd8Ba|A*dl4j zIAuC#yQKB>xK>GC#%a^z+9cJcPimEHf{6#T!NgZVggjuXD%vHhb>J3*mmooAes~r5 z1*S8B?DBEt<$_KM@d`|tF5e+3$v9=YWrt)7u%1l92$7#;aRRSp+;R2I}CW>jJocrsm~Uot@A`&0o(4bYi!pgNo#)b-*3 ztqHm@y`x{!jPdXE{r!?b?ALifNo&INj}s(Cr|V9T%z{WrPv1O2(wy=7^w$$4V+25! zfu^zq!Gwr@*PpAfX5v6XjOm5m-O{-Bd|g#+K5|Qii>JrWkThg$n?7-dWE?1BKF*L# z8B`u!3f(xk2jy zcm!Te@0=$Y!#H93vw4#0j1#u=&6n&1%^1&EASuH*Vfxkuk{OH>rpqmqlwzE)-EyJi zdPcc+a9>fBTO5&fJ6jtB92;621O#SGXIm_pq&|N(sI#U33R8jif{HAlp-k}ZL>BI^ z>`W~6ETG+q516O-FNTZ@7?KWOzJg977P1-7+L3T-V4ObW~bo&2DL#R^J#N-W?Rc(g+lSi$Wa zGp3H|j!Pxw*g<=5SOi{9zwkv`Yx;zxk}OKgMXVV=FhLF>WL4nYV!`x*33A{ds{-dv zOXd$u)3+^^jANWKU38gbZ9RBJ39BZvfI0IACP(l&2dtpVj8kBR2xvOjQ3JBr8>UVH ztPXsd0eIf^2NQUA519Rd$((rtvjVH5j1|KHW(8ISMk|H|AR5#(Gh^BSk^;4+K{Tk( z@swFXfK{LI4m0G`KUPzw8_d%cmrJU1ykZ82M#uDk<&xsE$JoHUPJU4MKVSxpUfyDY z>?i)fIQ_v2NlEmB9A{u2F#(>;6#yUPs9P_vM#P%20dbrkUDUfv4BPf83oot)G0v145m&3tPUJz;7z<8 zd5nm2!WtOOnHPXYDrBq}KnFd70u6k&1tieGM^u1z%P}jkfTpFPCndgNgoGLRq(t!e z6L_)-a#G?4@a!|CL9`Mzh_<2x(JqW2S`G0!!5~@%QHLvtSRrRgbR^&lB33H~qJjvz zkcGvR2_8hCWdsT=jvpAe>#dT^XJY(5ecl?$GR7a%Mb}DRWm?NTJ>UYr$h38mpyfl# z>m;2SXH8FEC+WfXV)}-4l3I*srr%yC>BjhUy3%?{J;tfi1J_GB$oyxAG>SpZ9R?-P z4qavrC2j>SP;+kj+VzsEj6bGd+$d?zbe?(oLr!7k>G~Ta(-<#IpSD4=jp_fL>2ez- zCFNl2=0M$eb`7Q(OlC~rv5XZ=S&p0UPM^L_(sX*)MoBj;X2o)8fZ9qkn6d;QhBBU< zF1=Y&3a^=e?|{rSo8GxulArO)^qHF_b7fvn6MziB2(*FwjTK59EDj3njs{r*o2Dym zk+fvoG(BdEWGuuDrYxKSNIr6#9o0y8Lm zL!INkT{4LA?(|vPC1V)xPXE4LQl0VKbom{UN{q**JMECP1=T2xJ0wFS`}h^Xm!UE# zFswCa4p3kMuQg#5=$rm-horb6Sel7j0WrY=$?{-v(DFC<#0OM-y4g<2627&<0_%i9 z9Z=AM#dFhl?36TR+%)~&PDyLgN1#K-S(t$V+K_|EQ)L(ih)~!P2eo}hIz&;1yBNI6*$BWT56}uaDq`_k|4JN zs1>9L>hv;BFWn=lq7J8cZy1itM0CcX05o03Eas8f@AEYRxk%fYpQMC^!@tK|5WTK?7t0 zTc!){msDolI^7gPMedg@U|cc%)P6~6ukBc@*$%UY1+*NT1w63D3?9?kfntp#4`^|c z0>qLX)AbKX8Zhpho^U`?Ol~JTL=xm!*adiS$L^Xw<$$C%BJ&z?p2osSA{<4zMdQ zf&9xY@ND|s!;+GW%cp-oEUCnJXu8x9Nf%M1v~UAt@(so;fgRI}k4S1T9-cnuh@_7V zEKD331ojCjLenp3b_qQ6%nTk|W`iE!AOza5%M2$w*FPVP%n4}uxk?FsVNrFzT zkvuLL$n-&Zdd_i4ZBV%}^SGpeEacQG$2vz)IfQ(W)pZc-SmW{wf_YsP_Kq5%W+D73+P^?G(~36 z1v0FleY!V5a-hLvHb+oj>;@BPDI91Q_)B&r7SN_4R#5U~Fk^ZFQuu-?%dvU-{u7eo zjFYDyJS8ct^Z_LNfho&z73fTVE`c=YYyqzjq=7B~QO65v$$^G*9W?~*uuosNlEqo3 z1Jp=^gm(j|an=AD#sp`ODg4uUSFwo8%s{9Bx9}!_Rm@<{5}3+A-C-4rjMEB)3Q(KR z5j2R*3eFnS_@OQVT?i@4t-$KE>MD~hBdCSwwCXAp)|)d=|G1JxifKCk^j)i1WOQyY zgB2pAFCZ*90dnLCuoEsYX9>)h-f&7%gzEuF^Z|30YJEuV*1@!|j zXdN$T4aZEFuXu$)EnUz^3{wMW?{WhR==}UU?9&@hNeT;gfP^|&vK%iT=>S~}l{TGm z4U2F+c(f68K`tn&LHmAY!i^Jx8mGi)#xw(@8?+CT0Wuv3PH>LQ0za8SUGyC+O3b`M zpcDlfPX%p`1~0y304<~hi>!d})C9NB7qFN!9{^2DFgltsJx~T+>7ktE_`IP(z>yI- zxv+vZeJZemhLQzlp}NbA=>AtK$u&EXR*f^I_o) zNoO}eKD)t^m6V$R&b3JM0WH#%6e1ZIO83!o({pd7gXB)0-=7HHI$P2e#b zs7s{5w1U-)X#=YQYm6gkxR*@;d?z2MI|?dXK!^8(+yFY^LSPcyJV<4@17ze5R?zyd z*N~J3_AaX<#2Qd1g$1fk;)XXsN^Y=bIer9POu#FUri5g+ z0LYo(-KtQpfwZkXCn;Y40Ho~!YnJ2jnGN6suE@+Izztf(VaD_VBnKLXW)s-Y1|IAO z4XnV*u@4|w&^b7uh4J8w3QO1%*pwI)nH3m#1r%5v!GpSv9c++36)16ohkqR#z#_8d z%%FSBST&h{u$nW^0Ie1I0FJR4Y*_+xrYD@2RF>NS65YUt8irsWDKH7loWAh9q%hA8 zkeVHAkRS`VBq_=R5;(w?<@lRH;Lh}i=Ou*&PJqThLFpDW&dVn7c6$E?7RmYxY@ij2 zj-Vl476mo|Nc#=sCP<9m0GR_BTLlgFf|N`GO}nvbFg;*1V|oFSe!&Jx5HCRq0yL!$ zs!c$t2_8@&H6Pfr9CZZlu*1@TFt;OvBD(^E5NKM?5n=%-`G6v3-33W`z8@f6KiIMy z|1y9I`UAHlmFgQn(ikiza~NC$K|8 z39f)o0a6p1G0gzUgNAZh9cQp-g(|QK9AO6y@GW6yae(Bd1?*-_D?kAP39bzw4LjID zb>9YdP^f%m2W8a@>;XzFC}9Fp_klgj@&DB67cWYR@qxy6!Nq|Bm%t?c>5ZFMgf)JE z6#W1j^9>ZJU^^k@PXh;Nl#BxsI@1j>NtZVOW?=!^OnM*{0l(h93VF@-~bJi?z<$ZZN7s;fmH!?{spMv z%#o!Cs!Vo(^a{Wt8r)?EEua8vg+-piWl0I610WMmfW;4h^+1B{45&W_OBNSEYA!&% zz&>4JFN=8n4UpIkn3y6n4<9ruJ^)F)02}xKY~UwoS@wd%jOhc&sgUsh0aDk%3G&Mi zu)6P{F#G^!A{TR@&;zRiIU8DJ@o`UQ`YS0b*TJd4>e#`Fn#%ZKscgFbeMxbi2_Q8S zIKc^P`oV{i5?nJtA~QHaMO4ETN%1gX*oZv(hO%K2#2M{8l#JhvjocRXG$PHlG8=Uo70&_qW0}sebW;3P_AjuzK$q$^M zL=Q^18cYpbj*Q>}({Tn@7U&ch1_f3SHGvBe0H9&=30zqMCwL(4f>Z^d?S7E>Tme$B zf(vBmM>Z$M8buLi2L)XbC&pSO5%48Etd0}7vK&`23Y_GD7A>ILS@^g?V{H(Fr|;j! zqEx>DWY7jK)JWxlMJl}L0ND%)#2p|FJGj6x3@;hLK8DC20LdTVLMu8zAp&vv2`=#7 zc2>s|AlKImd}LD;Wp+>yQ4j@9+(I1>Eru?D%(}n@YWjh1lYzG;z{#Hv+;0X?W8L6V z5CMk**x{^>H@HA49TdUfL>kK93dD zHQfMGx`8{(amw`j*Ck~IcYydixU(EjH?;^jvIwM2U$BEkr2Y?=BNOP7I9LgA0Ho{$ zH@0;8fE$t?ctP!0(+^;g3kVTVIz7Q{&in#o~8>Nfd(GTCLE$_1vM<{J3#6t@MI}KTW#P{8s3Oq0Zq8zy8ZwU$e{~(5Dwh| z7MXz%0XcL6k2&)Okf|MD*$q6Z>0VJHByoKO#Gl$HQ4YIJXr$g*r(g?Vv(%B!2_zhesC#rK#Wubm5mR; z%5Lz0vKXvTeZZr{W5)CXWD6uQe*ih=2Uz6?uu4#|s=@SwM-i0uUx0<+#Vh!-UQk`- zC~n2D0aV(tn=!TUD%7)r?vrZZ1-0*aA(c=AZx(1om{p(g3@@aJ1cf8Wbtibum@dGI zK#0v3c(W9sMKvg-9B+UOaXipBO#pN;G^;-21DF}$CIMIm)QE>^n||774B&Adw%upu*ktwxn9>22c}$$Bd}~w3YJ& zAJj8^aL@2TJ;M+73Lm!_(*;Nc!s-YK?+bic;EEnvX7Pf|1I4@<(+!Z3H~6v~pH9DU zTT-Qd0;n~^ZpQQkq=eIq=>bT71wX{f2XHIb@I$Q>fV4|i@S8DhfOw155fXkI_#xqk zlqEn#1vo5sfD8nO7&I&oK+O~51sejEQebrisRP9UxVnx#0ZL~l_!0FG+&es=lG5=4 zKdkgn0H@+B{7Os$Ul>7c2?ZuIrUf9kGMh2YfaEw<#~A|P`~$ixN?_9Tzjq|1LRNs= z&|q=MU;;=pWKBRKxyOMVG4IE&j7_Attfb3v2W4ZuR1Svz!n05$&Cb+tV3LZ6?8fkiehmK zkUC~ip>qQ4Mo>}ACeXyOSKt*ZXx%w0XuA{4kY-Th1guVz*`Xek4H!T(G6F5ooq-@J zQ3Vl!R?sFqP|CR=V8(O@5Gij_C9)R5a0_0bypIIGm2xJMg zae#W)9|V+`c|kdtRg?LJfI0IIkX}dVa>P#q-KF2C;_Yx%o3O~ef51w>9`HZ${IN=n0A1aZ2&9VAqX12fh2oy0q@ES z9TS0g^8m8mCJsyH6Ck|@zsNIZ^exs;4^9PU?&|!-p8se50AgwRJT0aP83Cuv! zIz9X#3vXJ75U9~9gwX^5xFAdwxI9zinZ07%IJp)AMkJDLR?=TGN;B&jfc z??Dz$j&0K+?Vss)53xuvZk_(^5R0DO1(0$`)HHz3KxGA$9WRu@-PRY%S&mC5bqY8# z!+j6xX0bbhvc?6WEP;>H4?dC<<$~9gtEWGBB&nQu17T((hoU&B!v`80!e^%V9>}?V ztd2K?vIOSAatLSv2xKIV38_K`TO%@E>Ie&e;sbr`racf5Ci$P>@iT~010kTe?d9R5$dsdM_KqqK7hvhm_TE3;BbSRt~mYiQ5J9Gn`nlA zKsOxR7-Is3JKXR+PbKB*e}Fvk16vXTHLoEFyFnO~UxYzzM^?uT;Ij7zxZZ$_EiMp- zlzxsogu#I!oCO;>bKC$HnSc-h)f*kc=FBTVMm7j%flBEW!l2=o#AlM?Mh8H`2ZX_` z0d}Oilb44F)I`>0Xy695f;5;uaDf_B8caRYS3Q%|sXqbIcS0DPS>PQASPnxB4)>160IAdkCOW*#{s+FNCv{1VJ5kNUrGu`RIZ0biNZT z`dlAC3O)#DIo_H+|GA_%(@g&9i6>Zu>l;ApB_Lt@1Ei!w1gXW_AOdPSK!a8UQsjc# zERH)wz`-km6ue-O2?!Bz@PZCF76EN*2M7KN5m1X4VhptOobL5Pl9zG8^oSRdGE58k zr^}yYk>ff5(sDoqR4C4SAt@z#LIl+BfsG}f5CONLrk{NwDb9NVr1XLaq>nTG;|tKT zQV~!c`h`moR6RccJL`rBsF@2I2Zf$L$n99~CT-6A0pxkmkd}xNyBX69kXbLlO5u%K zq@mFd;J^S6je6l7;A;08$1W(PVXeAd)38ksVa` z&j6_wWmaGUH2@qZh-Pua8qVC1Vc8WR2dof9O`DMM943L8D5XCl%WVK@+8_$f2-E9c zNlI|-0Ez4n1vQHoypoi!{~!ulkZ;Cx03_ZZ25F-n5QR01Tg0HA;08rZgBYsB8g zWjP+7p8r}>#_bQ6A}`1RU%>g*ae)}9kqYYPfEKl}>M~pqb7aZpV`E@oU|?co;bs84 zc7vEA4@lDzF;H^SU|KN!;%i9-xfdX_Ux=XwBnQ|-ps`v0Hs98xf9Fx?PWgslAmZBhg^ zVL@{SFF^Wv&6pmDJ2EIj{K4w@Kpd3GUx=ec47UQy^z65idi5VbmVFS1u!|cc92v8r z$B^}MfM*i*8G9s@n0cW?fTA4|W=s=6XLf*QjX4E+L4#f^r|Z6xRArnt?L3Q(;R1;) z&`>65R9nEBaSEsk7By#{0iwCB7*HtsdE(*cGsUc?080VxGm#{*KR z27|o)f+0%*>VcP1S&E?U)eWiXQ{PM4GhL9He($fO4C9IE3ofuY=^c~GQV<56C<^XW z-;e^$SXeQ<0MWeGj7Ovtm_hbA-jD((sObV1Sws^*fUNx>mF0L7wZ+5>>a0Nri++IA z{6KRWQpo_VmJp>vgEVL?RT|>+n;#@K>N}(rxC|LU$HcQbidiunkcRX~Z%COjEdVJ7 zB~y?XD4Bxz7ohc#I^K}32buCfI?It+U=q9(LAdt?$jTSeS&p-(b%MvHpv@gnMeF!M8d7FW zkjPRH6?hAtru+eN21q}vCi4erbLIvas8t|Etf1TM9T|{q(gOGUpussq22?!DfI|m0 zXK?UvaZgYGD5)%la3v?Grh-J->*<1*Sqyl7fXgTirY~HI9Mc?K-)O3>vO(ig1VG;HC05W6(Bgl{s@>v4MLHV3jg9&u8 zlp}KqXq5%%4E_etQ9GPwOdTMa*^Fs|0_e~h1!&kSz)Y*30TQ2~0AASxj_wr-3M`IH zU~?2XL95n46Ko)TC=+y!9bh5oJOyaaEGtx~A2c=v8k&Me&jyeM8x&9j6I7Ler^xG3 zDndj>v;(AThXOQ25z~yIz8a`W2(=7SqqBk*e839u10bCT(Cp&`rziA!ms5e&4(iGi zAYCUg?c)Wd7X@}RrV9#SBUl|9z)k-P3gD7@+E+=j`UfDr4-_CZ4ZIl&8uf(~zb`=Y zAHdpPfI|&3Q}aau97?PjOdk}?n0|ob38KD15mZMjf+Dy<5tKe46I=@v15hWp4uI4h zP|N|%aCHhea=^Q1yqut;U(J|KC_>%*18n&TMX;OU85Zm{h?N&WMqL0~hCU5;10;1r z5nA(1-*}BhnD+rl?13V$ zLqn9Z93O(TBRZ|%P+>P?YEXiP3M3{Ql%Syko=*lhmBA`O4mM-z0IgBzP=b!g+`7&p zB{Tsfv_J`(laxR?2{gqgFasps0nV2*lt6QQ+BaCV%{M4P=J-}9fzJd1kB4mlX~vl2 zTcHG5i~_3h_^0>YU=gq10W$J{5-26?0PBIIoFhu`AT?t;0a9~92^v4hohR@R7sMME zK#DHF6+ufVcF?X&SiZRdN~JdxvK${iZilS)V3=O;LsG@|f-GpHTNX6~vx37AoS~qG zfliNvSat)X;f5?Y?@qt?LsBH;0Z8P9EXW@ZWI-t!G<)UvK{gAtUkFsjfI7DtOdn(+ zvssMbItbLMc_FI=It!j93Uum&V}~5_99M%Js6sYlnjiN75oQ(^|Ub6GW+XULf|ubA$5i$z?$0jzX|9LP zvn}TqILR};{uYZkZv&{{ZIFlL^Xcz@N=l@?kW~dA&6yX-L&6qRUdw~i=JecOlFIcvK>pkz2eBSe%s4VA zvhXm14)SGn{38oG{Tj4D05pxk^hMU3c>_q-2CxTzvn^L*aQqLs#)Z`pTXwF79KWkCI{x}{J$l|>koj8J0OSZHBdrxJOK_$RIgnCg*vDpWYuIo zA!p8fL(Xv(BdBrjcmwPraF9c?HALVy+j2#4hYyqlK(*lmXe2{R1s~90)a_p#kijVU z(Ky_&!IcMcSptjr5ohLrYqT3m3M`I{pv~)|pou+D#|gCR=;8E_za{0wAz=p2P^_BZ zAbTOFAhLY=`P(dF^>+~A3~iu+>S8%?tia1rHc&+ma1u2d|+bu!o%7JQPNQ!{l4Kf#6h3x?8-60RPd;03T zELw64Ky9N1GN^eMvZxHyce4E}DbBM3q-F)A{WLw{ucU(Rtz^lG_N(|78%eP zNua~J98buAvL3uQ#sf|aP!Bx-Ipcv0IIT_Z`zNVc|3XHA1F6}&KvscOf!mC!0aUy& zSTXzonJ;3_`~jqKgDj|yVRd{V11b$Z$iSMsTV$1(dBL-D8)P9(UQTdv1ByguGo}Mj zGk3^3GAKgE>RBCkfQzmJY_i~ppKkMC(uDT}$kG$Ckl>zP`(IKw>IA4iazY}@aV}`k zmmOYl@xnqJG3F0mV+Uyyf;3$~?E!&WIV_-j09ySG>a9%Q{eZPCFp&+Qq#Goh&TCvTb2Q1mkbv%x1O@a2NmxK%k%aUgHJC0)PFG}<5{~@>(#E{jocV?%lLK0r`2%Fs56LXY zo1m~mYRiC5Pysa+5n+dDcQ=4~QVo!v)bxprQo{8&z>c^fktMJgo<|VsJ3#6?q(FmR zkU?;0AqVQ_I!*xf<3Ph7pq?zWV=_Yu;s;P&G(pOod4UwTY-V+YbW9dVWubIT*v#O| zE>?i7S|J6l1mT4Ucx^wp8v&X$ML2bOB$Jdh&jyf|4G=BU8VuzP%5t2rrxo1G0^Ni9t!bnG!R_bnFKy}KV6p!e=7fR@oQ z2`rs%#Vl3H_;LCcW~m~{|5F9@85xwA9T^K1L2Iu$%6J&L9bbH(I^CW{3Uu7i85XIq zV8~Ku1s2ef1}1@XJdnWx&=45|=*WK_C+0TLIlwHS1LO_~DKS9`F3`GYjx2$FEN}tP zk~Ai6(DoXJ>7}ev4uVg3K!bZ7EFf|M3#c4F#wz7KeJiV!0Au%bB{nJV>2b;YAa)&_ zRJh=C4CQrfQYzD{6%d*lOl%#*yRjnOdL!O;KOGWSOvgcAW$s~+Vh~mDsXjrUoF3)&?z28W>Ci! zbb5~xn*yuAh3N-t`DGZVPrp~oufRBK`u|#fd&b$*?d$keWZv>PGAM%94YKGmEC)NhvYj znZAHa%0}o5Bd9z8pHIi2!0gB*uxk1{E-6{iqIOikLHkib3p1uK;Fj`a+&29cx0I~-EPkjKP-B4=wC{mUfm7hibU7X=1(CgM3e1kM z9VVdT?N|ifO~2p3ufe!#dNq%f7FG*)@JPuq-kE-#M@m-i!7<3PXs8{$pbZ_Mixb!s z*gd^E&UMU5}ebf7Sr6f7tgJw|~1=6NFH1UfF zd|?E2Ne+Mx&tX$w5m-MxrHNlb5|VcAFe$O{g0_f&7u-Yan%l%LD*_4!CIzk{UPdVe zX3&wx0)H8&pKIb*V4uXUz``x?Zu-|IuUotnYy2wICh zceDEG0vT6%p4g*!6;EgkE3ZS(Rpg6w43XUsK9M=g+DKM^@K3_=6SpE~6 z0;ut(TgQlNC2*NzgCOyEiY9FuF>Au)NnonHnc>KMW5 zm;@G1Un49f!?=3-Nnt4+#{JX32}`LnzMd{8A|<5+8j1xUzhlM(Y6yTU;(pNGGpyh_ z7{?#I)1ySBR0Ll$EAl#SX__XW2)d7gP2k1!ei12A7LfMof<64A)Ax!D4wCG_(R841!hk75C!M2bWtf;$&;W87t~mRs)AIw90HT4&xNSk zBPtcDa6|}pge{^vJpfued4LgI$4xgBld?pz3liy|MrN%TxOkc^CZ%e4haF}LM4kgQ zoCdWQF?JgPsvQ|1#(or&3S~Sp-CbPDKoY(L0;&TN51=Iw6U3!t80So1D=wvt;RX(Y znbTj3gZ;}TAr;1WWO||mnAad7rNFp)`a%gQ&<>fM5>hgfZ$M!IYJ5O#fW#muEZ#x% z@JdRB$|1r6bVd-QM<11_hT9KSGtj6J0NR1iq#$O_oB=u&46LLBw0)WhRGOPHy>MYt zU{YWL-(v}C8Zs#`=`vU-f+{p7&<+o#dQjD-zzg5R1U72{vm=8ds{#{f1CIie%pfMfn5P|`v+#w$sKUN zC@_F!UV!#2G_YiWZ<=EQZAMby6rD$#D-$mKoClkQ`{Q3zOpmmgxerQW9DlSeP6@5%2-D?+0`z5t9bf8y3)b z@D;E|4W<_?pmm2ASf;-&xK3BE^|3DhL(UT3A{OoL6<>DflXkipd(`; zFOvd@3+mi4fiA=a4Tysju{km*unA0^E@&+;o^S({m_WNrbOjbMLmTFOA$1e{6gf~NKD3sX zsGk4|3rJ#}0dhG9C=O?^f(#beEDQ=e4sh+p1gau8fE2TtF&zM@{L0|?k^yA3khB%U z9+1e3O$`E$C$=;TfEJH}PIKA;5(VuXVgg@AwnZ4chX>>`CTKXwF@Xbu1r+R{?JOvM zeZe}tkV8rowDX3^5w!D$rAPtYv!Eja9g$5$7zpiu{{T7S2Wyt&&duO`J9A;Nf=4ST zS9X97V_?!`o{+&}&fEYBZ_v3-OrR=OfeCbIoTGriR$)*wox!FAIs%OezdIIyi~#NE zVbWllz@`LF1yk6R*aYS>LxW}d0tG1%FHFxcgF**<5E(eQ71#u}2}4RPP$(*Kf@0|g zixM+vzQd6L#Jj?x#G$}EeWR_sGSeNF>GoPu5}ap1{$V#`Ix;;$OG;80G)MpvVOC%l zSSP5&2U_h|peUtO58B_u1lm(3&?T(Eq`+s!bO)@?jOhl57O-LfnU9;QV`n&5Y>_$aW?TrUPtdOdr5(U4}EDokUg)KiEJ4BcjL$E{7CF6_^}B=PB_z z-T`g&XL9_&243sPq|eyFjucf$b_iNAEMiw+QV_PzVO#)Wh?+4?0MSgE%ngu}nwS*W z%$TNt#P}T93#}NIfJOw_v%r7U zW@ZQFIR!?6?U=a)lBOBCLBY+V2r3X+z(=JqftJ*t0j2NtCt3v@``@*~v)%=eC}=Yv z6X+l{fgLyu1*I$nP>SPL;1ZAp@eY6vdQxEKo&m4jH%#B4ECsLKK}W$Uf@=2<3|a8n z{SCNw{{pMsJD5Q=9_S(rq}m;{lNRKCjN1JPsJLPV@Y=lrTxEdL+G_TxDNdRuJ~c)JG^!Wx5vS?H@G(EG6UUZ%%s3& z#BF6Sx(?4QT~9x`M8|WpV@^@QAf`2i;|S1*DNlgJ}b^856jP zz@*Et2U5F(DtpHZ(Apg|D&Yt^KM`&csCH*Y)b1--vY-dnfm$*Pz_t7I1JY8g{xi^P zcMjy*9b9uWnlXWDbw@@srY)e#SI+ybiIcYx|#(8-BRjyE8+yC$r5f5D=} z!V5~wOd3p2z_t4sutp802jJTM#Pro_Ql9mo0}f%8JF^B8qH_NNRSnt=YsT~eWD%nk z!%vVXQsw@G1+{Vqo!bb?8=&(bLA5#7${k4&O63mDRiNFa;L07+nS)gBphGyBG?+jQ z9u1~5$dx;&)d8#AKd?ATDl)?=chH7UP>ujM6(KMfT3~CyKDn(Ec1q%de0Z0iB?v0{&6m-EPsAh*ZmQZSTh)==QGsvT; z!3u6FFj_Hys&!CnzXNpfEXa+Z^B0*ML5&C|N6?OVE@PC%BY9%LA_ zQknn?bZ`x?!PLN}1TG6&pw%-dX@OkAtiUE$FGOX1f(24p zUtm!JFHT^G)YfOFud$WaV7daWsP}*>H+D0oEue~8MqmSo%L1>ZcTDfml2WP%9o5JL z+UE_grNOl_s9pf67qDUg8zW%FZ~EP*696&5Y>@$aYYn#Ae0>Y9D|)VS6C8^b5>d`U6{*0=$-f0I#K? z2P{H@7s(DmD~3s+3K&#NgKK9|Go}WR0Fx#&==jAB5Sz`6sRcwsYUwFRwKS+rz$ma3 zF}}h8s_+p00N2u>?X@Urbpf=No&l<*XCT$muvCGXJ|VR<3%HgBwXr}Mi@}WP2q=kS z)Y2zFqM+Uj6X+0CP%VwsP>?hEK<FfnC!JcJV7tf1)cD!nk9)rJhs@ zSsr}r63O=8?S zUC~Gibl|0%~QF)%kyFp&}!`^E!u z;}@86&=!40fj!fAn@H&~{+j;EM9K-GT!Zn?^e|H?CB{9|D@~;w8MjW~Z7P+;xOKXk znUn|P*6I0XQaOxUr{6J?vZ>$20lEW61QcZ_7_$@@1=fPLMKNhIp8y}8FAS0ZU3$SN zunsD50W2W|ns{I~V^UCH0$)&x(0BtZFNh@n0BkT!{{yhR07RY#YyjvSHAaC=(-)gd z*$6>gBmlA)bdEWrz}o2_&7~xaVft4vnKLnf_D?f`&l*Qqya6o13(^QWm7Gyv-E9Vil2Zi39=?iS7M5e#BkTTn`~@3fYRV%$3YiM5mxNck{sonC7r zrNp>?`T`p%3C8u)ciKoPFwUEPu})5JI)|;4I^)6V2DVZP5O;VmuAV*%Bsgz+!%BYX z>340Vni#iEPq35nW86A@y`7XYiU5CGiem zCCv_CB{vZk&G5Nh%(c=$*kv7C1|VF>aauph-@hX$Qx2N01>LE>b*pU*9n)XBNvSe!na=MnB?qzwLixH&$uPd1p5-o; z&iHQnC3h)J#x2wTxJxNB{+h1fAr&YCi=qy2>H}4zpd)n^7##%#woLE!0LSb)4=Fju zx6{vhNL4a!neOf>6~VZ5`T|cWImUO>_j^itNx=;Pr!;WY2|8GxQDDb(WiN2F`glp1 zG47b&4B@Tul2T;cGX0zv*xa{XU~|*GrD7FeCj9`L1TM)zhx;%&g3haF6nHoNiMNy& zUcaz?SJ3{iHnL@&QnJsD37a z_tTC2rP@K|iN6%+{)nsoQm%|!r%MM&If{dQ#H`7@035*JgWDJc4suKnJjpLQy(0iz z6z>a=a%Ma@oheW%ka6qukU%MK#;w~I1WE}qGM=8!7%n9{{d|y=p$MeNR8eB)1&zyT zfJ&tu(?x=%k{Gv6e-J4p!z&5O;|3rk3#yBaF=|4iG)EVbZ zR|u8zVthY6J5(xwapUwop;EGpyQbd?m9mfody`3%SppO`;L;JatPWIoHAYCu@(6-l z1`#CwIsI+~xDo_~*L1x| zDN)89(_JDFLQ^3^tKmY1j60?aMIjUhRlI*c2q*TzdJF}|O^AYN)dD7X@&x)`TS zKb;_z#yDyE#>M>N(>)WVOc*Ck&#&TFn!X@Ws+jTobde;fS&Z+euTPRHWZX7gFZ{)~5~-$<5{Wn8)aTe6fLBjcUzrm0e#jEt+M z+owrMitU*uATU#uTL3&q?I`WI4J{2bs;~_zFbvI^F_VF=x6#rqmS1x6_YiO4&1hp3a&jwUqJB^wn8XK1|nG zrZ4ms6`9_5MU->8Shm!B#x>KoWlK%){tQ~t4cdkQx&)b3gNa9A1utmCSH_hWw3b5w zdi1yklY|0`z!Oj-hgFkV0hGN#dq*I5UxVhVSp?QhpO_=HpLgdp0R$)CXOWE--ic-aIKY zrqle>_41{(rz_-3@i5MtuA47q$M|G>PQDZ$Bjcs%)df;2j31^iD3D5EoIahgQ0gw@ z(dqXKrBpTM@q%V8K*Dk&rObJIX43pPxjTqV_E zv}c-tBcJ0XP->qginy4Z&+#cpXfBeFu;Ul7&~)EwDH)N^plKcOqA&1?&n!x;j`OD1 zR!iwvEd^&r(9|Ha3d{?8cO31|0AaHoPSe=v^G$fSW-{)Z zUQsV4$GC6$^m-{diG9KfY#K~Fiku*dLs3|PO@T*&U0~nzv-MIMHv5GY_!R`QK-UEb zDS+<=(Gl1$4B`qafF}kFpj;6J9tA-tn^%ELfmLAtbi)QI3C8!^y&9zIKsUReY?RVu zoICwtKN|tf| z^!zR}laL2W9C z=`r14(ncxd|k2~t^%bEk7nlrm<#INffdlrqdn&Ud1c(fr*$j?cgX(?3m;su17L zufVLp4Boh{puna8T3e-%C2(kZ<76p0#{JV5OqK%Og1d9FlrrOy>31hfS;BP)m@|Ve z*#+rv$QC#>U3UsN!n~(QNirUuo;pQJmGQ{*?kQ5?lJ6On;P?44JMw@o+ybu?+&caD z6i~NxyY5seRYsU6A1suTnqJc@$T7Wpnv{_2n`r_9^F+CKGBL8%D>FDcWGOMLFff7k z{W1wWo4#wBRJZGAaG}TnsxEjOj~r?R?OxDyge-Gs1}#_wZ7lAY3);0Ru!a{@LWzKv z%quX1svJvQGeP zDClAVkg1H09~cyv6<7qWPJb{{N{(^k^#3!Zd>AiI_n9T7%{YB}#Vn} z9H}};Sm{pZnk!|=_-wk%Tq!&I=lr0HWLcD0!S~2=WGOH>o?-w^>N6;@D=-PX088^g zr3FCJZHypk4kZqd^z?&sr5qU7OlO)WrNj7gy8b*VS;kk>edkG;GR~adJWpyS>PZnJU zVO~(PicNu80AdIuXeFowsM*8h*s)`pfC96?8eZ_7ebbjOkTPZbIQ{MdDO(m$0-7G! zFD1&jb^5|v3X+WPr~56Gs)mGu*z^YrrD7RBPPbbmrOEhgdd4CtM?OekfPL$@VD9wo zi=n;ZSJ#Vp;Gvklxn-+tE;QnH85d2*%r44Qeu?no2 zuD?V|o^kGU|0Pn+A|Uf1cSt(6fv(KRHUY<xjaaFcMFfC5}I3rO?y>&vBl8GlSySR*Ai-FgMs(NQa;R2iR4 zZ&)Fv&p3bjh80oC=EBmL88JSYuC-b!m9c61gw;~=j7O$# zSS_W?xMupj)l!ZSuP8IVn6AB54&;l#t#TsM>()pGfC|wyQW8v8gr+O3;g^`sxK_%H zv46V7S}A?Tb<;D}N;NWmn*M67lm_F5>B8%zt}tGk{$ia}Eo0C0wDnRJjK8MOUoYjt zxM}*6^-`9M@2AUckOCd2V!lC2R`f0G+GbbKJvwZT9~eQ$<7aM=a$wvsebol3aK=s3 znKnwTX1qFm-A1W!#;eocZIP0luDnSql=0g1%1u&LLf1hT3W4spVOQVr!a&1460)C3x)YwVUPW;`%` z&Tc6S*~9A_1QbClo*mf~868^|f_aSGj;xA|jt$d4?v{#|0cqn0WdZnB9u@^Q#|fa5 z=I=~bJS=6X@&u%W4MhpF0wXL>fK@J@esGVJ3D^m2px)pfsUuhnW>R2tY=9ViXRnkA z`vXv0T%ck4s>4#c(-$0&(w|MJJO(KNH6&oB&jxD}!>j2(x+eYU?+!}YvOk0dG}r-shos77KqBa2f*fo{U=^57 z1P9lh>G_AHOu(k{LHxg-@!IyNBT}J^Ja<8AR0gg|prj;#LrvZm>m4 zY`X3-DQS-R-U6f&c#*xD^E*4=kU4_?Xm0#`V)fk4tGuUz{cYx*(uLi6dK+nZfY~m=9tK z9GX7sxRj#A#c2XrphNjNz;a-wu!4}l-szW*OKDhLhR7-jIxz@L76C;xBj|R_A24wd zCk6#!nA`%!ED%Qlta!TV38^B+_0w0JkkV${JN?QDsdeo4g%sFy86Hmma7s#M`_hwA zE{u%#x4$|iRmjMAe|pRrscRzlrU`)Zq#_5m0vqTMbOjE92h-ioO0_XQn11%GlmZV_ z0k;x|z{BZ3&q|qdKLmv=c+>Es>DK3@bhsaY1Oz}EiXKfbIw#d9wNyk&Twtzpftj|yy>E_EKLC}O;5ZgCC+$xdgV2#ETyjL;1Y)!(F8)u@NhfzIW~h7g7TQnb*UQ0 zo6~n*2bXk@u1gs(-kdIcL#mYV^YqReQs#_nrXRc^Wykn=+D$1v#<$b;Z%Sn|UYkDq zrc}Jtdq(KmKVC!|4B9vqxh18@xMTYJEz*+H{clMbv+kQFATW1&`z@(1#*XPix1}r@ zJEr^GmQrTym|k#ON(p2Zyq(LS!31v4f#OhL>-06ZrSurzPrrRzs)2FG^q4zRKNvr5 z54|h3lu;PedIhzaK$DB$Cal2Y>Ad%){2>w&kS$yw2^N9J)AR33)iQpZ{`S6<5#yTe z3J;{Z!3HpahfOq?z)RRb>h?X9a$}@soNEa*OuzY7Y9ZsY>DBL~GC6PXD{(pg|Ib`FJ^#Iw%XGu{QYKKJ zESb*#LCRFgh+ni-c& z@BS!toAL7W^iNVcjF+cR`6M+%{SjpJ6}GqmG}sPHfspE%8MGN}@$}k2c`c5cAl0DE zx;{|eY5MWcQZ{lQ`9WPV83oV?k_rQKFc>`IdW}I~>vY90QaYf9{ue0;>8-HwD`+lN z0=Hn<96|F)jbEfDL9(gs^uVuDR*dhb_k5MIV_ZJ{^j9fM_U|l?OxXgyIp3s`8COid@J%X!@x^q-?^5bA=Rwytu!FAbVq)N71l`;y0PdJ5a0twv zp7LEvgYm`m-tSVXjAy2A{w`(9cz*iF?^14zXQx~IkcvmKRB8IpA5sQzn+<+S88M!l zp8QkFgmK0689$}u&33{^?Svh7fN~-e186Lg-EjkqBLQ-NLpEqkP66Ec;}cjj{q0Yw zw~QaB-~J`#%=mP={BJ2)#^uv(e@j&|{+z!3x0E*H$LWuMOIb0lnJ)K7%87Bs^u#|> zzKk!Xum2;Z$#{DD%|BA|jAy3*{3B)0czU|!U$E;N{z?VQKNVtf0CgHfl-PM0Kuv7{ zMJ@$!7;`GH3M`-g>93S37pS8Fy60D5&2+_oVB=H%Ntsx_gbbL&?^x$|Y_Ko$;5v*!1WBqzV<6L$V{2fdYf0MV8|W7@t9b!OO0BOOx{r4?A`PZJRMIJHgMi}B;s zi_)#WApUd#L|M5CbqCox`_ZpI|7#&}|SER(b{|V;~gR1b$E7$RusdIA{7( zCTTTRP&U3YU4U8Io^kH<0A^`Z#?#Z=n5DyEy4HX$bOGyn%PcL;_+&aKi*z94*XhwL z(%;#iO%rf56ljE&-iM34!d-g z?q?Rzh!Y2hK#Yng$$*A16gV7p+>0QA$g3bEFhgMa18!+aPG-fmN~=xx z=8*OPTdO3{Fntz>bfpL=3GgWhg8G_Dpo4;x#01t%SLc*==LN}dfJRr?^%-NPPvnwT zpT3Aw+L8VFGyz9hfrja?IHgM%o2SQfNozB{oZihP9R==F3ks~6{)S6>0(d88#ZxAH6TflD!72GFg|+*zRX1G-T62Sb*?Q}7+FE!;|c zuDsI&1*N5?>+wi)PCvvWZNs=@`hOnjB#smOpzTmCj38GjPVeHC7G<0_eF3ku8Pk9M z={I<#6@@|lQqVQ#3QV9O6G;UYffv(x_@oO#3hMc!Ef`-;-@zw66IAB2gI3cl6qGKV zewJTah8<$|ndu7!rOWt0OJ&(Lm`<=Ni3yzMpZ;4wx^ntk0cp@w$S(ou1&lAJ&lZ%P z$oOiyu8{OZ#$VI-3rRPDs|%3AJ;Ks4;{W+US6j1YDe)`t!KyHRftl0wMWjI$g@mZ| zeP{4o06VA(-~+`ii;^75m>2jqwg!$Y1zrV7fn~g4uX89#gM}rs6a*Fc1%6GxpeWrr z{jiv{4C9UI55%NJ7@65u(j|DG5(s zs3;9usss*+<#N(|jB}=MlatP5-vMn4tI123!St#rNZYb65dekdndywO(grYzchb`A z)3p_))n#@}6VPPrzow-_+RHTgM2 z7EIr&Ds8~A2Aq7JuuNa5F6}klTuoY$;{`Zzya5aOOkbmh%j^$OvwyH;VVM0*P1=AR zVs_8;1?tk?(<{`a6&YVlpQSFH!vz{8V%1;*&2b87NEbje-4c*O>*)=q(gM>jX-La5 zo|yhYLpqM}G{}GImr-HbP;uhy1c%eZs8fxfid^l}|(F~%3u`*ft2@_YlQ%RlT&oGcF09~w)C zPnXw|7Mi|7S6YN|+4Q}-(oF&o6BXDU*RW+NaycHE?yo0p1TivkdaSjy!1T|0(l!vo ztwGMo)tA;2F%%vwzXEBx*VVWf{eXY6lr0Hvnr8z3k(TB94)(zsE+x+CipJ92 z(+?X;PoLgzDy_^8k=X*bi=P{`eQOOHs2BPGWZ#7856q;6Bdm}qI zvK06g1O6z1St4j+^FSnHjHDc%5N?(QM^EW(7oYMsy zq~}cUGnW=%b3DM6B`{~Yp1rgJ;{%Z4I~Zqg=Wvi_VFYJ-34w;~!j96)jL@9^1?22` zkcfKiB(1>sVmpts^dCmXKhrr~rNbD%Oiyr?He>uVeY&f(ALEPZ&s?QJql{c`(y@#$ zrf0ZGgM2>2O&T=hchgN;gK@`nCUPOyL| zv>PYqDP7HYeEKX;=}zur{Gd|`gjgIDSf(pR$qP?+^pc(o73D;Te)5uDz}PT-vbS^$ z-UBk*{7g^zTG#Q$jmj^MEbNE;4(_9hpor|`o^ z+R7M17JPlQ>vf8(ehV*(h1Yu{iMB={y|17n4zsnkV_PJU`B%u&RslxvmaC^lR(4vSANn? zOki^~1sbL&ERdF){v}=7c{*RPG~4u9fzm>Zcc!lmls06Vz%>0qptLRflW78upwZAB zLDEsv>w=_>*`Gqj`ls&*lFnefIbAVWT9@(3bpK#!bH*pr+k>U`7@tnx7A&pBxP1D< zU};luW1AH;rLtzaLWp!Ac}6PKdNFJ7}teO<>LR3n9{4T-!ktTc85-$aI!a zX*-pd{0a=9+1m}^kuFMY5x>wkMKS*a9msb8;wA>r!Ak;b zrmqi|R^kM;4nU_Y{GNU*T-u27<#gT%X(h%d(+wh|Ry;}?G;|gaC2h~ReENha zX$8h-(>F#*%Yoc*F-qE;2iXnNMWUs{bmqd%=BbKS_9yD-|5q$ zr2~ZDGeZ01ywwUE3fv030&}PTjFvV8gYW$!E254a#Xn7oqz?11u;-vGz@goXJ z{Cd+n;-zgtfpR=vT8{C=^k?zXPTyo5h6rO== z#Vevp9K6K};8+4(PYa5j3!SO<-@BF5svO34OWglTxLlK*K=n8cYHp=ZgsJ z0WHj$-Vh`$FWzmCPP|- z@!NFKOlb?oi_`rwr8OBZO|Qt5HfMY_eM6?S5&LX#Hn}ogF-ux_`kzc`ImTtvrL&|B zx#mI22^N7P)5Ef)Z5iKB>jEe61yiNPnL(pFhWXMW)9++SH-Xl%WJ{YeKAAo>TUwrR z_VlgU(wfNnUt~*rFutB{m?I6E?~2NimWJgYP!g!mk#=BQHvK@3w5r+@XaTu{8MH>O z95m8$fEhg2cS{^{PJOCBO(3CnIqUA=eG-y!rU#_$w z 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

{$Vs-=_HwqpbQ3N+F1+pA>f#%@Y1?Eog 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%0A4q_;Fcmxj*mD)+ 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 Z)0{j;rn%eae^T8h&GdW5^l(145CCz-*-8Ka