@@ -4387,31 +4387,35 @@ func InitTables() {
4387
4387
makeAtomicGuardedIntrinsicARM64 := func (op0 , op1 ssa.Op , typ , rtyp types.Kind , emit atomicOpEmitter ) intrinsicBuilder {
4388
4388
4389
4389
return func (s * state , n * ir.CallExpr , args []* ssa.Value ) * ssa.Value {
4390
- // Target Atomic feature is identified by dynamic detection
4391
- addr := s .entryNewValue1A (ssa .OpAddr , types .Types [types .TBOOL ].PtrTo (), ir .Syms .ARM64HasATOMICS , s .sb )
4392
- v := s .load (types .Types [types .TBOOL ], addr )
4393
- b := s .endBlock ()
4394
- b .Kind = ssa .BlockIf
4395
- b .SetControl (v )
4396
- bTrue := s .f .NewBlock (ssa .BlockPlain )
4397
- bFalse := s .f .NewBlock (ssa .BlockPlain )
4398
- bEnd := s .f .NewBlock (ssa .BlockPlain )
4399
- b .AddEdgeTo (bTrue )
4400
- b .AddEdgeTo (bFalse )
4401
- b .Likely = ssa .BranchLikely
4402
-
4403
- // We have atomic instructions - use it directly.
4404
- s .startBlock (bTrue )
4405
- emit (s , n , args , op1 , typ )
4406
- s .endBlock ().AddEdgeTo (bEnd )
4407
-
4408
- // Use original instruction sequence.
4409
- s .startBlock (bFalse )
4410
- emit (s , n , args , op0 , typ )
4411
- s .endBlock ().AddEdgeTo (bEnd )
4412
-
4413
- // Merge results.
4414
- s .startBlock (bEnd )
4390
+ if buildcfg .GOARM64 .LSE {
4391
+ emit (s , n , args , op1 , typ )
4392
+ } else {
4393
+ // Target Atomic feature is identified by dynamic detection
4394
+ addr := s .entryNewValue1A (ssa .OpAddr , types .Types [types .TBOOL ].PtrTo (), ir .Syms .ARM64HasATOMICS , s .sb )
4395
+ v := s .load (types .Types [types .TBOOL ], addr )
4396
+ b := s .endBlock ()
4397
+ b .Kind = ssa .BlockIf
4398
+ b .SetControl (v )
4399
+ bTrue := s .f .NewBlock (ssa .BlockPlain )
4400
+ bFalse := s .f .NewBlock (ssa .BlockPlain )
4401
+ bEnd := s .f .NewBlock (ssa .BlockPlain )
4402
+ b .AddEdgeTo (bTrue )
4403
+ b .AddEdgeTo (bFalse )
4404
+ b .Likely = ssa .BranchLikely
4405
+
4406
+ // We have atomic instructions - use it directly.
4407
+ s .startBlock (bTrue )
4408
+ emit (s , n , args , op1 , typ )
4409
+ s .endBlock ().AddEdgeTo (bEnd )
4410
+
4411
+ // Use original instruction sequence.
4412
+ s .startBlock (bFalse )
4413
+ emit (s , n , args , op0 , typ )
4414
+ s .endBlock ().AddEdgeTo (bEnd )
4415
+
4416
+ // Merge results.
4417
+ s .startBlock (bEnd )
4418
+ }
4415
4419
if rtyp == types .TNIL {
4416
4420
return nil
4417
4421
} else {
0 commit comments