1
0
mirror of https://github.com/chai2010/advanced-go-programming-book.git synced 2025-05-24 12:32:21 +00:00
2018-12-16 12:37:35 +08:00

58 lines
894 B
ArmAsm
Executable File

// Copyright © 2017 ChaiShushan <chaishushan{AT}gmail.com>.
// License: https://creativecommons.org/licenses/by-nc-sa/4.0/
#include "textflag.h"
// func Add2(n, m int64) int32
TEXT ·Add2(SB), NOSPLIT, $0-24
MOVQ n+0(FP), AX
MOVQ m+8(FP), BX
ADDQ AX, BX
MOVQ BX, ret+16(FP)
RET
// func BSF(n int64) int
TEXT ·BSF(SB), NOSPLIT, $0
BSFQ n+0(FP), AX
JEQ allZero
MOVQ AX, ret+8(FP)
RET
allZero:
MOVQ $-1, ret+8(FP)
RET
// func BSF32(n int32) int32
TEXT ·BSF32(SB), NOSPLIT, $0
BSFL n+0(FP), AX
JEQ allZero32
MOVL AX, ret+8(FP)
RET
allZero32:
MOVL $-1, ret+8(FP)
RET
// func Sum2(s []int64) int64
TEXT ·Sum2(SB), NOSPLIT, $0
MOVQ $0, DX
MOVQ s_base+0(FP), AX
MOVQ s_len+8(FP), DI
MOVQ $0, CX
CMPQ CX, DI
JGE Sum2End
Sum2Loop:
MOVQ (AX), BP
ADDQ BP, DX
ADDQ $8, AX
INCQ CX
CMPQ CX, DI
JL Sum2Loop
Sum2End:
MOVQ DX, ret+24(FP)
RET
// vim: set ft=txt: