blob: c4c7ab2d1fe355431921c2117eb70045bdf586a5 [file] [log] [blame]
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +05301// Code generated by command: go run gen.go -out ../decompress_amd64.s -pkg=huff0. DO NOT EDIT.
2
3//go:build amd64 && !appengine && !noasm && gc
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +05304
5// func decompress4x_main_loop_amd64(ctx *decompress4xContext)
6TEXT ·decompress4x_main_loop_amd64(SB), $0-8
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +05307 // Preload values
8 MOVQ ctx+0(FP), AX
9 MOVBQZX 8(AX), DI
Abhay Kumara2ae5992025-11-10 14:02:24 +000010 MOVQ 16(AX), BX
11 MOVQ 48(AX), SI
12 MOVQ 24(AX), R8
13 MOVQ 32(AX), R9
14 MOVQ (AX), R10
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +053015
16 // Main loop
17main_loop:
Abhay Kumara2ae5992025-11-10 14:02:24 +000018 XORL DX, DX
19 CMPQ BX, SI
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +053020 SETGE DL
21
22 // br0.fillFast32()
Abhay Kumara2ae5992025-11-10 14:02:24 +000023 MOVQ 32(R10), R11
24 MOVBQZX 40(R10), R12
25 CMPQ R12, $0x20
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +053026 JBE skip_fill0
Abhay Kumara2ae5992025-11-10 14:02:24 +000027 MOVQ 24(R10), AX
28 SUBQ $0x20, R12
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +053029 SUBQ $0x04, AX
Abhay Kumara2ae5992025-11-10 14:02:24 +000030 MOVQ (R10), R13
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +053031
32 // b.value |= uint64(low) << (b.bitsRead & 63)
Abhay Kumara2ae5992025-11-10 14:02:24 +000033 MOVL (AX)(R13*1), R13
34 MOVQ R12, CX
35 SHLQ CL, R13
36 MOVQ AX, 24(R10)
37 ORQ R13, R11
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +053038
Abhay Kumara2ae5992025-11-10 14:02:24 +000039 // exhausted += (br0.off < 4)
40 CMPQ AX, $0x04
41 ADCB $+0, DL
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +053042
43skip_fill0:
44 // val0 := br0.peekTopBits(peekBits)
Abhay Kumara2ae5992025-11-10 14:02:24 +000045 MOVQ R11, R13
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +053046 MOVQ DI, CX
Abhay Kumara2ae5992025-11-10 14:02:24 +000047 SHRQ CL, R13
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +053048
49 // v0 := table[val0&mask]
Abhay Kumara2ae5992025-11-10 14:02:24 +000050 MOVW (R9)(R13*2), CX
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +053051
52 // br0.advance(uint8(v0.entry)
53 MOVB CH, AL
Abhay Kumara2ae5992025-11-10 14:02:24 +000054 SHLQ CL, R11
55 ADDB CL, R12
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +053056
57 // val1 := br0.peekTopBits(peekBits)
58 MOVQ DI, CX
Abhay Kumara2ae5992025-11-10 14:02:24 +000059 MOVQ R11, R13
60 SHRQ CL, R13
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +053061
62 // v1 := table[val1&mask]
Abhay Kumara2ae5992025-11-10 14:02:24 +000063 MOVW (R9)(R13*2), CX
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +053064
65 // br0.advance(uint8(v1.entry))
66 MOVB CH, AH
Abhay Kumara2ae5992025-11-10 14:02:24 +000067 SHLQ CL, R11
68 ADDB CL, R12
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +053069
70 // these two writes get coalesced
71 // out[id * dstEvery + 0] = uint8(v0.entry >> 8)
72 // out[id * dstEvery + 1] = uint8(v1.entry >> 8)
Abhay Kumara2ae5992025-11-10 14:02:24 +000073 MOVW AX, (BX)
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +053074
75 // update the bitreader structure
Abhay Kumara2ae5992025-11-10 14:02:24 +000076 MOVQ R11, 32(R10)
77 MOVB R12, 40(R10)
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +053078
79 // br1.fillFast32()
Abhay Kumara2ae5992025-11-10 14:02:24 +000080 MOVQ 80(R10), R11
81 MOVBQZX 88(R10), R12
82 CMPQ R12, $0x20
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +053083 JBE skip_fill1
Abhay Kumara2ae5992025-11-10 14:02:24 +000084 MOVQ 72(R10), AX
85 SUBQ $0x20, R12
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +053086 SUBQ $0x04, AX
Abhay Kumara2ae5992025-11-10 14:02:24 +000087 MOVQ 48(R10), R13
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +053088
89 // b.value |= uint64(low) << (b.bitsRead & 63)
Abhay Kumara2ae5992025-11-10 14:02:24 +000090 MOVL (AX)(R13*1), R13
91 MOVQ R12, CX
92 SHLQ CL, R13
93 MOVQ AX, 72(R10)
94 ORQ R13, R11
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +053095
Abhay Kumara2ae5992025-11-10 14:02:24 +000096 // exhausted += (br1.off < 4)
97 CMPQ AX, $0x04
98 ADCB $+0, DL
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +053099
100skip_fill1:
101 // val0 := br1.peekTopBits(peekBits)
Abhay Kumara2ae5992025-11-10 14:02:24 +0000102 MOVQ R11, R13
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530103 MOVQ DI, CX
Abhay Kumara2ae5992025-11-10 14:02:24 +0000104 SHRQ CL, R13
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530105
106 // v0 := table[val0&mask]
Abhay Kumara2ae5992025-11-10 14:02:24 +0000107 MOVW (R9)(R13*2), CX
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530108
109 // br1.advance(uint8(v0.entry)
110 MOVB CH, AL
Abhay Kumara2ae5992025-11-10 14:02:24 +0000111 SHLQ CL, R11
112 ADDB CL, R12
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530113
114 // val1 := br1.peekTopBits(peekBits)
115 MOVQ DI, CX
Abhay Kumara2ae5992025-11-10 14:02:24 +0000116 MOVQ R11, R13
117 SHRQ CL, R13
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530118
119 // v1 := table[val1&mask]
Abhay Kumara2ae5992025-11-10 14:02:24 +0000120 MOVW (R9)(R13*2), CX
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530121
122 // br1.advance(uint8(v1.entry))
123 MOVB CH, AH
Abhay Kumara2ae5992025-11-10 14:02:24 +0000124 SHLQ CL, R11
125 ADDB CL, R12
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530126
127 // these two writes get coalesced
128 // out[id * dstEvery + 0] = uint8(v0.entry >> 8)
129 // out[id * dstEvery + 1] = uint8(v1.entry >> 8)
Abhay Kumara2ae5992025-11-10 14:02:24 +0000130 MOVW AX, (BX)(R8*1)
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530131
132 // update the bitreader structure
Abhay Kumara2ae5992025-11-10 14:02:24 +0000133 MOVQ R11, 80(R10)
134 MOVB R12, 88(R10)
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530135
136 // br2.fillFast32()
Abhay Kumara2ae5992025-11-10 14:02:24 +0000137 MOVQ 128(R10), R11
138 MOVBQZX 136(R10), R12
139 CMPQ R12, $0x20
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530140 JBE skip_fill2
Abhay Kumara2ae5992025-11-10 14:02:24 +0000141 MOVQ 120(R10), AX
142 SUBQ $0x20, R12
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530143 SUBQ $0x04, AX
Abhay Kumara2ae5992025-11-10 14:02:24 +0000144 MOVQ 96(R10), R13
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530145
146 // b.value |= uint64(low) << (b.bitsRead & 63)
Abhay Kumara2ae5992025-11-10 14:02:24 +0000147 MOVL (AX)(R13*1), R13
148 MOVQ R12, CX
149 SHLQ CL, R13
150 MOVQ AX, 120(R10)
151 ORQ R13, R11
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530152
Abhay Kumara2ae5992025-11-10 14:02:24 +0000153 // exhausted += (br2.off < 4)
154 CMPQ AX, $0x04
155 ADCB $+0, DL
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530156
157skip_fill2:
158 // val0 := br2.peekTopBits(peekBits)
Abhay Kumara2ae5992025-11-10 14:02:24 +0000159 MOVQ R11, R13
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530160 MOVQ DI, CX
Abhay Kumara2ae5992025-11-10 14:02:24 +0000161 SHRQ CL, R13
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530162
163 // v0 := table[val0&mask]
Abhay Kumara2ae5992025-11-10 14:02:24 +0000164 MOVW (R9)(R13*2), CX
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530165
166 // br2.advance(uint8(v0.entry)
167 MOVB CH, AL
Abhay Kumara2ae5992025-11-10 14:02:24 +0000168 SHLQ CL, R11
169 ADDB CL, R12
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530170
171 // val1 := br2.peekTopBits(peekBits)
172 MOVQ DI, CX
Abhay Kumara2ae5992025-11-10 14:02:24 +0000173 MOVQ R11, R13
174 SHRQ CL, R13
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530175
176 // v1 := table[val1&mask]
Abhay Kumara2ae5992025-11-10 14:02:24 +0000177 MOVW (R9)(R13*2), CX
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530178
179 // br2.advance(uint8(v1.entry))
180 MOVB CH, AH
Abhay Kumara2ae5992025-11-10 14:02:24 +0000181 SHLQ CL, R11
182 ADDB CL, R12
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530183
184 // these two writes get coalesced
185 // out[id * dstEvery + 0] = uint8(v0.entry >> 8)
186 // out[id * dstEvery + 1] = uint8(v1.entry >> 8)
Abhay Kumara2ae5992025-11-10 14:02:24 +0000187 MOVW AX, (BX)(R8*2)
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530188
189 // update the bitreader structure
Abhay Kumara2ae5992025-11-10 14:02:24 +0000190 MOVQ R11, 128(R10)
191 MOVB R12, 136(R10)
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530192
193 // br3.fillFast32()
Abhay Kumara2ae5992025-11-10 14:02:24 +0000194 MOVQ 176(R10), R11
195 MOVBQZX 184(R10), R12
196 CMPQ R12, $0x20
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530197 JBE skip_fill3
Abhay Kumara2ae5992025-11-10 14:02:24 +0000198 MOVQ 168(R10), AX
199 SUBQ $0x20, R12
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530200 SUBQ $0x04, AX
Abhay Kumara2ae5992025-11-10 14:02:24 +0000201 MOVQ 144(R10), R13
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530202
203 // b.value |= uint64(low) << (b.bitsRead & 63)
Abhay Kumara2ae5992025-11-10 14:02:24 +0000204 MOVL (AX)(R13*1), R13
205 MOVQ R12, CX
206 SHLQ CL, R13
207 MOVQ AX, 168(R10)
208 ORQ R13, R11
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530209
Abhay Kumara2ae5992025-11-10 14:02:24 +0000210 // exhausted += (br3.off < 4)
211 CMPQ AX, $0x04
212 ADCB $+0, DL
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530213
214skip_fill3:
215 // val0 := br3.peekTopBits(peekBits)
Abhay Kumara2ae5992025-11-10 14:02:24 +0000216 MOVQ R11, R13
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530217 MOVQ DI, CX
Abhay Kumara2ae5992025-11-10 14:02:24 +0000218 SHRQ CL, R13
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530219
220 // v0 := table[val0&mask]
Abhay Kumara2ae5992025-11-10 14:02:24 +0000221 MOVW (R9)(R13*2), CX
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530222
223 // br3.advance(uint8(v0.entry)
224 MOVB CH, AL
Abhay Kumara2ae5992025-11-10 14:02:24 +0000225 SHLQ CL, R11
226 ADDB CL, R12
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530227
228 // val1 := br3.peekTopBits(peekBits)
229 MOVQ DI, CX
Abhay Kumara2ae5992025-11-10 14:02:24 +0000230 MOVQ R11, R13
231 SHRQ CL, R13
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530232
233 // v1 := table[val1&mask]
Abhay Kumara2ae5992025-11-10 14:02:24 +0000234 MOVW (R9)(R13*2), CX
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530235
236 // br3.advance(uint8(v1.entry))
237 MOVB CH, AH
Abhay Kumara2ae5992025-11-10 14:02:24 +0000238 SHLQ CL, R11
239 ADDB CL, R12
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530240
241 // these two writes get coalesced
242 // out[id * dstEvery + 0] = uint8(v0.entry >> 8)
243 // out[id * dstEvery + 1] = uint8(v1.entry >> 8)
Abhay Kumara2ae5992025-11-10 14:02:24 +0000244 LEAQ (R8)(R8*2), CX
245 MOVW AX, (BX)(CX*1)
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530246
247 // update the bitreader structure
Abhay Kumara2ae5992025-11-10 14:02:24 +0000248 MOVQ R11, 176(R10)
249 MOVB R12, 184(R10)
250 ADDQ $0x02, BX
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530251 TESTB DL, DL
252 JZ main_loop
253 MOVQ ctx+0(FP), AX
Abhay Kumara2ae5992025-11-10 14:02:24 +0000254 SUBQ 16(AX), BX
255 SHLQ $0x02, BX
256 MOVQ BX, 40(AX)
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530257 RET
258
259// func decompress4x_8b_main_loop_amd64(ctx *decompress4xContext)
260TEXT ·decompress4x_8b_main_loop_amd64(SB), $0-8
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530261 // Preload values
262 MOVQ ctx+0(FP), CX
263 MOVBQZX 8(CX), DI
264 MOVQ 16(CX), BX
265 MOVQ 48(CX), SI
Abhay Kumara2ae5992025-11-10 14:02:24 +0000266 MOVQ 24(CX), R8
267 MOVQ 32(CX), R9
268 MOVQ (CX), R10
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530269
270 // Main loop
271main_loop:
Abhay Kumara2ae5992025-11-10 14:02:24 +0000272 XORL DX, DX
273 CMPQ BX, SI
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530274 SETGE DL
275
276 // br0.fillFast32()
Abhay Kumara2ae5992025-11-10 14:02:24 +0000277 MOVQ 32(R10), R11
278 MOVBQZX 40(R10), R12
279 CMPQ R12, $0x20
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530280 JBE skip_fill0
Abhay Kumara2ae5992025-11-10 14:02:24 +0000281 MOVQ 24(R10), R13
282 SUBQ $0x20, R12
283 SUBQ $0x04, R13
284 MOVQ (R10), R14
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530285
286 // b.value |= uint64(low) << (b.bitsRead & 63)
Abhay Kumara2ae5992025-11-10 14:02:24 +0000287 MOVL (R13)(R14*1), R14
288 MOVQ R12, CX
289 SHLQ CL, R14
290 MOVQ R13, 24(R10)
291 ORQ R14, R11
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530292
Abhay Kumara2ae5992025-11-10 14:02:24 +0000293 // exhausted += (br0.off < 4)
294 CMPQ R13, $0x04
295 ADCB $+0, DL
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530296
297skip_fill0:
298 // val0 := br0.peekTopBits(peekBits)
Abhay Kumara2ae5992025-11-10 14:02:24 +0000299 MOVQ R11, R13
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530300 MOVQ DI, CX
Abhay Kumara2ae5992025-11-10 14:02:24 +0000301 SHRQ CL, R13
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530302
303 // v0 := table[val0&mask]
Abhay Kumara2ae5992025-11-10 14:02:24 +0000304 MOVW (R9)(R13*2), CX
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530305
306 // br0.advance(uint8(v0.entry)
307 MOVB CH, AL
Abhay Kumara2ae5992025-11-10 14:02:24 +0000308 SHLQ CL, R11
309 ADDB CL, R12
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530310
311 // val1 := br0.peekTopBits(peekBits)
Abhay Kumara2ae5992025-11-10 14:02:24 +0000312 MOVQ R11, R13
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530313 MOVQ DI, CX
Abhay Kumara2ae5992025-11-10 14:02:24 +0000314 SHRQ CL, R13
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530315
316 // v1 := table[val0&mask]
Abhay Kumara2ae5992025-11-10 14:02:24 +0000317 MOVW (R9)(R13*2), CX
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530318
319 // br0.advance(uint8(v1.entry)
320 MOVB CH, AH
Abhay Kumara2ae5992025-11-10 14:02:24 +0000321 SHLQ CL, R11
322 ADDB CL, R12
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530323 BSWAPL AX
324
325 // val2 := br0.peekTopBits(peekBits)
Abhay Kumara2ae5992025-11-10 14:02:24 +0000326 MOVQ R11, R13
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530327 MOVQ DI, CX
Abhay Kumara2ae5992025-11-10 14:02:24 +0000328 SHRQ CL, R13
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530329
330 // v2 := table[val0&mask]
Abhay Kumara2ae5992025-11-10 14:02:24 +0000331 MOVW (R9)(R13*2), CX
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530332
333 // br0.advance(uint8(v2.entry)
334 MOVB CH, AH
Abhay Kumara2ae5992025-11-10 14:02:24 +0000335 SHLQ CL, R11
336 ADDB CL, R12
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530337
338 // val3 := br0.peekTopBits(peekBits)
Abhay Kumara2ae5992025-11-10 14:02:24 +0000339 MOVQ R11, R13
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530340 MOVQ DI, CX
Abhay Kumara2ae5992025-11-10 14:02:24 +0000341 SHRQ CL, R13
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530342
343 // v3 := table[val0&mask]
Abhay Kumara2ae5992025-11-10 14:02:24 +0000344 MOVW (R9)(R13*2), CX
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530345
346 // br0.advance(uint8(v3.entry)
347 MOVB CH, AL
Abhay Kumara2ae5992025-11-10 14:02:24 +0000348 SHLQ CL, R11
349 ADDB CL, R12
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530350 BSWAPL AX
351
352 // these four writes get coalesced
353 // out[id * dstEvery + 0] = uint8(v0.entry >> 8)
354 // out[id * dstEvery + 1] = uint8(v1.entry >> 8)
355 // out[id * dstEvery + 3] = uint8(v2.entry >> 8)
356 // out[id * dstEvery + 4] = uint8(v3.entry >> 8)
Abhay Kumara2ae5992025-11-10 14:02:24 +0000357 MOVL AX, (BX)
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530358
359 // update the bitreader structure
Abhay Kumara2ae5992025-11-10 14:02:24 +0000360 MOVQ R11, 32(R10)
361 MOVB R12, 40(R10)
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530362
363 // br1.fillFast32()
Abhay Kumara2ae5992025-11-10 14:02:24 +0000364 MOVQ 80(R10), R11
365 MOVBQZX 88(R10), R12
366 CMPQ R12, $0x20
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530367 JBE skip_fill1
Abhay Kumara2ae5992025-11-10 14:02:24 +0000368 MOVQ 72(R10), R13
369 SUBQ $0x20, R12
370 SUBQ $0x04, R13
371 MOVQ 48(R10), R14
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530372
373 // b.value |= uint64(low) << (b.bitsRead & 63)
Abhay Kumara2ae5992025-11-10 14:02:24 +0000374 MOVL (R13)(R14*1), R14
375 MOVQ R12, CX
376 SHLQ CL, R14
377 MOVQ R13, 72(R10)
378 ORQ R14, R11
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530379
Abhay Kumara2ae5992025-11-10 14:02:24 +0000380 // exhausted += (br1.off < 4)
381 CMPQ R13, $0x04
382 ADCB $+0, DL
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530383
384skip_fill1:
385 // val0 := br1.peekTopBits(peekBits)
Abhay Kumara2ae5992025-11-10 14:02:24 +0000386 MOVQ R11, R13
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530387 MOVQ DI, CX
Abhay Kumara2ae5992025-11-10 14:02:24 +0000388 SHRQ CL, R13
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530389
390 // v0 := table[val0&mask]
Abhay Kumara2ae5992025-11-10 14:02:24 +0000391 MOVW (R9)(R13*2), CX
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530392
393 // br1.advance(uint8(v0.entry)
394 MOVB CH, AL
Abhay Kumara2ae5992025-11-10 14:02:24 +0000395 SHLQ CL, R11
396 ADDB CL, R12
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530397
398 // val1 := br1.peekTopBits(peekBits)
Abhay Kumara2ae5992025-11-10 14:02:24 +0000399 MOVQ R11, R13
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530400 MOVQ DI, CX
Abhay Kumara2ae5992025-11-10 14:02:24 +0000401 SHRQ CL, R13
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530402
403 // v1 := table[val0&mask]
Abhay Kumara2ae5992025-11-10 14:02:24 +0000404 MOVW (R9)(R13*2), CX
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530405
406 // br1.advance(uint8(v1.entry)
407 MOVB CH, AH
Abhay Kumara2ae5992025-11-10 14:02:24 +0000408 SHLQ CL, R11
409 ADDB CL, R12
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530410 BSWAPL AX
411
412 // val2 := br1.peekTopBits(peekBits)
Abhay Kumara2ae5992025-11-10 14:02:24 +0000413 MOVQ R11, R13
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530414 MOVQ DI, CX
Abhay Kumara2ae5992025-11-10 14:02:24 +0000415 SHRQ CL, R13
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530416
417 // v2 := table[val0&mask]
Abhay Kumara2ae5992025-11-10 14:02:24 +0000418 MOVW (R9)(R13*2), CX
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530419
420 // br1.advance(uint8(v2.entry)
421 MOVB CH, AH
Abhay Kumara2ae5992025-11-10 14:02:24 +0000422 SHLQ CL, R11
423 ADDB CL, R12
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530424
425 // val3 := br1.peekTopBits(peekBits)
Abhay Kumara2ae5992025-11-10 14:02:24 +0000426 MOVQ R11, R13
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530427 MOVQ DI, CX
Abhay Kumara2ae5992025-11-10 14:02:24 +0000428 SHRQ CL, R13
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530429
430 // v3 := table[val0&mask]
Abhay Kumara2ae5992025-11-10 14:02:24 +0000431 MOVW (R9)(R13*2), CX
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530432
433 // br1.advance(uint8(v3.entry)
434 MOVB CH, AL
Abhay Kumara2ae5992025-11-10 14:02:24 +0000435 SHLQ CL, R11
436 ADDB CL, R12
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530437 BSWAPL AX
438
439 // these four writes get coalesced
440 // out[id * dstEvery + 0] = uint8(v0.entry >> 8)
441 // out[id * dstEvery + 1] = uint8(v1.entry >> 8)
442 // out[id * dstEvery + 3] = uint8(v2.entry >> 8)
443 // out[id * dstEvery + 4] = uint8(v3.entry >> 8)
Abhay Kumara2ae5992025-11-10 14:02:24 +0000444 MOVL AX, (BX)(R8*1)
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530445
446 // update the bitreader structure
Abhay Kumara2ae5992025-11-10 14:02:24 +0000447 MOVQ R11, 80(R10)
448 MOVB R12, 88(R10)
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530449
450 // br2.fillFast32()
Abhay Kumara2ae5992025-11-10 14:02:24 +0000451 MOVQ 128(R10), R11
452 MOVBQZX 136(R10), R12
453 CMPQ R12, $0x20
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530454 JBE skip_fill2
Abhay Kumara2ae5992025-11-10 14:02:24 +0000455 MOVQ 120(R10), R13
456 SUBQ $0x20, R12
457 SUBQ $0x04, R13
458 MOVQ 96(R10), R14
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530459
460 // b.value |= uint64(low) << (b.bitsRead & 63)
Abhay Kumara2ae5992025-11-10 14:02:24 +0000461 MOVL (R13)(R14*1), R14
462 MOVQ R12, CX
463 SHLQ CL, R14
464 MOVQ R13, 120(R10)
465 ORQ R14, R11
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530466
Abhay Kumara2ae5992025-11-10 14:02:24 +0000467 // exhausted += (br2.off < 4)
468 CMPQ R13, $0x04
469 ADCB $+0, DL
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530470
471skip_fill2:
472 // val0 := br2.peekTopBits(peekBits)
Abhay Kumara2ae5992025-11-10 14:02:24 +0000473 MOVQ R11, R13
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530474 MOVQ DI, CX
Abhay Kumara2ae5992025-11-10 14:02:24 +0000475 SHRQ CL, R13
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530476
477 // v0 := table[val0&mask]
Abhay Kumara2ae5992025-11-10 14:02:24 +0000478 MOVW (R9)(R13*2), CX
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530479
480 // br2.advance(uint8(v0.entry)
481 MOVB CH, AL
Abhay Kumara2ae5992025-11-10 14:02:24 +0000482 SHLQ CL, R11
483 ADDB CL, R12
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530484
485 // val1 := br2.peekTopBits(peekBits)
Abhay Kumara2ae5992025-11-10 14:02:24 +0000486 MOVQ R11, R13
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530487 MOVQ DI, CX
Abhay Kumara2ae5992025-11-10 14:02:24 +0000488 SHRQ CL, R13
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530489
490 // v1 := table[val0&mask]
Abhay Kumara2ae5992025-11-10 14:02:24 +0000491 MOVW (R9)(R13*2), CX
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530492
493 // br2.advance(uint8(v1.entry)
494 MOVB CH, AH
Abhay Kumara2ae5992025-11-10 14:02:24 +0000495 SHLQ CL, R11
496 ADDB CL, R12
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530497 BSWAPL AX
498
499 // val2 := br2.peekTopBits(peekBits)
Abhay Kumara2ae5992025-11-10 14:02:24 +0000500 MOVQ R11, R13
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530501 MOVQ DI, CX
Abhay Kumara2ae5992025-11-10 14:02:24 +0000502 SHRQ CL, R13
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530503
504 // v2 := table[val0&mask]
Abhay Kumara2ae5992025-11-10 14:02:24 +0000505 MOVW (R9)(R13*2), CX
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530506
507 // br2.advance(uint8(v2.entry)
508 MOVB CH, AH
Abhay Kumara2ae5992025-11-10 14:02:24 +0000509 SHLQ CL, R11
510 ADDB CL, R12
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530511
512 // val3 := br2.peekTopBits(peekBits)
Abhay Kumara2ae5992025-11-10 14:02:24 +0000513 MOVQ R11, R13
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530514 MOVQ DI, CX
Abhay Kumara2ae5992025-11-10 14:02:24 +0000515 SHRQ CL, R13
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530516
517 // v3 := table[val0&mask]
Abhay Kumara2ae5992025-11-10 14:02:24 +0000518 MOVW (R9)(R13*2), CX
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530519
520 // br2.advance(uint8(v3.entry)
521 MOVB CH, AL
Abhay Kumara2ae5992025-11-10 14:02:24 +0000522 SHLQ CL, R11
523 ADDB CL, R12
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530524 BSWAPL AX
525
526 // these four writes get coalesced
527 // out[id * dstEvery + 0] = uint8(v0.entry >> 8)
528 // out[id * dstEvery + 1] = uint8(v1.entry >> 8)
529 // out[id * dstEvery + 3] = uint8(v2.entry >> 8)
530 // out[id * dstEvery + 4] = uint8(v3.entry >> 8)
Abhay Kumara2ae5992025-11-10 14:02:24 +0000531 MOVL AX, (BX)(R8*2)
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530532
533 // update the bitreader structure
Abhay Kumara2ae5992025-11-10 14:02:24 +0000534 MOVQ R11, 128(R10)
535 MOVB R12, 136(R10)
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530536
537 // br3.fillFast32()
Abhay Kumara2ae5992025-11-10 14:02:24 +0000538 MOVQ 176(R10), R11
539 MOVBQZX 184(R10), R12
540 CMPQ R12, $0x20
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530541 JBE skip_fill3
Abhay Kumara2ae5992025-11-10 14:02:24 +0000542 MOVQ 168(R10), R13
543 SUBQ $0x20, R12
544 SUBQ $0x04, R13
545 MOVQ 144(R10), R14
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530546
547 // b.value |= uint64(low) << (b.bitsRead & 63)
Abhay Kumara2ae5992025-11-10 14:02:24 +0000548 MOVL (R13)(R14*1), R14
549 MOVQ R12, CX
550 SHLQ CL, R14
551 MOVQ R13, 168(R10)
552 ORQ R14, R11
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530553
Abhay Kumara2ae5992025-11-10 14:02:24 +0000554 // exhausted += (br3.off < 4)
555 CMPQ R13, $0x04
556 ADCB $+0, DL
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530557
558skip_fill3:
559 // val0 := br3.peekTopBits(peekBits)
Abhay Kumara2ae5992025-11-10 14:02:24 +0000560 MOVQ R11, R13
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530561 MOVQ DI, CX
Abhay Kumara2ae5992025-11-10 14:02:24 +0000562 SHRQ CL, R13
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530563
564 // v0 := table[val0&mask]
Abhay Kumara2ae5992025-11-10 14:02:24 +0000565 MOVW (R9)(R13*2), CX
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530566
567 // br3.advance(uint8(v0.entry)
568 MOVB CH, AL
Abhay Kumara2ae5992025-11-10 14:02:24 +0000569 SHLQ CL, R11
570 ADDB CL, R12
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530571
572 // val1 := br3.peekTopBits(peekBits)
Abhay Kumara2ae5992025-11-10 14:02:24 +0000573 MOVQ R11, R13
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530574 MOVQ DI, CX
Abhay Kumara2ae5992025-11-10 14:02:24 +0000575 SHRQ CL, R13
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530576
577 // v1 := table[val0&mask]
Abhay Kumara2ae5992025-11-10 14:02:24 +0000578 MOVW (R9)(R13*2), CX
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530579
580 // br3.advance(uint8(v1.entry)
581 MOVB CH, AH
Abhay Kumara2ae5992025-11-10 14:02:24 +0000582 SHLQ CL, R11
583 ADDB CL, R12
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530584 BSWAPL AX
585
586 // val2 := br3.peekTopBits(peekBits)
Abhay Kumara2ae5992025-11-10 14:02:24 +0000587 MOVQ R11, R13
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530588 MOVQ DI, CX
Abhay Kumara2ae5992025-11-10 14:02:24 +0000589 SHRQ CL, R13
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530590
591 // v2 := table[val0&mask]
Abhay Kumara2ae5992025-11-10 14:02:24 +0000592 MOVW (R9)(R13*2), CX
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530593
594 // br3.advance(uint8(v2.entry)
595 MOVB CH, AH
Abhay Kumara2ae5992025-11-10 14:02:24 +0000596 SHLQ CL, R11
597 ADDB CL, R12
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530598
599 // val3 := br3.peekTopBits(peekBits)
Abhay Kumara2ae5992025-11-10 14:02:24 +0000600 MOVQ R11, R13
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530601 MOVQ DI, CX
Abhay Kumara2ae5992025-11-10 14:02:24 +0000602 SHRQ CL, R13
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530603
604 // v3 := table[val0&mask]
Abhay Kumara2ae5992025-11-10 14:02:24 +0000605 MOVW (R9)(R13*2), CX
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530606
607 // br3.advance(uint8(v3.entry)
608 MOVB CH, AL
Abhay Kumara2ae5992025-11-10 14:02:24 +0000609 SHLQ CL, R11
610 ADDB CL, R12
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530611 BSWAPL AX
612
613 // these four writes get coalesced
614 // out[id * dstEvery + 0] = uint8(v0.entry >> 8)
615 // out[id * dstEvery + 1] = uint8(v1.entry >> 8)
616 // out[id * dstEvery + 3] = uint8(v2.entry >> 8)
617 // out[id * dstEvery + 4] = uint8(v3.entry >> 8)
Abhay Kumara2ae5992025-11-10 14:02:24 +0000618 LEAQ (R8)(R8*2), CX
619 MOVL AX, (BX)(CX*1)
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530620
621 // update the bitreader structure
Abhay Kumara2ae5992025-11-10 14:02:24 +0000622 MOVQ R11, 176(R10)
623 MOVB R12, 184(R10)
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530624 ADDQ $0x04, BX
625 TESTB DL, DL
626 JZ main_loop
627 MOVQ ctx+0(FP), AX
628 SUBQ 16(AX), BX
629 SHLQ $0x02, BX
630 MOVQ BX, 40(AX)
631 RET
632
633// func decompress1x_main_loop_amd64(ctx *decompress1xContext)
634TEXT ·decompress1x_main_loop_amd64(SB), $0-8
635 MOVQ ctx+0(FP), CX
636 MOVQ 16(CX), DX
637 MOVQ 24(CX), BX
638 CMPQ BX, $0x04
Abhay Kumara2ae5992025-11-10 14:02:24 +0000639 JB error_max_decoded_size_exceeded
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530640 LEAQ (DX)(BX*1), BX
641 MOVQ (CX), SI
642 MOVQ (SI), R8
643 MOVQ 24(SI), R9
644 MOVQ 32(SI), R10
645 MOVBQZX 40(SI), R11
646 MOVQ 32(CX), SI
647 MOVBQZX 8(CX), DI
648 JMP loop_condition
649
650main_loop:
651 // Check if we have room for 4 bytes in the output buffer
652 LEAQ 4(DX), CX
653 CMPQ CX, BX
Abhay Kumara2ae5992025-11-10 14:02:24 +0000654 JGE error_max_decoded_size_exceeded
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530655
656 // Decode 4 values
657 CMPQ R11, $0x20
658 JL bitReader_fillFast_1_end
659 SUBQ $0x20, R11
660 SUBQ $0x04, R9
661 MOVL (R8)(R9*1), R12
662 MOVQ R11, CX
663 SHLQ CL, R12
664 ORQ R12, R10
665
666bitReader_fillFast_1_end:
667 MOVQ DI, CX
668 MOVQ R10, R12
669 SHRQ CL, R12
670 MOVW (SI)(R12*2), CX
671 MOVB CH, AL
672 MOVBQZX CL, CX
673 ADDQ CX, R11
674 SHLQ CL, R10
675 MOVQ DI, CX
676 MOVQ R10, R12
677 SHRQ CL, R12
678 MOVW (SI)(R12*2), CX
679 MOVB CH, AH
680 MOVBQZX CL, CX
681 ADDQ CX, R11
682 SHLQ CL, R10
683 BSWAPL AX
684 CMPQ R11, $0x20
685 JL bitReader_fillFast_2_end
686 SUBQ $0x20, R11
687 SUBQ $0x04, R9
688 MOVL (R8)(R9*1), R12
689 MOVQ R11, CX
690 SHLQ CL, R12
691 ORQ R12, R10
692
693bitReader_fillFast_2_end:
694 MOVQ DI, CX
695 MOVQ R10, R12
696 SHRQ CL, R12
697 MOVW (SI)(R12*2), CX
698 MOVB CH, AH
699 MOVBQZX CL, CX
700 ADDQ CX, R11
701 SHLQ CL, R10
702 MOVQ DI, CX
703 MOVQ R10, R12
704 SHRQ CL, R12
705 MOVW (SI)(R12*2), CX
706 MOVB CH, AL
707 MOVBQZX CL, CX
708 ADDQ CX, R11
709 SHLQ CL, R10
710 BSWAPL AX
711
712 // Store the decoded values
713 MOVL AX, (DX)
714 ADDQ $0x04, DX
715
716loop_condition:
717 CMPQ R9, $0x08
718 JGE main_loop
719
720 // Update ctx structure
721 MOVQ ctx+0(FP), AX
722 SUBQ 16(AX), DX
723 MOVQ DX, 40(AX)
724 MOVQ (AX), AX
725 MOVQ R9, 24(AX)
726 MOVQ R10, 32(AX)
727 MOVB R11, 40(AX)
728 RET
729
730 // Report error
Abhay Kumara2ae5992025-11-10 14:02:24 +0000731error_max_decoded_size_exceeded:
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530732 MOVQ ctx+0(FP), AX
733 MOVQ $-1, CX
734 MOVQ CX, 40(AX)
735 RET
736
737// func decompress1x_main_loop_bmi2(ctx *decompress1xContext)
738// Requires: BMI2
739TEXT ·decompress1x_main_loop_bmi2(SB), $0-8
740 MOVQ ctx+0(FP), CX
741 MOVQ 16(CX), DX
742 MOVQ 24(CX), BX
743 CMPQ BX, $0x04
Abhay Kumara2ae5992025-11-10 14:02:24 +0000744 JB error_max_decoded_size_exceeded
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530745 LEAQ (DX)(BX*1), BX
746 MOVQ (CX), SI
747 MOVQ (SI), R8
748 MOVQ 24(SI), R9
749 MOVQ 32(SI), R10
750 MOVBQZX 40(SI), R11
751 MOVQ 32(CX), SI
752 MOVBQZX 8(CX), DI
753 JMP loop_condition
754
755main_loop:
756 // Check if we have room for 4 bytes in the output buffer
757 LEAQ 4(DX), CX
758 CMPQ CX, BX
Abhay Kumara2ae5992025-11-10 14:02:24 +0000759 JGE error_max_decoded_size_exceeded
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530760
761 // Decode 4 values
762 CMPQ R11, $0x20
763 JL bitReader_fillFast_1_end
764 SUBQ $0x20, R11
765 SUBQ $0x04, R9
766 MOVL (R8)(R9*1), CX
767 SHLXQ R11, CX, CX
768 ORQ CX, R10
769
770bitReader_fillFast_1_end:
771 SHRXQ DI, R10, CX
772 MOVW (SI)(CX*2), CX
773 MOVB CH, AL
774 MOVBQZX CL, CX
775 ADDQ CX, R11
776 SHLXQ CX, R10, R10
777 SHRXQ DI, R10, CX
778 MOVW (SI)(CX*2), CX
779 MOVB CH, AH
780 MOVBQZX CL, CX
781 ADDQ CX, R11
782 SHLXQ CX, R10, R10
783 BSWAPL AX
784 CMPQ R11, $0x20
785 JL bitReader_fillFast_2_end
786 SUBQ $0x20, R11
787 SUBQ $0x04, R9
788 MOVL (R8)(R9*1), CX
789 SHLXQ R11, CX, CX
790 ORQ CX, R10
791
792bitReader_fillFast_2_end:
793 SHRXQ DI, R10, CX
794 MOVW (SI)(CX*2), CX
795 MOVB CH, AH
796 MOVBQZX CL, CX
797 ADDQ CX, R11
798 SHLXQ CX, R10, R10
799 SHRXQ DI, R10, CX
800 MOVW (SI)(CX*2), CX
801 MOVB CH, AL
802 MOVBQZX CL, CX
803 ADDQ CX, R11
804 SHLXQ CX, R10, R10
805 BSWAPL AX
806
807 // Store the decoded values
808 MOVL AX, (DX)
809 ADDQ $0x04, DX
810
811loop_condition:
812 CMPQ R9, $0x08
813 JGE main_loop
814
815 // Update ctx structure
816 MOVQ ctx+0(FP), AX
817 SUBQ 16(AX), DX
818 MOVQ DX, 40(AX)
819 MOVQ (AX), AX
820 MOVQ R9, 24(AX)
821 MOVQ R10, 32(AX)
822 MOVB R11, 40(AX)
823 RET
824
825 // Report error
Abhay Kumara2ae5992025-11-10 14:02:24 +0000826error_max_decoded_size_exceeded:
Akash Reddy Kankanalacf045372025-06-10 14:11:24 +0530827 MOVQ ctx+0(FP), AX
828 MOVQ $-1, CX
829 MOVQ CX, 40(AX)
830 RET