| // Code generated by command: go run asm2.go -out search.s -stubs stub_search.go. DO NOT EDIT. |
| |
| #include "textflag.h" |
| |
| // func Search(xs []uint64, k uint64) int16 |
| TEXT ·Search(SB), NOSPLIT, $0-34 |
| MOVQ xs_base+0(FP), AX |
| MOVQ xs_len+8(FP), CX |
| MOVQ k+24(FP), DX |
| |
| // Save n |
| MOVQ CX, BX |
| |
| // Initialize idx register to zero. |
| XORL BP, BP |
| |
| loop: |
| // Unroll1 |
| CMPQ (AX)(BP*8), DX |
| JAE Found |
| |
| // Unroll2 |
| CMPQ 16(AX)(BP*8), DX |
| JAE Found2 |
| |
| // Unroll3 |
| CMPQ 32(AX)(BP*8), DX |
| JAE Found3 |
| |
| // Unroll4 |
| CMPQ 48(AX)(BP*8), DX |
| JAE Found4 |
| |
| // plus8 |
| ADDQ $0x08, BP |
| CMPQ BP, CX |
| JB loop |
| JMP NotFound |
| |
| Found2: |
| ADDL $0x02, BP |
| JMP Found |
| |
| Found3: |
| ADDL $0x04, BP |
| JMP Found |
| |
| Found4: |
| ADDL $0x06, BP |
| |
| Found: |
| MOVL BP, BX |
| |
| NotFound: |
| MOVL BX, BP |
| SHRL $0x1f, BP |
| ADDL BX, BP |
| SHRL $0x01, BP |
| MOVL BP, ret+32(FP) |
| RET |