initial, untested, arm64
This commit is contained in:
parent
9384c46598
commit
235bcd7a0c
1 changed files with 73 additions and 0 deletions
73
countlines_arm64.s
Normal file
73
countlines_arm64.s
Normal file
|
|
@ -0,0 +1,73 @@
|
|||
// +build arm64,!gccgo,!appengine
|
||||
|
||||
#include "textflag.h"
|
||||
|
||||
TEXT ·countNewlinesASM(SB),NOSPLIT,$0
|
||||
MOVQ src+0(FP), R1
|
||||
MOVQ len+8(FP), R2
|
||||
|
||||
MOVD ZR, R0
|
||||
VMOVI $0x0A V23.B16
|
||||
|
||||
CMP $16, R2
|
||||
BLT tail
|
||||
|
||||
CMP $64, R2
|
||||
BLT loop
|
||||
|
||||
bigloop:
|
||||
VLD1.P 64(R1), [V16.B16, V17.B16, V18.B16, V19.B16]
|
||||
|
||||
VCMEQ V16.B16, V23.B16, V16.B16
|
||||
VCMEQ V17.B16, V23.B16, V17.B16
|
||||
VCMEQ V18.B16, V23.B16, V18.B16
|
||||
VCMEQ V19.B16, V23.B16, V19.B16
|
||||
|
||||
VADD V16.B16, V17.B16, V17.B16
|
||||
VADD V18.B16, V19.B16, V19.B16
|
||||
VADD V17.B16, V19.B16, V7.B16
|
||||
WORD $0x6E20B8E7 // VNEG V7.B16, V7.B16
|
||||
|
||||
VUADDLV V7.B16, V8
|
||||
VMOV V8.H[0], R3
|
||||
ADD R3, R0, R0
|
||||
|
||||
SUB $64, R2
|
||||
CMP ZR, R2
|
||||
BEQ ret
|
||||
|
||||
CMP $64, R2
|
||||
BGE bigloop
|
||||
|
||||
CMP $16, R2
|
||||
BLT tail
|
||||
|
||||
loop:
|
||||
VLD1.P 16(R1), [V7.B16]
|
||||
WORD $0x6E20B8E7 // VNEG V7.B16, V7.B16
|
||||
VUADDLV V7.B16, V8
|
||||
VMOV V8.H[0], R3
|
||||
ADD R3, R0, R0
|
||||
|
||||
SUB $16, R2
|
||||
CMP ZR, R2
|
||||
BEQ ret
|
||||
|
||||
CMP $16, R2
|
||||
BGE loop
|
||||
|
||||
tail:
|
||||
MOVBU 1(R1), R3
|
||||
CMP $0x0A, R3
|
||||
BNE next
|
||||
|
||||
ADD $1, R0
|
||||
next:
|
||||
|
||||
SUB $1, R2
|
||||
JNZ tail
|
||||
|
||||
|
||||
ret:
|
||||
MOVD R0, ret+16(FP)
|
||||
RET
|
||||
Loading…
Add table
Add a link
Reference in a new issue