diff --git a/src/arch/x86_64/CodeGen.zig b/src/arch/x86_64/CodeGen.zig index 7896a2f3b7..0cae799e02 100644 --- a/src/arch/x86_64/CodeGen.zig +++ b/src/arch/x86_64/CodeGen.zig @@ -5325,15 +5325,39 @@ fn genSetStackArg(self: *Self, ty: Type, stack_offset: i32, mcv: MCValue) InnerE }); }, .register => |reg| { - _ = try self.addInst(.{ - .tag = .mov, - .ops = Mir.Inst.Ops.encode(.{ - .reg1 = .rsp, - .reg2 = registerAlias(reg, @intCast(u32, abi_size)), - .flags = 0b10, - }), - .data = .{ .imm = @bitCast(u32, -stack_offset) }, - }); + switch (ty.zigTypeTag()) { + .Float => { + const tag: Mir.Inst.Tag = switch (ty.tag()) { + .f32 => .mov_f32, + .f64 => .mov_f64, + else => return self.fail("TODO genSetStackArg for register for type {}", .{ty.fmtDebug()}), + }; + _ = try self.addInst(.{ + .tag = tag, + .ops = Mir.Inst.Ops.encode(.{ + .reg1 = switch (ty.tag()) { + .f32 => .esp, + .f64 => .rsp, + else => unreachable, + }, + .reg2 = reg.to128(), + .flags = 0b01, + }), + .data = .{ .imm = @bitCast(u32, -stack_offset) }, + }); + }, + else => { + _ = try self.addInst(.{ + .tag = .mov, + .ops = Mir.Inst.Ops.encode(.{ + .reg1 = .rsp, + .reg2 = registerAlias(reg, @intCast(u32, abi_size)), + .flags = 0b10, + }), + .data = .{ .imm = @bitCast(u32, -stack_offset) }, + }); + }, + } }, .ptr_stack_offset => { const reg = try self.copyToTmpRegister(ty, mcv); diff --git a/test/behavior.zig b/test/behavior.zig index cea8ded1ba..4d8b3587bc 100644 --- a/test/behavior.zig +++ b/test/behavior.zig @@ -1,163 +1,163 @@ const builtin = @import("builtin"); test { - // _ = @import("behavior/align.zig"); - // _ = @import("behavior/alignof.zig"); - // _ = @import("behavior/array.zig"); - // _ = @import("behavior/async_fn.zig"); - // _ = @import("behavior/atomics.zig"); - // _ = @import("behavior/await_struct.zig"); + _ = @import("behavior/align.zig"); + _ = @import("behavior/alignof.zig"); + _ = @import("behavior/array.zig"); + _ = @import("behavior/async_fn.zig"); + _ = @import("behavior/atomics.zig"); + _ = @import("behavior/await_struct.zig"); _ = @import("behavior/basic.zig"); - // _ = @import("behavior/bit_shifting.zig"); - // _ = @import("behavior/bitcast.zig"); - // _ = @import("behavior/bitreverse.zig"); - // _ = @import("behavior/bool.zig"); - // _ = @import("behavior/bugs/394.zig"); - // _ = @import("behavior/bugs/421.zig"); - // _ = @import("behavior/bugs/529.zig"); - // _ = @import("behavior/bugs/624.zig"); - // _ = @import("behavior/bugs/655.zig"); - // _ = @import("behavior/bugs/656.zig"); - // _ = @import("behavior/bugs/679.zig"); - // _ = @import("behavior/bugs/704.zig"); - // _ = @import("behavior/bugs/718.zig"); - // _ = @import("behavior/bugs/726.zig"); - // _ = @import("behavior/bugs/828.zig"); - // _ = @import("behavior/bugs/920.zig"); - // _ = @import("behavior/bugs/1025.zig"); - // _ = @import("behavior/bugs/1076.zig"); - // _ = @import("behavior/bugs/1111.zig"); - // _ = @import("behavior/bugs/1120.zig"); - // _ = @import("behavior/bugs/1277.zig"); - // _ = @import("behavior/bugs/1310.zig"); - // _ = @import("behavior/bugs/1381.zig"); - // _ = @import("behavior/bugs/1421.zig"); - // _ = @import("behavior/bugs/1442.zig"); - // _ = @import("behavior/bugs/1486.zig"); - // _ = @import("behavior/bugs/1500.zig"); - // _ = @import("behavior/bugs/1607.zig"); - // _ = @import("behavior/bugs/1735.zig"); - // _ = @import("behavior/bugs/1741.zig"); - // _ = @import("behavior/bugs/1851.zig"); - // _ = @import("behavior/bugs/1914.zig"); - // _ = @import("behavior/bugs/2006.zig"); - // _ = @import("behavior/bugs/2114.zig"); - // _ = @import("behavior/bugs/2346.zig"); - // _ = @import("behavior/bugs/2578.zig"); - // _ = @import("behavior/bugs/2692.zig"); - // _ = @import("behavior/bugs/2889.zig"); - // _ = @import("behavior/bugs/3007.zig"); - // _ = @import("behavior/bugs/3046.zig"); - // _ = @import("behavior/bugs/3112.zig"); - // _ = @import("behavior/bugs/3367.zig"); - // _ = @import("behavior/bugs/3384.zig"); - // _ = @import("behavior/bugs/3586.zig"); - // _ = @import("behavior/bugs/3742.zig"); - // _ = @import("behavior/bugs/3779.zig"); - // _ = @import("behavior/bugs/4328.zig"); - // _ = @import("behavior/bugs/4560.zig"); - // _ = @import("behavior/bugs/4769_a.zig"); - // _ = @import("behavior/bugs/4769_b.zig"); - // _ = @import("behavior/bugs/4954.zig"); - // _ = @import("behavior/bugs/5398.zig"); - // _ = @import("behavior/bugs/5413.zig"); - // _ = @import("behavior/bugs/5474.zig"); - // _ = @import("behavior/bugs/5487.zig"); - // _ = @import("behavior/bugs/6456.zig"); - // _ = @import("behavior/bugs/6781.zig"); - // _ = @import("behavior/bugs/6850.zig"); - // _ = @import("behavior/bugs/7003.zig"); - // _ = @import("behavior/bugs/7027.zig"); - // _ = @import("behavior/bugs/7047.zig"); - // _ = @import("behavior/bugs/7187.zig"); - // _ = @import("behavior/bugs/7250.zig"); - // _ = @import("behavior/bugs/9584.zig"); - // _ = @import("behavior/bugs/10138.zig"); - // _ = @import("behavior/bugs/10147.zig"); - // _ = @import("behavior/bugs/10970.zig"); - // _ = @import("behavior/bugs/11046.zig"); - // _ = @import("behavior/bugs/11100.zig"); - // _ = @import("behavior/bugs/11139.zig"); - // _ = @import("behavior/bugs/11159.zig"); - // _ = @import("behavior/bugs/11162.zig"); - // _ = @import("behavior/bugs/11165.zig"); - // _ = @import("behavior/bugs/11181.zig"); - // _ = @import("behavior/bugs/11182.zig"); - // _ = @import("behavior/bugs/11213.zig"); - // _ = @import("behavior/byteswap.zig"); - // _ = @import("behavior/byval_arg_var.zig"); - // _ = @import("behavior/call.zig"); - // _ = @import("behavior/cast.zig"); - // _ = @import("behavior/cast_int.zig"); - // _ = @import("behavior/comptime_memory.zig"); - // _ = @import("behavior/const_slice_child.zig"); - // _ = @import("behavior/defer.zig"); - // _ = @import("behavior/enum.zig"); - // _ = @import("behavior/error.zig"); - // _ = @import("behavior/eval.zig"); - // _ = @import("behavior/field_parent_ptr.zig"); - // _ = @import("behavior/floatop.zig"); - // _ = @import("behavior/fn.zig"); - // _ = @import("behavior/fn_delegation.zig"); - // _ = @import("behavior/fn_in_struct_in_comptime.zig"); - // _ = @import("behavior/for.zig"); - // _ = @import("behavior/generics.zig"); - // _ = @import("behavior/hasdecl.zig"); - // _ = @import("behavior/hasfield.zig"); - // _ = @import("behavior/if.zig"); - // _ = @import("behavior/import.zig"); - // _ = @import("behavior/incomplete_struct_param_tld.zig"); - // _ = @import("behavior/int128.zig"); - // _ = @import("behavior/int_div.zig"); - // _ = @import("behavior/inttoptr.zig"); - // _ = @import("behavior/ir_block_deps.zig"); - // _ = @import("behavior/math.zig"); - // _ = @import("behavior/maximum_minimum.zig"); - // _ = @import("behavior/member_func.zig"); - // _ = @import("behavior/merge_error_sets.zig"); - // _ = @import("behavior/muladd.zig"); - // _ = @import("behavior/namespace_depends_on_compile_var.zig"); - // _ = @import("behavior/null.zig"); - // _ = @import("behavior/optional.zig"); - // _ = @import("behavior/pointers.zig"); - // _ = @import("behavior/popcount.zig"); - // _ = @import("behavior/prefetch.zig"); - // _ = @import("behavior/ptrcast.zig"); - // _ = @import("behavior/pub_enum.zig"); - // _ = @import("behavior/ref_var_in_if_after_if_2nd_switch_prong.zig"); - // _ = @import("behavior/reflection.zig"); - // _ = @import("behavior/saturating_arithmetic.zig"); - // _ = @import("behavior/select.zig"); - // _ = @import("behavior/shuffle.zig"); - // _ = @import("behavior/sizeof_and_typeof.zig"); - // _ = @import("behavior/slice.zig"); - // _ = @import("behavior/slice_sentinel_comptime.zig"); - // _ = @import("behavior/src.zig"); - // _ = @import("behavior/struct.zig"); - // _ = @import("behavior/packed-struct.zig"); - // _ = @import("behavior/struct_contains_null_ptr_itself.zig"); - // _ = @import("behavior/struct_contains_slice_of_itself.zig"); - // _ = @import("behavior/switch.zig"); - // _ = @import("behavior/switch_prong_err_enum.zig"); - // _ = @import("behavior/switch_prong_implicit_cast.zig"); - // _ = @import("behavior/this.zig"); - // _ = @import("behavior/translate_c_macros.zig"); - // _ = @import("behavior/truncate.zig"); - // _ = @import("behavior/try.zig"); - // _ = @import("behavior/tuple.zig"); - // _ = @import("behavior/type.zig"); - // _ = @import("behavior/type_info.zig"); - // _ = @import("behavior/typename.zig"); - // _ = @import("behavior/undefined.zig"); - // _ = @import("behavior/underscore.zig"); - // _ = @import("behavior/union.zig"); - // _ = @import("behavior/union_with_members.zig"); - // _ = @import("behavior/usingnamespace.zig"); - // _ = @import("behavior/var_args.zig"); - // _ = @import("behavior/vector.zig"); - // _ = @import("behavior/void.zig"); - // _ = @import("behavior/while.zig"); - // _ = @import("behavior/widening.zig"); + _ = @import("behavior/bit_shifting.zig"); + _ = @import("behavior/bitcast.zig"); + _ = @import("behavior/bitreverse.zig"); + _ = @import("behavior/bool.zig"); + _ = @import("behavior/bugs/394.zig"); + _ = @import("behavior/bugs/421.zig"); + _ = @import("behavior/bugs/529.zig"); + _ = @import("behavior/bugs/624.zig"); + _ = @import("behavior/bugs/655.zig"); + _ = @import("behavior/bugs/656.zig"); + _ = @import("behavior/bugs/679.zig"); + _ = @import("behavior/bugs/704.zig"); + _ = @import("behavior/bugs/718.zig"); + _ = @import("behavior/bugs/726.zig"); + _ = @import("behavior/bugs/828.zig"); + _ = @import("behavior/bugs/920.zig"); + _ = @import("behavior/bugs/1025.zig"); + _ = @import("behavior/bugs/1076.zig"); + _ = @import("behavior/bugs/1111.zig"); + _ = @import("behavior/bugs/1120.zig"); + _ = @import("behavior/bugs/1277.zig"); + _ = @import("behavior/bugs/1310.zig"); + _ = @import("behavior/bugs/1381.zig"); + _ = @import("behavior/bugs/1421.zig"); + _ = @import("behavior/bugs/1442.zig"); + _ = @import("behavior/bugs/1486.zig"); + _ = @import("behavior/bugs/1500.zig"); + _ = @import("behavior/bugs/1607.zig"); + _ = @import("behavior/bugs/1735.zig"); + _ = @import("behavior/bugs/1741.zig"); + _ = @import("behavior/bugs/1851.zig"); + _ = @import("behavior/bugs/1914.zig"); + _ = @import("behavior/bugs/2006.zig"); + _ = @import("behavior/bugs/2114.zig"); + _ = @import("behavior/bugs/2346.zig"); + _ = @import("behavior/bugs/2578.zig"); + _ = @import("behavior/bugs/2692.zig"); + _ = @import("behavior/bugs/2889.zig"); + _ = @import("behavior/bugs/3007.zig"); + _ = @import("behavior/bugs/3046.zig"); + _ = @import("behavior/bugs/3112.zig"); + _ = @import("behavior/bugs/3367.zig"); + _ = @import("behavior/bugs/3384.zig"); + _ = @import("behavior/bugs/3586.zig"); + _ = @import("behavior/bugs/3742.zig"); + _ = @import("behavior/bugs/3779.zig"); + _ = @import("behavior/bugs/4328.zig"); + _ = @import("behavior/bugs/4560.zig"); + _ = @import("behavior/bugs/4769_a.zig"); + _ = @import("behavior/bugs/4769_b.zig"); + _ = @import("behavior/bugs/4954.zig"); + _ = @import("behavior/bugs/5398.zig"); + _ = @import("behavior/bugs/5413.zig"); + _ = @import("behavior/bugs/5474.zig"); + _ = @import("behavior/bugs/5487.zig"); + _ = @import("behavior/bugs/6456.zig"); + _ = @import("behavior/bugs/6781.zig"); + _ = @import("behavior/bugs/6850.zig"); + _ = @import("behavior/bugs/7003.zig"); + _ = @import("behavior/bugs/7027.zig"); + _ = @import("behavior/bugs/7047.zig"); + _ = @import("behavior/bugs/7187.zig"); + _ = @import("behavior/bugs/7250.zig"); + _ = @import("behavior/bugs/9584.zig"); + _ = @import("behavior/bugs/10138.zig"); + _ = @import("behavior/bugs/10147.zig"); + _ = @import("behavior/bugs/10970.zig"); + _ = @import("behavior/bugs/11046.zig"); + _ = @import("behavior/bugs/11100.zig"); + _ = @import("behavior/bugs/11139.zig"); + _ = @import("behavior/bugs/11159.zig"); + _ = @import("behavior/bugs/11162.zig"); + _ = @import("behavior/bugs/11165.zig"); + _ = @import("behavior/bugs/11181.zig"); + _ = @import("behavior/bugs/11182.zig"); + _ = @import("behavior/bugs/11213.zig"); + _ = @import("behavior/byteswap.zig"); + _ = @import("behavior/byval_arg_var.zig"); + _ = @import("behavior/call.zig"); + _ = @import("behavior/cast.zig"); + _ = @import("behavior/cast_int.zig"); + _ = @import("behavior/comptime_memory.zig"); + _ = @import("behavior/const_slice_child.zig"); + _ = @import("behavior/defer.zig"); + _ = @import("behavior/enum.zig"); + _ = @import("behavior/error.zig"); + _ = @import("behavior/eval.zig"); + _ = @import("behavior/field_parent_ptr.zig"); + _ = @import("behavior/floatop.zig"); + _ = @import("behavior/fn.zig"); + _ = @import("behavior/fn_delegation.zig"); + _ = @import("behavior/fn_in_struct_in_comptime.zig"); + _ = @import("behavior/for.zig"); + _ = @import("behavior/generics.zig"); + _ = @import("behavior/hasdecl.zig"); + _ = @import("behavior/hasfield.zig"); + _ = @import("behavior/if.zig"); + _ = @import("behavior/import.zig"); + _ = @import("behavior/incomplete_struct_param_tld.zig"); + _ = @import("behavior/int128.zig"); + _ = @import("behavior/int_div.zig"); + _ = @import("behavior/inttoptr.zig"); + _ = @import("behavior/ir_block_deps.zig"); + _ = @import("behavior/math.zig"); + _ = @import("behavior/maximum_minimum.zig"); + _ = @import("behavior/member_func.zig"); + _ = @import("behavior/merge_error_sets.zig"); + _ = @import("behavior/muladd.zig"); + _ = @import("behavior/namespace_depends_on_compile_var.zig"); + _ = @import("behavior/null.zig"); + _ = @import("behavior/optional.zig"); + _ = @import("behavior/pointers.zig"); + _ = @import("behavior/popcount.zig"); + _ = @import("behavior/prefetch.zig"); + _ = @import("behavior/ptrcast.zig"); + _ = @import("behavior/pub_enum.zig"); + _ = @import("behavior/ref_var_in_if_after_if_2nd_switch_prong.zig"); + _ = @import("behavior/reflection.zig"); + _ = @import("behavior/saturating_arithmetic.zig"); + _ = @import("behavior/select.zig"); + _ = @import("behavior/shuffle.zig"); + _ = @import("behavior/sizeof_and_typeof.zig"); + _ = @import("behavior/slice.zig"); + _ = @import("behavior/slice_sentinel_comptime.zig"); + _ = @import("behavior/src.zig"); + _ = @import("behavior/struct.zig"); + _ = @import("behavior/packed-struct.zig"); + _ = @import("behavior/struct_contains_null_ptr_itself.zig"); + _ = @import("behavior/struct_contains_slice_of_itself.zig"); + _ = @import("behavior/switch.zig"); + _ = @import("behavior/switch_prong_err_enum.zig"); + _ = @import("behavior/switch_prong_implicit_cast.zig"); + _ = @import("behavior/this.zig"); + _ = @import("behavior/translate_c_macros.zig"); + _ = @import("behavior/truncate.zig"); + _ = @import("behavior/try.zig"); + _ = @import("behavior/tuple.zig"); + _ = @import("behavior/type.zig"); + _ = @import("behavior/type_info.zig"); + _ = @import("behavior/typename.zig"); + _ = @import("behavior/undefined.zig"); + _ = @import("behavior/underscore.zig"); + _ = @import("behavior/union.zig"); + _ = @import("behavior/union_with_members.zig"); + _ = @import("behavior/usingnamespace.zig"); + _ = @import("behavior/var_args.zig"); + _ = @import("behavior/vector.zig"); + _ = @import("behavior/void.zig"); + _ = @import("behavior/while.zig"); + _ = @import("behavior/widening.zig"); if (builtin.stage2_arch == .wasm32) { _ = @import("behavior/wasm.zig"); diff --git a/test/behavior/basic.zig b/test/behavior/basic.zig index 10e48c6c7b..d62ba75dee 100644 --- a/test/behavior/basic.zig +++ b/test/behavior/basic.zig @@ -402,6 +402,7 @@ fn testPointerToVoidReturnType2() *const void { test "array 2D const double ptr" { if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; + if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO const rect_2d_vertexes = [_][1]f32{ @@ -414,6 +415,7 @@ test "array 2D const double ptr" { test "array 2D const double ptr with offset" { if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; + if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; const rect_2d_vertexes = [_][2]f32{ @@ -426,6 +428,7 @@ test "array 2D const double ptr with offset" { test "array 3D const double ptr with offset" { if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; + if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO const rect_3d_vertexes = [_][2][2]f32{ diff --git a/test/behavior/math.zig b/test/behavior/math.zig index 60c71010d4..3b73d93c01 100644 --- a/test/behavior/math.zig +++ b/test/behavior/math.zig @@ -198,7 +198,6 @@ test "const number literal" { const ten = 10; test "float equality" { - if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO diff --git a/test/behavior/union.zig b/test/behavior/union.zig index 8315ea8a22..7f17ff50c6 100644 --- a/test/behavior/union.zig +++ b/test/behavior/union.zig @@ -882,6 +882,7 @@ test "extern union doesn't trigger field check at comptime" { test "anonymous union literal syntax" { 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_x86_64) return error.SkipZigTest; // TODO const S = struct { const Number = union {