TEXT __builtin_ctz(SB), 1, $0 BYTE $0x0F; BYTE $0xBC; BYTE $0xC5 /* BSFL RARG, AX */ RET TEXT __builtin_ctzll(SB), 1, $0 LONG $0xC5BC0F48 /* BSFL RARG, AX */ RET TEXT __builtin_clz(SB), 1, $0 BYTE $0x0F; BYTE $0xBD; BYTE $0xC5 /* BSRL RARG, AX */ XORL $31, AX RET TEXT __builtin_clzll(SB), 1, $0 BYTE $0x48; BYTE $0x0F; BYTE $0xBD; BYTE $0xC5 /* BSRQ RARG, AX */ XORL $63, AX RET TEXT atomic_fetch_add(SB), 1, $0afap: MOVL (RARG), AX /* exp */ MOVL AX, CX MOVL AX, BX ADDL d+8(FP), BX /* new */ LOCK; CMPXCHGL BX, (RARG) JNZ afap MOVL CX, AX RET TEXT atomic_fetch_sub(SB), 1, $0afsp: MOVL (RARG), AX /* exp */ MOVL AX, CX MOVL AX, BX SUBL d+8(FP), BX /* new */ LOCK; CMPXCHGL BX, (RARG) JNZ afsp MOVL CX, AX RET TEXT atomic_fetch_and(SB), 1, $0afandp: MOVL (RARG), AX /* exp */ MOVL AX, CX MOVL AX, BX ANDL d+8(FP), BX /* new */ LOCK; CMPXCHGL BX, (RARG) JNZ afandp MOVL CX, AX RET TEXT atomic_fetch_or(SB), 1, $0aforp: MOVL (RARG), AX /* exp */ MOVL AX, CX MOVL AX, BX ORL d+8(FP), BX /* new */ LOCK; CMPXCHGL BX, (RARG) JNZ aforp MOVL CX, AX RET TEXT atomic_fetch_xor(SB), 1, $0afxorp: MOVL (RARG), AX /* exp */ MOVL AX, CX MOVL AX, BX XORL d+8(FP), BX /* new */ LOCK; CMPXCHGL BX, (RARG) JNZ afxorp MOVL CX, AX RET TEXT atomic_exchange(SB), 1, $0afexp: MOVL (RARG), AX /* exp */ MOVL AX, CX LOCK; CMPXCHGL AX, (RARG) JNZ afexp MOVL CX, AX RET
TEXT __builtin_ctz(SB), 1, $0
BYTE $0x0F; BYTE $0xBC; BYTE $0xC5 /* BSFL RARG, AX */
RET
TEXT __builtin_ctzll(SB), 1, $0
LONG $0xC5BC0F48 /* BSFL RARG, AX */
RET
TEXT __builtin_clz(SB), 1, $0
BYTE $0x0F; BYTE $0xBD; BYTE $0xC5 /* BSRL RARG, AX */
XORL $31, AX
RET
TEXT __builtin_clzll(SB), 1, $0
BYTE $0x48; BYTE $0x0F; BYTE $0xBD; BYTE $0xC5 /* BSRQ RARG, AX */
XORL $63, AX
RET
TEXT atomic_fetch_add(SB), 1, $0
afap:
MOVL (RARG), AX /* exp */
MOVL AX, CX
MOVL AX, BX
ADDL d+8(FP), BX /* new */
LOCK; CMPXCHGL BX, (RARG)
JNZ afap
MOVL CX, AX
RET
TEXT atomic_fetch_sub(SB), 1, $0
afsp:
MOVL (RARG), AX /* exp */
MOVL AX, CX
MOVL AX, BX
SUBL d+8(FP), BX /* new */
LOCK; CMPXCHGL BX, (RARG)
JNZ afsp
MOVL CX, AX
RET
TEXT atomic_fetch_and(SB), 1, $0
afandp:
MOVL (RARG), AX /* exp */
MOVL AX, CX
MOVL AX, BX
ANDL d+8(FP), BX /* new */
LOCK; CMPXCHGL BX, (RARG)
JNZ afandp
MOVL CX, AX
RET
TEXT atomic_fetch_or(SB), 1, $0
aforp:
MOVL (RARG), AX /* exp */
MOVL AX, CX
MOVL AX, BX
ORL d+8(FP), BX /* new */
LOCK; CMPXCHGL BX, (RARG)
JNZ aforp
MOVL CX, AX
RET
TEXT atomic_fetch_xor(SB), 1, $0
afxorp:
MOVL (RARG), AX /* exp */
MOVL AX, CX
MOVL AX, BX
XORL d+8(FP), BX /* new */
LOCK; CMPXCHGL BX, (RARG)
JNZ afxorp
MOVL CX, AX
RET
TEXT atomic_exchange(SB), 1, $0
afexp:
MOVL (RARG), AX /* exp */
MOVL AX, CX
LOCK; CMPXCHGL AX, (RARG)
JNZ afexp
MOVL CX, AX
RET