-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathwritedigits_amd64.s
More file actions
101 lines (93 loc) · 1.95 KB
/
Copy pathwritedigits_amd64.s
File metadata and controls
101 lines (93 loc) · 1.95 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
// Code generated by command: go run gen_writedigits.go -out /home/debian/json/writedigits_amd64.s -pkg jsonx. DO NOT EDIT.
#include "textflag.h"
// func writeDigitsAsm(sig uint64, buf *byte, cnt uint64, trim uint64, tab *uint16) uint64
TEXT ·writeDigitsAsm(SB), NOSPLIT, $0-48
MOVQ sig+0(FP), CX
MOVQ buf+8(FP), BX
MOVQ cnt+16(FP), AX
MOVQ trim+24(FP), SI
MOVQ tab+32(FP), DI
MOVQ AX, R8
MOVQ AX, R9
MOVQ CX, AX
SHRQ $0x20, AX
TESTQ AX, AX
JZ loop4
MOVQ $0x0000000005f5e100, R10
XORQ DX, DX
MOVQ CX, AX
DIVQ R10
MOVQ AX, CX
MOVQ DX, AX
TESTQ SI, SI
JZ emit8
TESTQ AX, AX
JNZ emit8
SUBQ $0x00000008, R9
SUBQ $0x00000008, R8
JMP loop4
emit8:
MOVQ $0x0000000000002710, SI
XORQ DX, DX
DIVQ SI
MOVQ DX, DX
IMUL3Q $0x000028f6, DX, SI
SHRQ $0x14, SI
IMUL3Q $0x64, SI, R10
SUBQ R10, DX
MOVWQZX (DI)(DX*2), DX
MOVW DX, -2(BX)(R8*1)
MOVWQZX (DI)(SI*2), DX
MOVW DX, -4(BX)(R8*1)
IMUL3Q $0x000028f6, AX, DX
SHRQ $0x14, DX
IMUL3Q $0x64, DX, SI
SUBQ SI, AX
MOVWQZX (DI)(AX*2), AX
MOVW AX, -6(BX)(R8*1)
MOVWQZX (DI)(DX*2), AX
MOVW AX, -8(BX)(R8*1)
SUBQ $0x00000008, R8
loop4:
CMPQ CX, $0x00002710
JL tail
MOVQ $0x0000000000002710, SI
XORQ DX, DX
MOVQ CX, AX
DIVQ SI
MOVQ AX, CX
MOVQ DX, AX
IMUL3Q $0x000028f6, AX, DX
SHRQ $0x14, DX
IMUL3Q $0x64, DX, SI
SUBQ SI, AX
MOVWQZX (DI)(AX*2), AX
MOVW AX, -2(BX)(R8*1)
MOVWQZX (DI)(DX*2), AX
MOVW AX, -4(BX)(R8*1)
SUBQ $0x00000004, R8
JMP loop4
tail:
CMPQ CX, $0x00000064
JL under100
IMUL3Q $0x000028f6, CX, AX
SHRQ $0x14, AX
IMUL3Q $0x64, AX, DX
SUBQ DX, CX
MOVWQZX (DI)(CX*2), CX
MOVW CX, -2(BX)(R8*1)
SUBQ $0x00000002, R8
MOVQ AX, CX
under100:
CMPQ CX, $0x0000000a
JL single
MOVWQZX (DI)(CX*2), AX
MOVW AX, -2(BX)(R8*1)
JMP done
single:
ADDQ $0x00000030, CX
MOVQ CX, AX
MOVB AL, -1(BX)(R8*1)
done:
MOVQ R9, ret+40(FP)
RET