search_amd64.s raw
1 // Code generated by command: go run asm2.go -out search_amd64.s -stubs stub_search_amd64.go. DO NOT EDIT.
2
3 #include "textflag.h"
4
5 // func Search(xs []uint64, k uint64) int16
6 TEXT ·Search(SB), NOSPLIT, $0-34
7 MOVQ xs_base+0(FP), AX
8 MOVQ xs_len+8(FP), CX
9 MOVQ k+24(FP), DX
10
11 // Save n
12 MOVQ CX, BX
13
14 // Initialize idx register to zero.
15 XORL BP, BP
16
17 loop:
18 // Unroll1
19 CMPQ (AX)(BP*8), DX
20 JAE Found
21
22 // Unroll2
23 CMPQ 16(AX)(BP*8), DX
24 JAE Found2
25
26 // Unroll3
27 CMPQ 32(AX)(BP*8), DX
28 JAE Found3
29
30 // Unroll4
31 CMPQ 48(AX)(BP*8), DX
32 JAE Found4
33
34 // plus8
35 ADDQ $0x08, BP
36 CMPQ BP, CX
37 JB loop
38 JMP NotFound
39
40 Found2:
41 ADDL $0x02, BP
42 JMP Found
43
44 Found3:
45 ADDL $0x04, BP
46 JMP Found
47
48 Found4:
49 ADDL $0x06, BP
50
51 Found:
52 MOVL BP, BX
53
54 NotFound:
55 MOVL BX, BP
56 SHRL $0x1f, BP
57 ADDL BX, BP
58 SHRL $0x01, BP
59 MOVL BP, ret+32(FP)
60 RET
61