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