]> Cypherpunks repositories - gostls13.git/commitdiff
runtime/internal/atomic: Remove unnecessary checks for GOARCH_ppc64
authorCarlos Eduardo Seo <cseo@linux.vnet.ibm.com>
Wed, 22 Mar 2017 17:25:30 +0000 (14:25 -0300)
committerLynn Boger <laboger@linux.vnet.ibm.com>
Wed, 22 Mar 2017 18:14:41 +0000 (18:14 +0000)
Starting in go1.9, the minimum processor requirement for ppc64 is POWER8. This
means the checks for GOARCH_ppc64 in asm_ppc64x.s can be removed, since we can
assume LBAR and STBCCC instructions (both from ISA 2.06) will always be
available.

Updates #19074

Change-Id: Ib4418169cd9fc6f871a5ab126b28ee58a2f349e2
Reviewed-on: https://go-review.googlesource.com/38406
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Reviewed-by: Lynn Boger <laboger@linux.vnet.ibm.com>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

src/runtime/internal/atomic/asm_ppc64x.s

index aa6067e15bb2c59c61fa73515650dca5610c2fda..7117aef1580790322ef41062209bf3f0ae842ef5 100644 (file)
@@ -165,32 +165,12 @@ TEXT runtime∕internal∕atomic·Store64(SB), NOSPLIT, $0-16
 TEXT runtime∕internal∕atomic·Or8(SB), NOSPLIT, $0-9
        MOVD    ptr+0(FP), R3
        MOVBZ   val+8(FP), R4
-#ifdef  GOARCH_ppc64
-       // Align ptr down to 4 bytes so we can use 32-bit load/store.
-       // R5 = (R3 << 0) & ~3
-       RLDCR   $0, R3, $~3, R5
-       // Compute val shift.
-       // Big endian.  ptr = ptr ^ 3
-       XOR     $3, R3
-       // R6 = ((ptr & 3) * 8) = (ptr << 3) & (3*8)
-       RLDC    $3, R3, $(3*8), R6
-       // Shift val for aligned ptr.  R4 = val << R6
-       SLD     R6, R4, R4
-       SYNC
-
-again:
-       LWAR    (R5), R6
-       OR      R4, R6
-       STWCCC  R6, (R5)
-       BNE     again
-#else
        SYNC
 again:
        LBAR    (R3), R6
        OR      R4, R6
        STBCCC  R6, (R3)
        BNE     again
-#endif
        ISYNC
        RET
 
@@ -198,34 +178,11 @@ again:
 TEXT runtime∕internal∕atomic·And8(SB), NOSPLIT, $0-9
        MOVD    ptr+0(FP), R3
        MOVBZ   val+8(FP), R4
-#ifdef  GOARCH_ppc64
-       // Align ptr down to 4 bytes so we can use 32-bit load/store.
-       // R5 = (R3 << 0) & ~3
-       RLDCR   $0, R3, $~3, R5
-       // Compute val shift.
-       // Big endian.  ptr = ptr ^ 3
-       XOR     $3, R3
-       // R6 = ((ptr & 3) * 8) = (ptr << 3) & (3*8)
-       RLDC    $3, R3, $(3*8), R6
-       // Shift val for aligned ptr.  R4 = val << R6 | ^(0xFF << R6)
-       MOVD    $0xFF, R7
-       SLD     R6, R4
-       SLD     R6, R7
-       XOR     $-1, R7
-       OR      R7, R4
-       SYNC
-again:
-       LWAR    (R5), R6
-       AND     R4, R6
-       STWCCC  R6, (R5)
-       BNE     again
-#else
        SYNC
 again:
        LBAR    (R3),R6
        AND     R4,R6
        STBCCC  R6,(R3)
        BNE     again
-#endif
        ISYNC
        RET