]> git.proxmox.com Git - ceph.git/blame - ceph/src/isa-l/crc/crc32_iscsi_01.asm
update sources to v12.1.1
[ceph.git] / ceph / src / isa-l / crc / crc32_iscsi_01.asm
CommitLineData
7c673cae
FG
1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2; Copyright(c) 2011-2015 Intel Corporation All rights reserved.
3;
4; Redistribution and use in source and binary forms, with or without
5; modification, are permitted provided that the following conditions
6; are met:
7; * Redistributions of source code must retain the above copyright
8; notice, this list of conditions and the following disclaimer.
9; * Redistributions in binary form must reproduce the above copyright
10; notice, this list of conditions and the following disclaimer in
11; the documentation and/or other materials provided with the
12; distribution.
13; * Neither the name of Intel Corporation nor the names of its
14; contributors may be used to endorse or promote products derived
15; from this software without specific prior written permission.
16;
17; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18; "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19; LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20; A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21; OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22; SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23; LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24; DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25; THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27; OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
29
30;;; ISCSI CRC 32 Implementation with crc32 and pclmulqdq Instruction
31
32%include "reg_sizes.asm"
33
34default rel
35%define CONCAT(a,b,c) a %+ b %+ c
36
37; Define threshold where buffers are considered "small" and routed to more
38; efficient "by-1" code. This "by-1" code only handles up to 255 bytes, so
39; SMALL_SIZE can be no larger than 256.
40%define SMALL_SIZE 200
41
42%if (SMALL_SIZE > 256)
43%error SMALL_ SIZE must be <= 256
44% error ; needed because '%error' actually generates only a warning
45%endif
46
47;;; unsigned int crc32_iscsi_01(unsigned char * buffer, int len, unsigned int crc_init);
48;;;
49;;; *buf = rcx
50;;; len = rdx
51;;; crc_init = r8
52
53global crc32_iscsi_01:function
54crc32_iscsi_01:
55
56%ifidn __OUTPUT_FORMAT__, elf64
57%define bufp rdi
58%define bufp_dw edi
59%define bufp_w di
60%define bufp_b dil
61%define bufptmp rcx
62%define block_0 rcx
63%define block_1 rdx
64%define block_2 r11
65%define len rsi
66%define len_dw esi
67%define len_w si
68%define len_b sil
69%define crc_init_arg rdx
70%else
71%define bufp rcx
72%define bufp_dw ecx
73%define bufp_w cx
74%define bufp_b cl
75%define bufptmp rdi
76%define block_0 rdi
77%define block_1 rsi
78%define block_2 r11
79%define len rdx
80%define len_dw edx
81%define len_w dx
82%define len_b dl
83%endif
84
85%define tmp rbx
86%define crc_init r8
87%define crc_init_dw r8d
88%define crc1 r9
89%define crc2 r10
90
91 push rbx
92 push rdi
93 push rsi
94
95 ;; Move crc_init for Linux to a different reg
96%ifidn __OUTPUT_FORMAT__, elf64
97 mov crc_init, crc_init_arg
98%endif
99
100 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
101 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
102 ;; 1) ALIGN: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
103 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
104
105 mov bufptmp, bufp ;; rdi = *buf
106 neg bufp
107 and bufp, 7 ;; calculate the unalignment amount of
108 ;; the address
109 je proc_block ;; Skip if aligned
110
111 ;; If len is less than 8 and we're unaligned, we need to jump
112 ;; to special code to avoid reading beyond the end of the buffer
113 cmp len, 8
114 jb less_than_8
115
116 ;;;; Calculate CRC of unaligned bytes of the buffer (if any) ;;;
117 mov tmp, [bufptmp] ;; load a quadword from the buffer
118 add bufptmp, bufp ;; align buffer pointer for quadword
119 ;; processing
120 sub len, bufp ;; update buffer length
121align_loop:
122 crc32 crc_init_dw, bl ;; compute crc32 of 1-byte
123 shr tmp, 8 ;; get next byte
124 dec bufp
125 jne align_loop
126
127proc_block:
128
129 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
130 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
131 ;; 2) PROCESS BLOCKS: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
132 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
133
134 ;; compute num of bytes to be processed
135 mov tmp, len ;; save num bytes in tmp
136
137 cmp len, 128*24
138 jae full_block
139
140continue_block:
141 cmp len, SMALL_SIZE
142 jb small
143
144 ;; len < 128*24
145 mov rax, 2731 ;; 2731 = ceil(2^16 / 24)
146 mul len_dw
147 shr rax, 16
148
149 ;; eax contains floor(bytes / 24) = num 24-byte chunks to do
150
151 ;; process rax 24-byte chunks (128 >= rax >= 0)
152
153 ;; compute end address of each block
154 ;; rdi -> block 0 (base addr + RAX * 8)
155 ;; rsi -> block 1 (base addr + RAX * 16)
156 ;; r11 -> block 2 (base addr + RAX * 24)
157 lea block_0, [bufptmp + rax * 8]
158 lea block_1, [block_0 + rax * 8]
159 lea block_2, [block_1 + rax * 8]
160
161 xor crc1,crc1
162 xor crc2,crc2
163
164 ;; branch into array
165 lea bufp, [jump_table]
166 movzx len, word [bufp + rax * 2] ;; len is offset from crc_array
167 lea bufp, [bufp + len + crc_array - jump_table]
168 jmp bufp
169
170 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
171 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
172 ;; 2a) PROCESS FULL BLOCKS: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
173 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
174full_block:
175 mov rax, 128
176 lea block_1, [block_0 + 128*8*2]
177 lea block_2, [block_0 + 128*8*3]
178 add block_0, 128*8*1
179
180 xor crc1,crc1
181 xor crc2,crc2
182
183; ;; branch into array
184; jmp CONCAT(crc_,128,)
185 ; Fall thruogh into top of crc array (crc_128)
186
187 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
188 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
189 ;; 3) CRC Array: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
190 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
191
192crc_array:
193%assign i 128
194%rep 128-1
195CONCAT(crc_,i,:)
196 crc32 crc_init, qword [block_0 - i*8]
197 crc32 crc1, qword [block_1 - i*8]
198 crc32 crc2, qword [block_2 - i*8]
224ce89b
WB
199
200 %if i > 128*8 / 32 ; prefetch next 3KB data
201 prefetchnta [block_2 + 128*32 - i*32]
202 %endif
7c673cae
FG
203%assign i (i-1)
204%endrep
205
206CONCAT(crc_,i,:)
207 crc32 crc_init, qword [block_0 - i*8]
208 crc32 crc1, qword [block_1 - i*8]
209; SKIP ;crc32 crc2, [block_2 - i*8] ; Don't do this one yet
210
211 mov block_0, block_2
212
213 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
214 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
215 ;; 4) Combine three results: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
216 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
217
218 lea bufp, [K_table - 16] ; first entry is for idx 1
219 shl rax, 3 ; rax *= 8
220 sub tmp, rax ; tmp -= rax*8
221 shl rax, 1
222 sub tmp, rax ; tmp -= rax*16 (total tmp -= rax*24)
223 add bufp, rax
224
225 movdqa xmm0, [bufp] ; 2 consts: K1:K2
226
227 movq xmm1, crc_init ; CRC for block 1
228 pclmulqdq xmm1, xmm0, 0x00 ; Multiply by K2
229
230 movq xmm2, crc1 ; CRC for block 2
231 pclmulqdq xmm2, xmm0, 0x10 ; Multiply by K1
232
233 pxor xmm1, xmm2
234 movq rax, xmm1
235 xor rax, [block_2 - i*8]
236 mov crc_init, crc2
237 crc32 crc_init, rax
238
239 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
240 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
241 ;; 5) Check for end: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
242 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
243
244CONCAT(crc_,0,:)
245 mov len, tmp
246 cmp tmp, 128*24
247 jae full_block
248 cmp tmp, 24
249 jae continue_block
250
251fewer_than_24:
252 ;; now fewer than 24 bytes remain
253 cmp tmp, 16
254 jae do_16
255 cmp tmp, 8
256 jae do_8
257
258 ;; 0 <= tmp <= 7
259 shl ebx, 29 ; size now in bits 31:29
260 jz do_return
261check_4:
262 mov bufp, [bufptmp]
263 shl ebx, 1 ; shift out into carry MSB (orig size & 4)
264 jnc check_2
265 crc32 crc_init_dw, bufp_dw
266 jz do_return
267 shr bufp, 32 ; shift data down by 4 bytes
268check_2:
269 shl ebx, 1 ; shift out into carry MSB (orig size & 2)
270 jnc check_1
271 crc32 crc_init_dw, bufp_w
272 jz do_return
273 shr bufp, 16 ; shift data down by 2 bytes
274check_1:
275 crc32 crc_init_dw, bufp_b
276
277do_return:
278 mov rax, crc_init
279 pop rsi
280 pop rdi
281 pop rbx
282 ret
283
284do_8:
285 crc32 crc_init, qword [bufptmp]
286 add bufptmp, 8
287 shl ebx, 29 ; size (0...7) in bits 31:29
288 jnz check_4
289 mov rax, crc_init
290 pop rsi
291 pop rdi
292 pop rbx
293 ret
294
295do_16:
296 crc32 crc_init, qword [bufptmp]
297 crc32 crc_init, qword [bufptmp+8]
298 add bufptmp, 16
299 shl ebx, 29 ; size (0...7) in bits 31:29
300 jnz check_4
301 mov rax, crc_init
302 pop rsi
303 pop rdi
304 pop rbx
305 ret
306
307
308
309
310 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
311 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
312 ;; Handle the case of fewer than 8 bytes, unaligned. In this case
313 ;; we can't read 8 bytes, as this might go beyond the end of the buffer
314 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
315
316less_than_8:
317 test len,4
318 jz less_than_4
319 crc32 crc_init_dw, dword[bufptmp]
320 add bufptmp,4
321less_than_4:
322 test len,2
323 jz less_than_2
324 crc32 crc_init_dw, word[bufptmp]
325 add bufptmp,2
326less_than_2:
327 test len,1
328 jz do_return
329 crc32 crc_init_dw, byte[bufptmp]
330 mov rax, crc_init
331 pop rsi
332 pop rdi
333 pop rbx
334 ret
335
336;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
337;;4) LESS THAN 256-bytes REMAIN AT THIS POINT (8-bits of len are full)
338
339small:
340 mov rax, crc_init
341
342bit8:
343 shl len_b, 1 ;; shift-out MSB (bit-7)
344 jnc bit7 ;; jump to bit-6 if bit-7 == 0
345 %assign i 0
346 %rep 16
347 crc32 rax, qword [bufptmp+i] ;; compute crc32 of 8-byte data
348 %assign i (i+8)
349 %endrep
350 je do_return2 ;; return if remaining data is zero
351 add bufptmp, 128 ;; buf +=64; (next 64 bytes)
352
353bit7:
354 shl len_b, 1 ;; shift-out MSB (bit-7)
355 jnc bit6 ;; jump to bit-6 if bit-7 == 0
356 %assign i 0
357 %rep 8
358 crc32 rax, qword [bufptmp+i] ;; compute crc32 of 8-byte data
359 %assign i (i+8)
360 %endrep
361 je do_return2 ;; return if remaining data is zero
362 add bufptmp, 64 ;; buf +=64; (next 64 bytes)
363bit6:
364 shl len_b, 1 ;; shift-out MSB (bit-6)
365 jnc bit5 ;; jump to bit-5 if bit-6 == 0
366 %assign i 0
367 %rep 4
368 crc32 rax, qword [bufptmp+i] ;; compute crc32 of 8-byte data
369 %assign i (i+8)
370 %endrep
371 je do_return2 ;; return if remaining data is zero
372 add bufptmp, 32 ;; buf +=32; (next 32 bytes)
373bit5:
374 shl len_b, 1 ;; shift-out MSB (bit-5)
375 jnc bit4 ;; jump to bit-4 if bit-5 == 0
376 %assign i 0
377 %rep 2
378 crc32 rax, qword [bufptmp+i] ;; compute crc32 of 8-byte data
379 %assign i (i+8)
380 %endrep
381 je do_return2 ;; return if remaining data is zero
382 add bufptmp, 16 ;; buf +=16; (next 16 bytes)
383bit4:
384 shl len_b, 1 ;; shift-out MSB (bit-4)
385 jnc bit3 ;; jump to bit-3 if bit-4 == 0
386 crc32 rax, qword [bufptmp] ;; compute crc32 of 8-byte data
387 je do_return2 ;; return if remaining data is zero
388 add bufptmp, 8 ;; buf +=8; (next 8 bytes)
389bit3:
390 mov rbx, qword [bufptmp] ;; load a 8-bytes from the buffer:
391 shl len_b, 1 ;; shift-out MSB (bit-3)
392 jnc bit2 ;; jump to bit-2 if bit-3 == 0
393 crc32 eax, ebx ;; compute crc32 of 4-byte data
394 je do_return2 ;; return if remaining data is zero
395 shr rbx, 32 ;; get next 3 bytes
396bit2:
397 shl len_b, 1 ;; shift-out MSB (bit-2)
398 jnc bit1 ;; jump to bit-1 if bit-2 == 0
399 crc32 eax, bx ;; compute crc32 of 2-byte data
400 je do_return2 ;; return if remaining data is zero
401 shr rbx, 16 ;; next byte
402bit1:
403 test len_b,len_b
404 je do_return2
405 crc32 eax, bl ;; compute crc32 of 1-byte data
406;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
407;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
408
409do_return2:
410 pop rsi
411 pop rdi
412 pop rbx
413 ret
414
415
416
417 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
418 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
419 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
420 ;; jump table ;; Table is 129 entries x 2 bytes each
421 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
422align 4
423jump_table:
424%assign i 0
425%rep 129
426 dw CONCAT(crc_,i,) - crc_array
427%assign i (i+1)
428%endrep
429
430
431
432 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
433 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
434 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
435 ;; PCLMULQDQ tables
436 ;; Table is 128 entries x 2 quad words each
437 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
438section .data
439align 64
440K_table:
441 dq 0x14cd00bd6, 0x105ec76f0
442 dq 0x0ba4fc28e, 0x14cd00bd6
443 dq 0x1d82c63da, 0x0f20c0dfe
444 dq 0x09e4addf8, 0x0ba4fc28e
445 dq 0x039d3b296, 0x1384aa63a
446 dq 0x102f9b8a2, 0x1d82c63da
447 dq 0x14237f5e6, 0x01c291d04
448 dq 0x00d3b6092, 0x09e4addf8
449 dq 0x0c96cfdc0, 0x0740eef02
450 dq 0x18266e456, 0x039d3b296
451 dq 0x0daece73e, 0x0083a6eec
452 dq 0x0ab7aff2a, 0x102f9b8a2
453 dq 0x1248ea574, 0x1c1733996
454 dq 0x083348832, 0x14237f5e6
455 dq 0x12c743124, 0x02ad91c30
456 dq 0x0b9e02b86, 0x00d3b6092
457 dq 0x018b33a4e, 0x06992cea2
458 dq 0x1b331e26a, 0x0c96cfdc0
459 dq 0x17d35ba46, 0x07e908048
460 dq 0x1bf2e8b8a, 0x18266e456
461 dq 0x1a3e0968a, 0x11ed1f9d8
462 dq 0x0ce7f39f4, 0x0daece73e
463 dq 0x061d82e56, 0x0f1d0f55e
464 dq 0x0d270f1a2, 0x0ab7aff2a
465 dq 0x1c3f5f66c, 0x0a87ab8a8
466 dq 0x12ed0daac, 0x1248ea574
467 dq 0x065863b64, 0x08462d800
468 dq 0x11eef4f8e, 0x083348832
469 dq 0x1ee54f54c, 0x071d111a8
470 dq 0x0b3e32c28, 0x12c743124
471 dq 0x0064f7f26, 0x0ffd852c6
472 dq 0x0dd7e3b0c, 0x0b9e02b86
473 dq 0x0f285651c, 0x0dcb17aa4
474 dq 0x010746f3c, 0x018b33a4e
475 dq 0x1c24afea4, 0x0f37c5aee
476 dq 0x0271d9844, 0x1b331e26a
477 dq 0x08e766a0c, 0x06051d5a2
478 dq 0x093a5f730, 0x17d35ba46
479 dq 0x06cb08e5c, 0x11d5ca20e
480 dq 0x06b749fb2, 0x1bf2e8b8a
481 dq 0x1167f94f2, 0x021f3d99c
482 dq 0x0cec3662e, 0x1a3e0968a
483 dq 0x19329634a, 0x08f158014
484 dq 0x0e6fc4e6a, 0x0ce7f39f4
485 dq 0x08227bb8a, 0x1a5e82106
486 dq 0x0b0cd4768, 0x061d82e56
487 dq 0x13c2b89c4, 0x188815ab2
488 dq 0x0d7a4825c, 0x0d270f1a2
489 dq 0x10f5ff2ba, 0x105405f3e
490 dq 0x00167d312, 0x1c3f5f66c
491 dq 0x0f6076544, 0x0e9adf796
492 dq 0x026f6a60a, 0x12ed0daac
493 dq 0x1a2adb74e, 0x096638b34
494 dq 0x19d34af3a, 0x065863b64
495 dq 0x049c3cc9c, 0x1e50585a0
496 dq 0x068bce87a, 0x11eef4f8e
497 dq 0x1524fa6c6, 0x19f1c69dc
498 dq 0x16cba8aca, 0x1ee54f54c
499 dq 0x042d98888, 0x12913343e
500 dq 0x1329d9f7e, 0x0b3e32c28
501 dq 0x1b1c69528, 0x088f25a3a
502 dq 0x02178513a, 0x0064f7f26
503 dq 0x0e0ac139e, 0x04e36f0b0
504 dq 0x0170076fa, 0x0dd7e3b0c
505 dq 0x141a1a2e2, 0x0bd6f81f8
506 dq 0x16ad828b4, 0x0f285651c
507 dq 0x041d17b64, 0x19425cbba
508 dq 0x1fae1cc66, 0x010746f3c
509 dq 0x1a75b4b00, 0x18db37e8a
510 dq 0x0f872e54c, 0x1c24afea4
511 dq 0x01e41e9fc, 0x04c144932
512 dq 0x086d8e4d2, 0x0271d9844
513 dq 0x160f7af7a, 0x052148f02
514 dq 0x05bb8f1bc, 0x08e766a0c
515 dq 0x0a90fd27a, 0x0a3c6f37a
516 dq 0x0b3af077a, 0x093a5f730
517 dq 0x04984d782, 0x1d22c238e
518 dq 0x0ca6ef3ac, 0x06cb08e5c
519 dq 0x0234e0b26, 0x063ded06a
520 dq 0x1d88abd4a, 0x06b749fb2
521 dq 0x04597456a, 0x04d56973c
522 dq 0x0e9e28eb4, 0x1167f94f2
523 dq 0x07b3ff57a, 0x19385bf2e
524 dq 0x0c9c8b782, 0x0cec3662e
525 dq 0x13a9cba9e, 0x0e417f38a
526 dq 0x093e106a4, 0x19329634a
527 dq 0x167001a9c, 0x14e727980
528 dq 0x1ddffc5d4, 0x0e6fc4e6a
529 dq 0x00df04680, 0x0d104b8fc
530 dq 0x02342001e, 0x08227bb8a
531 dq 0x00a2a8d7e, 0x05b397730
532 dq 0x168763fa6, 0x0b0cd4768
533 dq 0x1ed5a407a, 0x0e78eb416
534 dq 0x0d2c3ed1a, 0x13c2b89c4
535 dq 0x0995a5724, 0x1641378f0
536 dq 0x19b1afbc4, 0x0d7a4825c
537 dq 0x109ffedc0, 0x08d96551c
538 dq 0x0f2271e60, 0x10f5ff2ba
539 dq 0x00b0bf8ca, 0x00bf80dd2
540 dq 0x123888b7a, 0x00167d312
541 dq 0x1e888f7dc, 0x18dcddd1c
542 dq 0x002ee03b2, 0x0f6076544
543 dq 0x183e8d8fe, 0x06a45d2b2
544 dq 0x133d7a042, 0x026f6a60a
545 dq 0x116b0f50c, 0x1dd3e10e8
546 dq 0x05fabe670, 0x1a2adb74e
547 dq 0x130004488, 0x0de87806c
548 dq 0x000bcf5f6, 0x19d34af3a
549 dq 0x18f0c7078, 0x014338754
550 dq 0x017f27698, 0x049c3cc9c
551 dq 0x058ca5f00, 0x15e3e77ee
552 dq 0x1af900c24, 0x068bce87a
553 dq 0x0b5cfca28, 0x0dd07448e
554 dq 0x0ded288f8, 0x1524fa6c6
555 dq 0x059f229bc, 0x1d8048348
556 dq 0x06d390dec, 0x16cba8aca
557 dq 0x037170390, 0x0a3e3e02c
558 dq 0x06353c1cc, 0x042d98888
559 dq 0x0c4584f5c, 0x0d73c7bea
560 dq 0x1f16a3418, 0x1329d9f7e
561 dq 0x0531377e2, 0x185137662
562 dq 0x1d8d9ca7c, 0x1b1c69528
563 dq 0x0b25b29f2, 0x18a08b5bc
564 dq 0x19fb2a8b0, 0x02178513a
565 dq 0x1a08fe6ac, 0x1da758ae0
566 dq 0x045cddf4e, 0x0e0ac139e
567 dq 0x1a91647f2, 0x169cf9eb0
568 dq 0x1a0f717c4, 0x0170076fa
569
570;;; func core, ver, snum
571slversion crc32_iscsi_01, 01, 03, 0015
572