1// Code generated by command: go run gen_fse.go -out ../fse_decoder_amd64.s -pkg=zstd. DO NOT EDIT.
2
3//go:build !appengine && !noasm && gc && !noasm
4
5// func buildDtable_asm(s *fseDecoder, ctx *buildDtableAsmContext) int
6TEXT ·buildDtable_asm(SB), $0-24
7 MOVQ ctx+8(FP), CX
8 MOVQ s+0(FP), DI
9
10 // Load values
11 MOVBQZX 4098(DI), DX
12 XORQ AX, AX
13 BTSQ DX, AX
14 MOVQ (CX), BX
15 MOVQ 16(CX), SI
16 LEAQ -1(AX), R8
17 MOVQ 8(CX), CX
18 MOVWQZX 4096(DI), DI
19
20 // End load values
21 // Init, lay down lowprob symbols
22 XORQ R9, R9
23 JMP init_main_loop_condition
24
25init_main_loop:
26 MOVWQSX (CX)(R9*2), R10
27 CMPW R10, $-1
28 JNE do_not_update_high_threshold
29 MOVB R9, 1(SI)(R8*8)
30 DECQ R8
31 MOVQ $0x0000000000000001, R10
32
33do_not_update_high_threshold:
34 MOVW R10, (BX)(R9*2)
35 INCQ R9
36
37init_main_loop_condition:
38 CMPQ R9, DI
39 JL init_main_loop
40
41 // Spread symbols
42 // Calculate table step
43 MOVQ AX, R9
44 SHRQ $0x01, R9
45 MOVQ AX, R10
46 SHRQ $0x03, R10
47 LEAQ 3(R9)(R10*1), R9
48
49 // Fill add bits values
50 LEAQ -1(AX), R10
51 XORQ R11, R11
52 XORQ R12, R12
53 JMP spread_main_loop_condition
54
55spread_main_loop:
56 XORQ R13, R13
57 MOVWQSX (CX)(R12*2), R14
58 JMP spread_inner_loop_condition
59
60spread_inner_loop:
61 MOVB R12, 1(SI)(R11*8)
62
63adjust_position:
64 ADDQ R9, R11
65 ANDQ R10, R11
66 CMPQ R11, R8
67 JG adjust_position
68 INCQ R13
69
70spread_inner_loop_condition:
71 CMPQ R13, R14
72 JL spread_inner_loop
73 INCQ R12
74
75spread_main_loop_condition:
76 CMPQ R12, DI
77 JL spread_main_loop
78 TESTQ R11, R11
79 JZ spread_check_ok
80 MOVQ ctx+8(FP), AX
81 MOVQ R11, 24(AX)
82 MOVQ $+1, ret+16(FP)
83 RET
84
85spread_check_ok:
86 // Build Decoding table
87 XORQ DI, DI
88
89build_table_main_table:
90 MOVBQZX 1(SI)(DI*8), CX
91 MOVWQZX (BX)(CX*2), R8
92 LEAQ 1(R8), R9
93 MOVW R9, (BX)(CX*2)
94 MOVQ R8, R9
95 BSRQ R9, R9
96 MOVQ DX, CX
97 SUBQ R9, CX
98 SHLQ CL, R8
99 SUBQ AX, R8
100 MOVB CL, (SI)(DI*8)
101 MOVW R8, 2(SI)(DI*8)
102 CMPQ R8, AX
103 JLE build_table_check1_ok
104 MOVQ ctx+8(FP), CX
105 MOVQ R8, 24(CX)
106 MOVQ AX, 32(CX)
107 MOVQ $+2, ret+16(FP)
108 RET
109
110build_table_check1_ok:
111 TESTB CL, CL
112 JNZ build_table_check2_ok
113 CMPW R8, DI
114 JNE build_table_check2_ok
115 MOVQ ctx+8(FP), AX
116 MOVQ R8, 24(AX)
117 MOVQ DI, 32(AX)
118 MOVQ $+3, ret+16(FP)
119 RET
120
121build_table_check2_ok:
122 INCQ DI
123 CMPQ DI, AX
124 JL build_table_main_table
125 MOVQ $+0, ret+16(FP)
126 RET
View as plain text