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 3930c9714a78..70c9d7209c27 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 b179a3c024ec..91e8d0da4df2 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 86bd0fd4f4f2..05087042698c 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 ce4665f1ea6b..e3580483fb40 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 426939afdf10..27b963f52871 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 b12b6382082e..ea922b1a8dc5 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 a5fc59289422..904e38007353 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 36fe5a6ee8ec..c7115409e61c 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 81b02bb469db..5b00dc22aa52 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 1355f96231c4..b93b9b212a8c 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 a2a5a3d4d3bd..2ad9a8775cb3 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 c6ac3255c608..57383b3043b5 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 e339794fd480..97bb2f8ab175 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 495ca7f6dd2a..4c92b093ae4e 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 a33faecca311..375b72bad5f5 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 d06f01c2c32a..a5110a34b014 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 11cd75200011..1868298edb81 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 dc1f23dad442..2e614d90d1ff 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 f963ecdd9524..ddb63ac17c88 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 35050f172811..b3359e2e31d1 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 67176ff74b65..37717950626d 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 443c56a84a33..942844ec4e48 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} | 42 +- 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 | 38 +- 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 | 246 ++++---- 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, 6214 insertions(+), 5899 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 16c7dd3d0ef3..a229107e3aed 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 28bc52877221..e04cfd1fc0cc 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 68384c94d79c..7c184c8f3688 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 1cae2a710ed6..f0503d2219bc 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 2471a4536552..c70fd81fc487 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 4b9d5921daf9..de0c777d4505 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 5038c4061a81..e39d726e0f45 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 8a7b37c2c9f0..c01b1c153883 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 d801b30ff6e3..67ad7a74b6a3 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 35e250e8109f..c51792254d38 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 bc53afc62531..bee06522929e 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 75355775bbd7..cd66b1c6c8f7 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 1fb6d2dfa059..d4f4e0504d5a 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 2f83d312dcc1..c71eed6d0fd7 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 5f051416104b..d35220ca26bf 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 165186b1fba4..86a2f30cc82e 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 5fb686cee8ba..f0e93fa3be95 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 24d29ad0bba4..32a1a84ff999 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 188236752244..731fd7013d46 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 0329b3cc13b0..23b3876b9145 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 74406171b4b5..09b95332543d 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 ecb4e8912c97..c3513f6becd3 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 3cb1186d7109..21736e2d9a34 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 2f24649fb7b8..cd1ae208f87a 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 2865bcad2955..d2b288a52da1 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 4bb63e676851..bbb31f6233a0 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 55eb6e227614..7aa352bbf9b0 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 cd5e524b2041..033e5be5b8cb 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 bafcf6d83a87..f65c9eaed14f 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 389f2b117f47..2667b1f6261b 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 60b94807b96a..c3f574ed8a1c 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 b544595c7f70..a43ad91ac8a4 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 87affbce329c..8af2c5af7eb0 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 242d84176b45..67959fb98afa 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 9c70df3d5eaa..cd68cab7579f 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 e5070f7a1b29..aa47d7edf71c 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 0c67d4998ae1..5e767dc36c1e 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 dd883693a7e9..dda6e80c6595 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 a071e674ae22..7c935c2731ab 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 ae2a27ab8e83..947164b36906 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 710207b330dc..778388a05caf 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 1b0b64c193a4..aabebccb9918 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 f1f03c23e437..bf9764b1aa09 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 de1cd138062f..d83cc123f4c0 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 93cdcb2bab8e..8212b5b2c30b 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 a34bd288c098..b9ed4d813284 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 096e381629b5..c7510323d64d 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 b6714d20663b..afcf06e4c996 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 2e9dbdc2fbc6..c9a32d8ad4db 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 2eb7b5ade8ed..8a2c233cba87 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 608a925bf2db..bbc315c74554 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; - - 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(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(@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 + const floatFromInt = @import("./float_from_int.zig").floatFromInt; + + 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(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(@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 9b9df4ae7016..3615e8903595 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 1db7a0eac670..4d01d5c2e0b0 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 3bdcc60f20fd..1a1b5fc6d756 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 173dd79f753e..5f0c49c12940 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 c4fc9ca28f9f..b4d250b27733 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 7ec7d90fbada..8402c5726b0f 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 0a08c19847e1..889fa3c33f75 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 daddfb06e154..907c7a554da0 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 9739b912803c..2553de5f1892 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 a9d3709911eb..fe63f1c0a8d9 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 d70fedbfc301..c42e8f29744d 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 f90a57d1e0ba..90003660ecf1 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 737e1ec40950..09c0b12ed082 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 d14264fb0427..ae0ecbb98aed 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 1af4f83965fb..9c2339ff8a40 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 db4cc6505e1f..b158fb546d5c 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 e6c6a79d5e72..1c534c91757e 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 eb17c0f657de..c9dffa7e36fc 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 0bfa36d6e185..d573d095bc6f 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 22f885167f32..33836f3ccb13 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 ef5bce2afaef..3ffd79655aa7 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 0b43d61f4cc2..fcfbbaf64609 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 f85d1bb01371..b7cc567ff04e 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 ef9593cdf600..0414784b83bf 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 cd402e227ded..866f3f8c475d 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 d3a685a1ce16..a2b46506f045 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 9102960e8d70..f493453c91d2 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 7ee013339d70..9df7b833eafa 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 41e715e01399..55a5ab4da111 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 877203bd223f..cbf597ca8946 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 c887a9b6e4ff..0ade0cf46a61 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 6bea4e164a61..c6e7b90a65b3 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 44439976bbea..44d8b5cc7582 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 1a5c06af3d73..07e87ed55cd0 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 bf0b0edccb07..94f735b8c292 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 6fc7286f6858..78397a813108 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 71d90f7c3a7c..622d509a2f86 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 5c345ff12f70..d45a3d8a40cd 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 612c97859866..29595d07d9aa 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 61ccb1205d2d..bb772b3217f9 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 b02bd81671db..9652782a4968 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 2c6cdb54dc3a..187bb4ff3565 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 a13abda5feef..1cf587b1efcc 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 f63854e34f07..c1bac5eaaec6 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 e01893255549..8a869fe7182f 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 73d477ee12b3..315a99c308c1 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 c8a53b741c07..afded1838736 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 34397dd73477..9e47bbcb24cc 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 8ece83515e21..4a9629e5c012 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 c012bcee621f..3de342fc99d5 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 0402f0f6af7b..c9c34ffe98c8 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 "error_to_int": { - payloadHtml += "errorToInt"; + case "int_from_error": { + payloadHtml += "intFromError"; break; } - case "int_to_error": { - payloadHtml += "intToError"; + case "error_to_int": { + 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 bed1cc345e05..c574dbb5af55 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 080e6f54d32f..b83a9b017795 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 e2ee51e1dc95..f16f8a9a79b8 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 2f8ab02d5eda..5b24e9ea19ac 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 7fbe49fea29e..61e39eba27d5 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 b46b5c12f0a0..d3ad94324ec9 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 6c0c477725f8..81918638b544 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 7c9ffa2684a0..70cb293cf43b 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 b7dfc8d5294d..4b83e8e057af 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 67c676f0dd1f..3b4bfef826f0 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 a25743728218..b680a97933b1 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 457e817b682c..912bb9905633 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 8e8a57656441..6f91ee65f7f1 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 2e0e02a20f1d..2f9917a0f3d8 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 d5add70033f8..d3a3bfdeba8a 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 5a848c480892..8f3837b2bbd1 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 93681b77e18b..4d4446123732 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 3a6708613b23..511bf9ccc54b 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 db8524200260..636ef7f4d726 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 a7c191e650e0..d28e54b94cee 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 0b76d9d89d2a..a852287b538b 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 f539abf8b1fc..a6adb941a498 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 5a2f309fe4d8..54d2195e33a6 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 40735ca6b6c9..5debc81835ef 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 520c335794db..2a034011c2b0 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 2d90d6d6e354..98cabb473262 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 e2042650c6e7..40f5903a2491 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 b9ce14bc9262..50f34c45f37f 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 f6265cba488e..eec83f3d2e9d 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 e33bdb496d07..d12a672e7def 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 b8dc636693c0..51eb97ab3244 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 dba052079573..bd7100eb4674 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 43dbe3e33260..40df3290c0a5 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 26f5d50979ec..f47c334ee91f 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 37e3d1c1b3c8..7b298c71c2ee 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 dca4ab7ea760..3cb0f02c0d0a 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 efda42028486..a797fbce3e2d 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 958543084e31..3d96592f50cb 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 2d94594f615a..f0b086f9744a 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 0498c9c2978f..4c03c4897333 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 5b9b00538a4d..94ecf0d3ef7d 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 3015c30bfb4e..e0726d5444db 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 928d0cc9c338..38c5de9cad60 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 751f82a9ea0c..6047abc2134d 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 757c616b9bcb..a5ceebc9b1db 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 e1c147d25a3d..3329694da7dc 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 9cda7f2aba8e..9da3943d5d64 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 bc0162423b7f..7eec26a2b175 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 c9d8e611ca8c..b3b381faee3d 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 9ad5d218a94a..b438733589d0 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 ff7169530371..5c49553a14d7 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 74beb745de7b..2124e436ab42 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 bb0890be4ba7..8e828fd33498 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 7b954399d862..0c6e8a24f7cb 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 e7a28a7615f5..012d99f59a3c 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 469244fcd640..0deaa86468c0 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 d7b26ce2adc0..f33bd635fc5c 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 cf2f18d22f8a..62df89f0ae23 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 0ad154abefd8..da250af1bf8d 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 8c05dfeca5cf..4f1639cd60de 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 7b4bf3af2184..fd5b0754fea0 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 5da570fa4280..12a0bdcf3093 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 efec116db44f..e3e436fd2b3b 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 63ae22619651..c77164ee2de2 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 f858510bcfa9..a8d6641d8d12 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 51b6c1744f53..98375c850eed 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 e9c62705b5d4..c09341c70179 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 975375a2b949..0c627642b8ec 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 60f6243fce8c..fe57b5735d14 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 fb8b0b9d140f..f2804a31075a 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 e897850b83fd..4bdb0b91943a 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 80dcba3f6fbd..62c73d371453 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 73a209ebc06a..3a3af8f8d92b 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 bc5955d16a6c..859d753a6a74 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 dc45df9ea3f8..1c5b60ff1a78 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 e62a208d0bae..c7d354f78792 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 487812e1de31..846a809e0565 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 cdc33e351d31..22f7ba183ff4 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 929b98aebd22..56c199016d4c 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 5911edf36f98..5c4052db56c5 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 c091619f3a2e..7c58be2ec519 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 89474751594c..448e94f8e5bd 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 ad2763fa5412..c1a0f5c8e473 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 6b5758763c67..44e5a884459b 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 e186b2795a4a..ad67955a8d20 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 9cedf50e1337..7643e143e3c4 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 b320f579c62d..bbeecdda2376 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 4a1ff86721f1..301480f66273 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 db415199ed1e..fedbd1a40d74 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 a4d83dcbb305..cf37fc5adfb6 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 e9011c3c6345..26ba6cc919ae 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 dfd6fe4a9ed4..0f8ecbf21e8f 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 802bb1d8df2c..2bfea02c21b5 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 e4d6790505ea..b7ec29383b46 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 92d0fcfb440b..057ecc763adc 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 9f9196079150..0824a9e9a4c7 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 9f9e253547eb..87b92587f959 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 6084b01e6cad..b26e7eda29ae 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 0610b214d58a..875138cf4f47 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 66d204dfe132..781003bedc85 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 dfc1c9b5761f..8d55dee37f25 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 6d2d408adf90..31c30f2d3068 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 ab0da460d8fe..722bd646878e 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 627bb8498ec2..cbdaa76282c0 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 ca1256cb2ee7..c741df989777 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 aa1418f4a33e..c9b1cb1e922b 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 6ac51afb7880..ec514ca5de42 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 d765e403c8d4..b60a2ed38897 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 dc2f85776da1..c7dc7ae59991 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 c9274e11eecf..05c012c77cdb 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 09047bda83e9..41c9c9ea46ca 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 1f46915b27d9..b628bc2afced 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 c68fdc4f0fa2..ce8d44ff46d6 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 59575e0109fb..888b2f5c1cf3 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 00b8941974d9..c24d9416f136 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 2365b0cb2e87..c64084e6ed8e 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 c591f8cf7fcf..421815c04d97 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 211b9d8462b7..0d6fc2c67037 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 ae624dfd2bc9..821b903a34bb 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 180507ba7168..25a6786ec68b 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 f27b7e835b10..05066fa4361d 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 668b664c27a6..ea3de9c70d9c 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 d257425ad1e4..6cc6891c5aa0 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 4ccdac6c1e47..78d24a80bfa6 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 813bad074170..928503ad40b7 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 f5d2688efb64..9c83bd881c81 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 6a3aad7a99ea..a1cd8387dca8 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 14a9ce5d3fc7..688d0935871d 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 995edd02f72a..912eb141ea4d 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 0c3b802b8a43..e20448102d0b 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 7c5dc74eb369..4fc47c8d729d 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 86d803c21746..eff13c66375f 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 18b26d5ba997..a78fd6785add 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 e670682ff929..a39475cb2a20 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 82503c11a4a1..35f4aac57fe8 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 0a2812c6d993..ef153a2708e5 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 fb075513bb36..c84b2cb0c8b9 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 dcc6bd43fc28..6f0bf426bb05 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 10a8ae4dc2b8..422b95ca177a 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 5650bd64c2b8..8f3c0994d1dc 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 8e2b8536c8fd..98ea32d17fbb 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 135e66715e1d..dfe3061bae44 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 68d86777aa6e..c350c166ba89 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 0e72fa6e96b0..8e49a6b18084 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 546cbadfbdf9..b64284725833 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 7deb01db24cb..87bd95697c20 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 b0f5a1946117..9d79aff2212c 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 224da897c882..09ee056ef903 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 7dd0bd48434b..a06d37cf7dd9 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 bf3b8cb95396..645d5f688dc5 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 5979abcaf137..22851c4554cf 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 0a9c18656f45..279acc4298a8 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 a74256356c89..eabcfd051832 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 66014ad48dcf..b828b4e43f4d 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 099aaf73600a..ae4fde0da18b 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 fd6967bb9686..f3d8c7ae3c7c 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 25081510cd5f..dd6c79cd90e3 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 d54e998b675d..b02f72ed4c51 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 7bc78c17da4b..86e4e488203f 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 72d49b4f36af..36101a7f2274 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 2ef91ca3a690..f3eec86acc31 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 0c099744ccb9..f4f979f012da 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 b28134c7cd8c..de9ac9560027 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 1273527358c0..dafef5e63b1e 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 b021190ad9b8..66596b3b15d1 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 21785278ecff..e41e9157e6c0 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 58f7a67694ad..df6097851037 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 70c9d7209c27..0c93230d464d 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 2daac4881d16..66ab6206220d 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 82f87b1e9af6..da05c8c90d09 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 6039425b1a98..c5c6f052ec6a 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 873659e58cff..b99f5cf65faa 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 33fe547b57b9..8bc79a96c8b6 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 91e8d0da4df2..d4d4de07f28c 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 05087042698c..f1acd7e3e3c2 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 e3580483fb40..68ddcc94c458 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 739b747e3233..4c8b901fd1d7 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 4da4790e2f93..221b56b88aff 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 ea922b1a8dc5..2ba029136406 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 068a14942f50..0549287e60d4 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 8d9f9593ddec..28696b327155 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 e8431927b110..dd8f3c8a7e19 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 c7115409e61c..69326a170401 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 93454710dc28..159297a4e8f8 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 5b00dc22aa52..4a0fdde24f95 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 b93b9b212a8c..5080a0451a7c 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 3903229a2179..238a63c92112 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 0baa7e65ce4b..3446d6995091 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, - - @enumToInt(Register.sp) => .stack_pointer, - @enumToInt(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, + return switch (@intFromEnum(self)) { + @intFromEnum(Register.x0)...@intFromEnum(Register.xzr) => .general_purpose, + @intFromEnum(Register.w0)...@intFromEnum(Register.wzr) => .general_purpose, + + @intFromEnum(Register.sp) => .stack_pointer, + @intFromEnum(Register.wsp) => .stack_pointer, + + @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)), - - @enumToInt(Register.sp) => 32, - @enumToInt(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), + 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)), + + @intFromEnum(Register.sp) => 32, + @intFromEnum(Register.wsp) => 32, + + @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)), - - @enumToInt(Register.sp) => 31, - @enumToInt(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)), + 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)), + + @intFromEnum(Register.sp) => 31, + @intFromEnum(Register.wsp) => 31, + + @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, - - @enumToInt(Register.sp) => 64, - @enumToInt(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, + return switch (@intFromEnum(self)) { + @intFromEnum(Register.x0)...@intFromEnum(Register.xzr) => 64, + @intFromEnum(Register.w0)...@intFromEnum(Register.wzr) => 32, + + @intFromEnum(Register.sp) => 64, + @intFromEnum(Register.wsp) => 32, + + @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 2ad9a8775cb3..7ece4ba2e3a3 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 185c4ed921ca..1de40a7059bc 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 57383b3043b5..cba1de92c1ed 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 7b3ff0bfe980..5db3bf4f0520 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 97bb2f8ab175..f210f8e14461 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 7c943626f9dc..81656b422b6c 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 4c92b093ae4e..efd5ea6642f9 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 45ad1d7eb377..3314f4d993be 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 4c550d86379a..6e93f0fb88b3 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 3f4ad26e26ec..0bb2cbea301d 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 375b72bad5f5..b4ef42b953c5 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 625a5283b98a..a3963ca149b9 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 96b774292972..36eacf4db93a 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 923ba31266bf..e232a2db05ff 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 5f9a2f49b38d..d953a9410d4d 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 f368bb0c3c6c..d6a655a7046b 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 430562fe9ba7..3bd7dca2c68c 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 a5110a34b014..498eca4ce28b 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 81ca1dd80d5b..86324c9a7ce3 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 1868298edb81..1f390edc0210 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 0e5a2d0a7d2b..758cf5c72188 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 2e614d90d1ff..46ef5609dbe7 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 c7848bbc921a..73a842ebe9ec 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 4c41bf583b79..7d7fc0fb0d9d 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 d53dcb4368ca..9d8cca9445ba 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 b6087bbc3b61..b35dc489e420 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 57b870c198c0..cb468c101f82 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 07e3473338a3..07967ec694f8 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 202bb71e9b5e..e3fcc941eb46 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 3cb1c213e94a..c9b535e7faa7 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 a0d63335359c..283bd9ccca4b 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 8d2a36be9dfb..3c9a438f92fa 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 baa6340a139f..1252379aa794 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 ca0d961e2ded..b2c569447d20 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 ea8d4128c24e..1672e372297c 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 7895190005ba..f3289e544b81 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 7902d67d87e5..be283900f519 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 6433fb2762d0..b36e16452ec1 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 2d2930be8c9f..1e94e886b9b5 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 33f54dece5cc..db9638193829 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 8a1c4c5fdbb1..8dc10771ae7f 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 801c25e9d975..9bf54f25c3d1 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 2f56cad133d5..e7cd48a3dafd 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 014208cc0d48..ce7b03903a71 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 ddb63ac17c88..d73ec308917f 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 b3359e2e31d1..029157818957 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 841545bf0956..f9e2daeab195 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 37717950626d..8d5804c5e56d 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 942844ec4e48..c8ccfa497f52 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 1c3435dafd9b..ac5305b3f41d 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 8590aa8872df..f348ce2edbff 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 017b5b48249a..6e9435c49ef4 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 4ce408e65d0c..d3e4d8125014 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 cd4c81508a54..9ef4a55b398c 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 54609ac298da..dcbe78b0910c 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 a2636ecf42b6..50a098c11190 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 1ea2954777aa..1c8ff7cf7c4c 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 4b9a4d9fa1c8..ca66b1f8f5b9 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 368f055d05e1..db91529051a5 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 32b9dc1b2774..5bcc9e1c1606 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 81e276218a1f..abecf890256e 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 6c36ba5e157e..b4cf5577de35 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 49139db89979..6f3223c36225 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 ea5365888849..ae369c4e9d44 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 64eca08c82b5..627df37e9bb2 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 5123e190b62d..d51d864ea1cf 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 646433a5c0c0..ade0f0dc4215 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 a795d5f4b864..12926800e307 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 c61cd70e6b5a..14b0eca03084 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 2c2f1d72ff6e..85dc5e29b5d6 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 6123aa593bdd..4928e8672542 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 0982985cee14..1b1bb35e5b9d 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 15033d551581..56f3885a4aa5 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 a7d8e779cc21..b31b377c048b 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 7f22f63045d5..f0c8516f6721 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 426026d82617..fc2eae31befc 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 5a6e92403b2f..037fee74ee26 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 32c2dc13ac65..4e04fe580c23 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 5a3778b09fd7..c07a6df8347a 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 a14ae1c6e77a..3657e77e5065 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 ae5fbf09513a..fcbae214ace0 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 6686c911a574..6ced42998e6b 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 02e3ef4dcefe..f9fb9c76596e 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 b3d1a688fe32..a69396c2032a 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 94a6b460e4e2..9420b5d2fdb8 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 c94695ff2132..33cf1198ad1e 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 367a21fc0aab..47864a83c93e 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 db76697473a9..f06d45506099 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 5f05e4ae7014..ac0f97c40f89 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 0004435db6f3..9db604d3b9c0 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 3e8e247dacf8..02b486a8cb2b 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 2f8a4678d365..ef1a01671161 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 3687df914f25..1b60d1ba9a64 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 c6b41a149558..e41fbd229c49 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 14ffa6f499a2..ecb06aa2543b 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 6f2648f74b2e..5c634eceb098 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 d3ec870f4e86..bd47c3b56f7b 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 857123eae55d..b16cb8f66e63 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 ca36dbfbfbdf..cc410e62289a 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 674d0875aa6a..7cc7a4b6ab4c 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 08910b624838..9ac006a1a458 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 33f08344c4ca..312ff44e0ea4 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 d8ab4087e0a3..82cbb4469aaf 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 066bf1c10787..bdf7bec45816 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 c66d0f9cbb55..bfc22cca255d 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 0d2d91ece378..885700ecac8e 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 e624d7104c68..521331e345e5 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 cb57ca9ee151..455b79130a59 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 a8fedb7d5462..b3bc72c21b96 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 be222e539349..4780423caecf 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 ed18f43f48bf..694993074c4a 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 a0a3be83cfa4..fc30fe7d3c93 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 54bf58542542..2bd0364d4f8e 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 c9e2e2e5eb82..0960c3507457 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 cf2331ff7e5f..39da655d7fe1 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 f9df19802ade..8cf62c8ec0d8 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 ee0711088d92..8a2adb2f0778 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 092cbbd40034..d5206671fba8 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 4b31d9924a5c..2e2addbc2e1a 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 281ccf28a1d4..8954ace9ab1e 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 cf01f5ea2ca4..d6598aab3929 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 6200776d1892..40055a70b9b8 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 2b67390b05b2..1ce744d6d7e0 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 aa62be6dc5a0..7bdf07a1cefe 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 a8058e8c758d..5283239af6a7 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 f5aabf081c5a..27e4d81e5550 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 0abc1a4f73b0..9fdda1bdc706 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 3670def4eec8..45fa4c14f5e8 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 2e2f7e2be2a7..3019554fb83a 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 4bfc6c596012..301d273bde42 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 5e9cddb975d8..927537d952ce 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 fa5bc6fb4e31..eda001c086cb 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 fa05d1ed4909..956ea31f07b0 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 de4d7e9c652d..6ba69f8d3e87 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 b05c9f35d9ef..dfef66b6284b 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 e79f6d478f97..0cf9fcce0112 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 f23718c2ca57..fb55a733e522 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 8f0d26a4a92b..04f122b11d24 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 76543697a42d..bbf8bcfa4091 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 aac876e61476..6ae39489a0d8 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 4491a98e9cb0..8d5dbef1c36c 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 f199c2632c05..9f3b215bc216 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 f10a3dbdb3b9..f4371303fbde 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 8ade9ca2aaec..fac09cc26519 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 6484e301a9cc..2faa7c871318 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 6890e65714c4..fde58f69e5e2 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 6a691eb2e2f5..4aa0e623c796 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 7f57268f0645..9fc8038d7a35 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 a73409aea336..7a37eb2adcdf 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 068d8e2d8938..000000000000 --- 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 435bb68607f5..568c416062f1 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 a137b57d5152..0a4ed724ad0e 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 11d6768dfd0c..e40ca022d2c1 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 fcbfabe2978a..1060987b9a19 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 57c89bd7f47f..61e15f9ae6a8 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 c6412161e53a..ae347470f2e1 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 55ee27764112..137037f9e747 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 f848392c9092..d651329f72f8 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 a2e303670d6d..4ff284128284 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 1317c4376a83..18c60cd4aa68 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 3146c3860403..c730f80e6f42 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 b88d8aaf701c..5110e41334b8 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 e2694343e825..a87f62839660 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 39657badd479..1257636622da 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 fc6cdfdd28fe..2067f3b71609 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 b318baa16cb5..9537255d3304 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 9a270497afc9..1f42efc3f5e1 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 57f859e3d375..08424c4fe9fc 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 69d7a28fa44f..5720aa05cc87 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 e7ae5d72770a..1efc37542554 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 13adba1b9140..fcecfa861117 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 84ec6464f4ad..171936097dc9 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 0c0df594193e..34044e3b0fba 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 57cf54a02347..798b167dcb9d 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 242454e859c7..8d7e14acae89 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 dca2b9c3f65b..ef5526830e98 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 084057dc8e6d..0791540ed2d5 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 862e33906a6b..ce1b2763609a 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 4c3b3fc1ae08..ecf8f61fc524 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 000000000000..275f67006fb6 --- /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 000000000000..4a2ea05eaaf2 --- /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 43f89ab3b512..000000000000 --- 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 5bb9b75a8e77..000b5d1e6abd 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 f837ccd532e6..6a1f2db531e9 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 aa4725b7e7ad..9de1a2820f5e 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 120edd08387c..275b593ecc18 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 fa308f677d50..000000000000 --- 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 5b7b832177bf..3297525fd981 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 3813021c951b..6f480df09705 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 cd63c70259b3..3c76da2e38c0 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 672c2b74c90b..74fada311dea 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 97f440da3b3f..f1cd96d8e7cc 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 152c98182b5a..507ced1e57b4 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 d220869201d3..262a096bd9f7 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 fa58c0845a4a..5457a61d3fd0 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 10e140d881ff..c7d7b4233abe 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 cac9e3289440..dce09234d459 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 49852b5b7d03..9ea4c55d2981 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 902d3652e7a3..a7c7d8109422 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 c3d35958ae4b..882febbb7358 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 997db9fee8fa..7652cb329a08 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 874f015ffb93..7a4c0eb7e858 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 a0861ada490d..5b81cd5fbc20 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 6e523c2c8f6d..f49b7f137e8d 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 91df6a7c3d81..e3f221d0c560 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 dd02e1af34ac..f0322e0484f8 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 1ef986935b73..2f596db1ed7e 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 e96363b9cdc4..13a164ddea04 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 600540d1e043..eec50ee1afb0 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 3c1ae631ac40..9f243356b779 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 88da902ea2d2..1f679ea1d825 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 ef8fce6c8086..ca8adade0198 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 6be57f770eb8..c484df754083 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 d07eaee257e1..134daaeaa4f6 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 abd8549fd20d..208f76100519 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 11b09971e91b..29934668b07f 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 65e6e141cec7..45641fcabc0f 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 de5a3830ebc5..f5eba9ee62a0 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 4acd0afb815a..d9bd0dd2b223 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 2e0043c5ecec..c6d4e04fc1f7 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 cf65131a1f1e..48b92460c475 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 c9ebb6af7142..831845722bfd 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 ce72f912b87e..2bb3f84cb9d2 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 07facfa0f2c8..7c4594a3e3fb 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 2d4e0315bebc..000000000000 --- 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 000000000000..fac51c59c8df --- /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 000000000000..63e6753a53fd --- /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 f40fa93df0a7..000000000000 --- 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 27b5d6d1f73d..cb8ea24f635c 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 eb04da3c6816..ceded4f6189b 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 45e9cf9518fb..8970fa86d9a7 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 4f957a827cc7..7983ed8ec88b 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 000000000000..574ffc5a20ea --- /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 426e0c95cb74..000000000000 --- 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 2a5b55e86da1..821ac6c2563e 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 03aaef0d8cd5..2e69afd0a9ec 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 0db9d83dfbc7..26d224de8594 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 220161930bc4..8198cd8e5d31 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 89c7c4bd2aa8..1805c9ac756e 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 fd24b58f5563..7914a825180f 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 3e3500e71fc7..6d3e2e871d14 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 0891fd36997f..5d757f631b46 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 000000000000..f472789affcf --- /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 000000000000..c45e998d825e --- /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 86a5dd6dca3e..000000000000 --- 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 859197929c6f..99dd773f32a6 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 492732997065..380fd6215436 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 963448f8fe0e..560de215b532 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 641211872e12..34d5efe8df86 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 ed0d6f3ed95b..6f4ed225f791 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 dc6d4abeebea..22852966dbc2 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 cbc0fe131cfa..e773cdb4a088 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 abdccdf36df6..bb2c4bbe6282 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 f3542d583a13..a341435b36ba 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 49335ab69336..d348a0c908a0 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 60c6ce9a59ac..9b140a0923f6 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 896d68904623..b2cd8e1214ee 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 410bb9265811..886d443a00c0 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 12aa08a11cdc..28d1b0c6c6c4 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 5949031fb926..39e966267992 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 04e2a97e7aa0..71a490bc2f89 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 972adb59bb40..8d4a3fb999f5 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 c8e95e3969e5..e835db2cdf4d 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 3ce75710267c..661a12df97c8 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 62bbb3865c9c..a84424e368c0 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 7af505e20d34..91dc5f512899 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 ea34805e32ef..42c1328bb6fc 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 8391c3e21bfa..e6b065cd623f 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 d878bec18b0d..3024f1dee841 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 f2ff3e2cd142..4fa7691a1174 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 0bdb5af81cbe..a9828311233a 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 c8d31ec8dfac..75f43ed914b9 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 7c70fc509528..5bcf30547b5f 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 a20f2798bc8d..6661fe54eba8 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 d051966c523d..32bbc6564823 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 27e2b7b1db4f..f5647625ddbb 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 81864160dcc1..f0a24632283e 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 aa24b029bb73..dbcf5243c25b 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 c87f99837309..651ef34bdcd6 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 80436bd07f7f..29a7968e0baa 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 7011f0a2d5a0..58f98a55f57c 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 89f195937576..045760e287c2 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 60e361a47afe..6e5bd5384603 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 59c9b0657a26..44f745364c39 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 797d2bd50d30..4420e575c95f 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 1075b837de7f..ca80d420ff93 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 6770b5a0555c..83097f273391 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 bbad58c74c84..32491170ebbd 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 5dfc839c13f6..859f97fa8af5 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 cc837b8b5e1f..e7bb8d392f0d 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 bcb84eed122d..861b0ceaeece 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 2230434ea065..16fdea91ea17 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 58458474a4fc..3d7988454e27 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 9e337cb2007c..dd8f315dcdb1 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 3dad0be9df20..e3d09bc13333 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 435d409dd48e..5678102fc6c5 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 3523a360549f..df454a38d004 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 cbe0f642a5fb..28eaa9bad815 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 8ba3d98ea28f..5657ca52fe3c 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 44d8b9ee56ee..96b098237034 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 f093515a3867..2ac275f2b73d 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 f11330917061..a0fea6b60fd3 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 7edc0d2896bf..86ba2e2be0d0 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 36b52c96b9bd..da2fefbad5a3 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 3c1e2d53ef7a..6b70c0eaf4b4 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 31649744321b..f00b24e07acf 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 5293734c8200..083f36087370 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 ecf3dd0736fa..07b441188371 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 3db4b7ae74e4..2a2af57ef328 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 f7960437ec55..6d31d2055baa 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 5cabd76fce3f..6ebf96dc4c7f 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 22b8c1e58c73..5ced72b49266 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 38a8a0dd2038..7bde2c866d29 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 5ffd3a305d06..075854c45462 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 867bdccc1a6e..6dfa9bd70232 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 05d761de18ca..b83a7a4a3706 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 da6a7be4fa45..b0981e3d4df2 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 a38d8d4d8587..a58d6d984605 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 2ae55b4a6317..6e688d33d65b 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 7c99aba62584..2d717cb802b2 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 3b655e381e69..d4e96106bb1b 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 61c9fdd50ea2..d1fce95b2cd9 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 2668133a7c9c..f402cd3bd499 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 02062c454386..9c7c12903b29 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 d96841dd8c65..2c44a095dde7 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 47b9e21a2778..1b5a9836db8c 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 3fff746909a5..710b821e6552 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 be6dc58c7439..db5564e3a703 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 f464c379aa6c..8c57d52924b2 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 c9efbd0f35d2..54641a3ad5b9 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 5070ea457c3e..ae57d9b7b671 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 a33f2954e5f7..76f006992ed4 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 b7c70b90a44f..ba14c0380430 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 72c8c8c9d6f0..e75ae81f6f47 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 62db92668b4d..507362a93787 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 aed805cf66bf..538e0ecdf69a 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 c4967b413b80..57f8954f930c 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 2fd0a912e660..372bd80aa59a 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 fa7e628f4a02..9a8853c0e9d6 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 5bab7710b13a..caf7bbf0d6ea 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 fe931e875153..d335238b65f2 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 413959706faa..345d5cfc7407 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 457b2d12c07e..e7d3b66d6c0f 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 e53c7e90871d..c2e1d351eb59 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 fbe7718c6658..c6706d41764d 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 93d18178a84f..a72b2fcca2ca 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 466bf8d2ca66..61daf07a2ba2 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 28c53cb6d144..2c31aacc9d2f 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 3c515cbdf118..cc8c01db9e3b 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 95bc24426994..0cfcddbfeecc 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 ed7ac7777b4b..a376b66fdb85 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 bedbcdda8589..7736cb503479 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 6be303d9aad8..33f4a1099b03 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 c1be6856a7e7..78340db3163c 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 e4f3ac05a404..36c9aa2319b0 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 3d899e72cc86..af16bccc1478 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 ab9f93d17d4a..3653c2457de7 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 1a5676190ada..78247e68feaa 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 894a398b61de..a3ae7bc34687 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 1695265ab4eb..7958d0df71ea 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 765eaeb97eb2..a6f57e832a74 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 25ac3cb1372d..f0cf720fd338 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 ad14152e7681..66b56244436c 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 c00abf320b5c..a41f4d6f82ea 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 3d3457c76494..06316b40fa14 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 6a49c45e975d..89d204aa1c2a 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 6caf69dcdba0..966f3e278540 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 0cfdacffd1a3..445e17646c2b 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 5d6b0acbd6d8..78b008612137 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 b93cd07a2cc2..a7abcb0297c2 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 1ed65d5405f1..e3a3e9294dd9 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 5d105195ef7c..4584a87ef758 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 a4b9607a403c..0b14769eadb1 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 6fd1b26c7f31..0c8acf5aef15 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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
e=7%~Vgd5Ovd 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%0DGE;(|u@(s${@sv5?wkK#{yb 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 C#o0;#

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≠{dH}(B+9kYN*gO?DPjI8Y&c~CKfXnE}* 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%0Ant(=^zfUh!-r@ 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 z