| ... | @@ -7729,7 +7729,7 @@ fn airAtomicLoad(func: *Func, inst: Air.Inst.Index) !void { | ... | @@ -7729,7 +7729,7 @@ fn airAtomicLoad(func: *Func, inst: Air.Inst.Index) !void { |
| 7729 | const ptr_mcv = try func.resolveInst(atomic_load.ptr); | 7729 | const ptr_mcv = try func.resolveInst(atomic_load.ptr); |
| 7730 | | 7730 | |
| 7731 | const bit_size = elem_ty.bitSize(zcu); | 7731 | const bit_size = elem_ty.bitSize(zcu); |
| 7732 | if (bit_size > 64) return func.fail("TODO: airAtomicStore > 64 bits", .{}); | 7732 | if (bit_size > 64) return func.fail("TODO: airAtomicLoad > 64 bits", .{}); |
| 7733 | | 7733 | |
| 7734 | const result_mcv = try func.allocRegOrMem(elem_ty, inst, true); | 7734 | const result_mcv = try func.allocRegOrMem(elem_ty, inst, true); |
| 7735 | assert(result_mcv == .register); // should be less than 8 bytes | 7735 | assert(result_mcv == .register); // should be less than 8 bytes |
| ... | @@ -7793,6 +7793,17 @@ fn airAtomicStore(func: *Func, inst: Air.Inst.Index, order: std.builtin.AtomicOr | ... | @@ -7793,6 +7793,17 @@ fn airAtomicStore(func: *Func, inst: Air.Inst.Index, order: std.builtin.AtomicOr |
| 7793 | } | 7793 | } |
| 7794 | | 7794 | |
| 7795 | try func.store(ptr_mcv, val_mcv, ptr_ty); | 7795 | try func.store(ptr_mcv, val_mcv, ptr_ty); |
| | 7796 | |
| | 7797 | if (order == .seq_cst) { |
| | 7798 | _ = try func.addInst(.{ |
| | 7799 | .tag = .fence, |
| | 7800 | .data = .{ .fence = .{ |
| | 7801 | .pred = .rw, |
| | 7802 | .succ = .rw, |
| | 7803 | } }, |
| | 7804 | }); |
| | 7805 | } |
| | 7806 | |
| 7796 | return func.finishAir(inst, .unreach, .{ bin_op.lhs, bin_op.rhs, .none }); | 7807 | return func.finishAir(inst, .unreach, .{ bin_op.lhs, bin_op.rhs, .none }); |
| 7797 | } | 7808 | } |
| 7798 | | 7809 | |