blob: d3e49aefb4c1c1cd12fa045d5a6d9538a427bee0 [file] [log] [blame]
// Copyright 2014 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// +build ppc64 ppc64le
#include "textflag.h"
TEXT ·SwapInt32(SB),NOSPLIT,$0-20
BR ·SwapUint32(SB)
TEXT ·SwapUint32(SB),NOSPLIT,$0-20
MOVD addr+0(FP), R3
MOVW new+8(FP), R4
SYNC
LWAR (R3), R5
STWCCC R4, (R3)
BNE -3(PC)
SYNC
ISYNC
MOVW R5, old+16(FP)
RET
TEXT ·SwapInt64(SB),NOSPLIT,$0-24
BR ·SwapUint64(SB)
TEXT ·SwapUint64(SB),NOSPLIT,$0-24
MOVD addr+0(FP), R3
MOVD new+8(FP), R4
SYNC
LDAR (R3), R5
STDCCC R4, (R3)
BNE -3(PC)
SYNC
ISYNC
MOVD R5, old+16(FP)
RET
TEXT ·SwapUintptr(SB),NOSPLIT,$0-24
BR ·SwapUint64(SB)
TEXT ·CompareAndSwapInt32(SB),NOSPLIT,$0-17
BR ·CompareAndSwapUint32(SB)
TEXT ·CompareAndSwapUint32(SB),NOSPLIT,$0-17
MOVD addr+0(FP), R3
MOVW old+8(FP), R4
MOVW new+12(FP), R5
SYNC
LWAR (R3), R6
CMPW R6, R4
BNE 8(PC)
STWCCC R5, (R3)
BNE -5(PC)
SYNC
ISYNC
MOVD $1, R3
MOVB R3, swapped+16(FP)
RET
MOVB R0, swapped+16(FP)
RET
TEXT ·CompareAndSwapUintptr(SB),NOSPLIT,$0-25
BR ·CompareAndSwapUint64(SB)
TEXT ·CompareAndSwapInt64(SB),NOSPLIT,$0-25
BR ·CompareAndSwapUint64(SB)
TEXT ·CompareAndSwapUint64(SB),NOSPLIT,$0-25
MOVD addr+0(FP), R3
MOVD old+8(FP), R4
MOVD new+16(FP), R5
SYNC
LDAR (R3), R6
CMP R6, R4
BNE 8(PC)
STDCCC R5, (R3)
BNE -5(PC)
SYNC
ISYNC
MOVD $1, R3
MOVB R3, swapped+24(FP)
RET
MOVB R0, swapped+24(FP)
RET
TEXT ·AddInt32(SB),NOSPLIT,$0-20
BR ·AddUint32(SB)
TEXT ·AddUint32(SB),NOSPLIT,$0-20
MOVD addr+0(FP), R3
MOVW delta+8(FP), R4
SYNC
LWAR (R3), R5
ADD R4, R5
STWCCC R5, (R3)
BNE -4(PC)
SYNC
ISYNC
MOVW R5, ret+16(FP)
RET
TEXT ·AddUintptr(SB),NOSPLIT,$0-24
BR ·AddUint64(SB)
TEXT ·AddInt64(SB),NOSPLIT,$0-24
BR ·AddUint64(SB)
TEXT ·AddUint64(SB),NOSPLIT,$0-24
MOVD addr+0(FP), R3
MOVD delta+8(FP), R4
SYNC
LDAR (R3), R5
ADD R4, R5
STDCCC R5, (R3)
BNE -4(PC)
SYNC
ISYNC
MOVD R5, ret+16(FP)
RET
TEXT ·LoadInt32(SB),NOSPLIT,$0-12
BR ·LoadUint32(SB)
TEXT ·LoadUint32(SB),NOSPLIT,$0-12
MOVD addr+0(FP), R3
SYNC
MOVW 0(R3), R3
CMPW R3, R3, CR7
BC 4, 30, 1(PC) // bne- cr7,0x4
ISYNC
MOVW R3, val+8(FP)
RET
TEXT ·LoadInt64(SB),NOSPLIT,$0-16
BR ·LoadUint64(SB)
TEXT ·LoadUint64(SB),NOSPLIT,$0-16
MOVD addr+0(FP), R3
SYNC
MOVD 0(R3), R3
CMP R3, R3, CR7
BC 4, 30, 1(PC) // bne- cr7,0x4
ISYNC
MOVD R3, val+8(FP)
RET
TEXT ·LoadUintptr(SB),NOSPLIT,$0-16
BR ·LoadPointer(SB)
TEXT ·LoadPointer(SB),NOSPLIT,$0-16
BR ·LoadUint64(SB)
TEXT ·StoreInt32(SB),NOSPLIT,$0-12
BR ·StoreUint32(SB)
TEXT ·StoreUint32(SB),NOSPLIT,$0-12
MOVD addr+0(FP), R3
MOVW val+8(FP), R4
SYNC
MOVW R4, 0(R3)
RET
TEXT ·StoreInt64(SB),NOSPLIT,$0-16
BR ·StoreUint64(SB)
TEXT ·StoreUint64(SB),NOSPLIT,$0-16
MOVD addr+0(FP), R3
MOVD val+8(FP), R4
SYNC
MOVD R4, 0(R3)
RET
TEXT ·StoreUintptr(SB),NOSPLIT,$0-16
BR ·StoreUint64(SB)