| ... | @@ -54,14 +54,15 @@ const SpinlockTable = struct { | ... | @@ -54,14 +54,15 @@ const SpinlockTable = struct { |
| 54 | | 54 | |
| 55 | fn acquire(self: *@This()) void { | 55 | fn acquire(self: *@This()) void { |
| 56 | while (true) { | 56 | while (true) { |
| 57 | const flag = if (comptime arch.isSPARC()) | 57 | const flag = if (comptime arch.isSPARC()) flag: { |
| 58 | asm volatile ("ldstub [%[addr]], %[flag]" | 58 | break :flag asm volatile ("ldstub [%[addr]], %[flag]" |
| 59 | : [flag] "=r" (-> @TypeOf(self.v)), | 59 | : [flag] "=r" (-> @TypeOf(self.v)), |
| 60 | : [addr] "r" (&self.v), | 60 | : [addr] "r" (&self.v), |
| 61 | : "memory" | 61 | : "memory" |
| 62 | ) | 62 | ); |
| 63 | else | 63 | } else flag: { |
| 64 | @atomicRmw(@TypeOf(self.v), &self.v, .Xchg, .Locked, .Acquire); | 64 | break :flag @atomicRmw(@TypeOf(self.v), &self.v, .Xchg, .Locked, .Acquire); |
| | 65 | }; |
| 65 | | 66 | |
| 66 | switch (flag) { | 67 | switch (flag) { |
| 67 | .Unlocked => break, | 68 | .Unlocked => break, |