]> git.proxmox.com Git - ceph.git/blob - ceph/src/isa-l/crc/crc32_iscsi_01.asm
f323a23bd13cb90cec254ce42c87a5b6ac917baf
[ceph.git] / ceph / src / isa-l / crc / crc32_iscsi_01.asm
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
34 default 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
53 global crc32_iscsi_01:function
54 crc32_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
121 align_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
127 proc_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
140 continue_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 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
174 full_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
192 crc_array:
193 %assign i 128
194 %rep 128-1
195 CONCAT(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]
199 %assign i (i-1)
200 %endrep
201
202 CONCAT(crc_,i,:)
203 crc32 crc_init, qword [block_0 - i*8]
204 crc32 crc1, qword [block_1 - i*8]
205 ; SKIP ;crc32 crc2, [block_2 - i*8] ; Don't do this one yet
206
207 mov block_0, block_2
208
209 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
210 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
211 ;; 4) Combine three results: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
212 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
213
214 lea bufp, [K_table - 16] ; first entry is for idx 1
215 shl rax, 3 ; rax *= 8
216 sub tmp, rax ; tmp -= rax*8
217 shl rax, 1
218 sub tmp, rax ; tmp -= rax*16 (total tmp -= rax*24)
219 add bufp, rax
220
221 movdqa xmm0, [bufp] ; 2 consts: K1:K2
222
223 movq xmm1, crc_init ; CRC for block 1
224 pclmulqdq xmm1, xmm0, 0x00 ; Multiply by K2
225
226 movq xmm2, crc1 ; CRC for block 2
227 pclmulqdq xmm2, xmm0, 0x10 ; Multiply by K1
228
229 pxor xmm1, xmm2
230 movq rax, xmm1
231 xor rax, [block_2 - i*8]
232 mov crc_init, crc2
233 crc32 crc_init, rax
234
235 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
236 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
237 ;; 5) Check for end: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
238 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
239
240 CONCAT(crc_,0,:)
241 mov len, tmp
242 cmp tmp, 128*24
243 jae full_block
244 cmp tmp, 24
245 jae continue_block
246
247 fewer_than_24:
248 ;; now fewer than 24 bytes remain
249 cmp tmp, 16
250 jae do_16
251 cmp tmp, 8
252 jae do_8
253
254 ;; 0 <= tmp <= 7
255 shl ebx, 29 ; size now in bits 31:29
256 jz do_return
257 check_4:
258 mov bufp, [bufptmp]
259 shl ebx, 1 ; shift out into carry MSB (orig size & 4)
260 jnc check_2
261 crc32 crc_init_dw, bufp_dw
262 jz do_return
263 shr bufp, 32 ; shift data down by 4 bytes
264 check_2:
265 shl ebx, 1 ; shift out into carry MSB (orig size & 2)
266 jnc check_1
267 crc32 crc_init_dw, bufp_w
268 jz do_return
269 shr bufp, 16 ; shift data down by 2 bytes
270 check_1:
271 crc32 crc_init_dw, bufp_b
272
273 do_return:
274 mov rax, crc_init
275 pop rsi
276 pop rdi
277 pop rbx
278 ret
279
280 do_8:
281 crc32 crc_init, qword [bufptmp]
282 add bufptmp, 8
283 shl ebx, 29 ; size (0...7) in bits 31:29
284 jnz check_4
285 mov rax, crc_init
286 pop rsi
287 pop rdi
288 pop rbx
289 ret
290
291 do_16:
292 crc32 crc_init, qword [bufptmp]
293 crc32 crc_init, qword [bufptmp+8]
294 add bufptmp, 16
295 shl ebx, 29 ; size (0...7) in bits 31:29
296 jnz check_4
297 mov rax, crc_init
298 pop rsi
299 pop rdi
300 pop rbx
301 ret
302
303
304
305
306 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
307 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
308 ;; Handle the case of fewer than 8 bytes, unaligned. In this case
309 ;; we can't read 8 bytes, as this might go beyond the end of the buffer
310 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
311
312 less_than_8:
313 test len,4
314 jz less_than_4
315 crc32 crc_init_dw, dword[bufptmp]
316 add bufptmp,4
317 less_than_4:
318 test len,2
319 jz less_than_2
320 crc32 crc_init_dw, word[bufptmp]
321 add bufptmp,2
322 less_than_2:
323 test len,1
324 jz do_return
325 crc32 crc_init_dw, byte[bufptmp]
326 mov rax, crc_init
327 pop rsi
328 pop rdi
329 pop rbx
330 ret
331
332 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
333 ;;4) LESS THAN 256-bytes REMAIN AT THIS POINT (8-bits of len are full)
334
335 small:
336 mov rax, crc_init
337
338 bit8:
339 shl len_b, 1 ;; shift-out MSB (bit-7)
340 jnc bit7 ;; jump to bit-6 if bit-7 == 0
341 %assign i 0
342 %rep 16
343 crc32 rax, qword [bufptmp+i] ;; compute crc32 of 8-byte data
344 %assign i (i+8)
345 %endrep
346 je do_return2 ;; return if remaining data is zero
347 add bufptmp, 128 ;; buf +=64; (next 64 bytes)
348
349 bit7:
350 shl len_b, 1 ;; shift-out MSB (bit-7)
351 jnc bit6 ;; jump to bit-6 if bit-7 == 0
352 %assign i 0
353 %rep 8
354 crc32 rax, qword [bufptmp+i] ;; compute crc32 of 8-byte data
355 %assign i (i+8)
356 %endrep
357 je do_return2 ;; return if remaining data is zero
358 add bufptmp, 64 ;; buf +=64; (next 64 bytes)
359 bit6:
360 shl len_b, 1 ;; shift-out MSB (bit-6)
361 jnc bit5 ;; jump to bit-5 if bit-6 == 0
362 %assign i 0
363 %rep 4
364 crc32 rax, qword [bufptmp+i] ;; compute crc32 of 8-byte data
365 %assign i (i+8)
366 %endrep
367 je do_return2 ;; return if remaining data is zero
368 add bufptmp, 32 ;; buf +=32; (next 32 bytes)
369 bit5:
370 shl len_b, 1 ;; shift-out MSB (bit-5)
371 jnc bit4 ;; jump to bit-4 if bit-5 == 0
372 %assign i 0
373 %rep 2
374 crc32 rax, qword [bufptmp+i] ;; compute crc32 of 8-byte data
375 %assign i (i+8)
376 %endrep
377 je do_return2 ;; return if remaining data is zero
378 add bufptmp, 16 ;; buf +=16; (next 16 bytes)
379 bit4:
380 shl len_b, 1 ;; shift-out MSB (bit-4)
381 jnc bit3 ;; jump to bit-3 if bit-4 == 0
382 crc32 rax, qword [bufptmp] ;; compute crc32 of 8-byte data
383 je do_return2 ;; return if remaining data is zero
384 add bufptmp, 8 ;; buf +=8; (next 8 bytes)
385 bit3:
386 mov rbx, qword [bufptmp] ;; load a 8-bytes from the buffer:
387 shl len_b, 1 ;; shift-out MSB (bit-3)
388 jnc bit2 ;; jump to bit-2 if bit-3 == 0
389 crc32 eax, ebx ;; compute crc32 of 4-byte data
390 je do_return2 ;; return if remaining data is zero
391 shr rbx, 32 ;; get next 3 bytes
392 bit2:
393 shl len_b, 1 ;; shift-out MSB (bit-2)
394 jnc bit1 ;; jump to bit-1 if bit-2 == 0
395 crc32 eax, bx ;; compute crc32 of 2-byte data
396 je do_return2 ;; return if remaining data is zero
397 shr rbx, 16 ;; next byte
398 bit1:
399 test len_b,len_b
400 je do_return2
401 crc32 eax, bl ;; compute crc32 of 1-byte data
402 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
403 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
404
405 do_return2:
406 pop rsi
407 pop rdi
408 pop rbx
409 ret
410
411
412
413 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
414 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
415 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
416 ;; jump table ;; Table is 129 entries x 2 bytes each
417 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
418 align 4
419 jump_table:
420 %assign i 0
421 %rep 129
422 dw CONCAT(crc_,i,) - crc_array
423 %assign i (i+1)
424 %endrep
425
426
427
428 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
429 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
430 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
431 ;; PCLMULQDQ tables
432 ;; Table is 128 entries x 2 quad words each
433 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
434 section .data
435 align 64
436 K_table:
437 dq 0x14cd00bd6, 0x105ec76f0
438 dq 0x0ba4fc28e, 0x14cd00bd6
439 dq 0x1d82c63da, 0x0f20c0dfe
440 dq 0x09e4addf8, 0x0ba4fc28e
441 dq 0x039d3b296, 0x1384aa63a
442 dq 0x102f9b8a2, 0x1d82c63da
443 dq 0x14237f5e6, 0x01c291d04
444 dq 0x00d3b6092, 0x09e4addf8
445 dq 0x0c96cfdc0, 0x0740eef02
446 dq 0x18266e456, 0x039d3b296
447 dq 0x0daece73e, 0x0083a6eec
448 dq 0x0ab7aff2a, 0x102f9b8a2
449 dq 0x1248ea574, 0x1c1733996
450 dq 0x083348832, 0x14237f5e6
451 dq 0x12c743124, 0x02ad91c30
452 dq 0x0b9e02b86, 0x00d3b6092
453 dq 0x018b33a4e, 0x06992cea2
454 dq 0x1b331e26a, 0x0c96cfdc0
455 dq 0x17d35ba46, 0x07e908048
456 dq 0x1bf2e8b8a, 0x18266e456
457 dq 0x1a3e0968a, 0x11ed1f9d8
458 dq 0x0ce7f39f4, 0x0daece73e
459 dq 0x061d82e56, 0x0f1d0f55e
460 dq 0x0d270f1a2, 0x0ab7aff2a
461 dq 0x1c3f5f66c, 0x0a87ab8a8
462 dq 0x12ed0daac, 0x1248ea574
463 dq 0x065863b64, 0x08462d800
464 dq 0x11eef4f8e, 0x083348832
465 dq 0x1ee54f54c, 0x071d111a8
466 dq 0x0b3e32c28, 0x12c743124
467 dq 0x0064f7f26, 0x0ffd852c6
468 dq 0x0dd7e3b0c, 0x0b9e02b86
469 dq 0x0f285651c, 0x0dcb17aa4
470 dq 0x010746f3c, 0x018b33a4e
471 dq 0x1c24afea4, 0x0f37c5aee
472 dq 0x0271d9844, 0x1b331e26a
473 dq 0x08e766a0c, 0x06051d5a2
474 dq 0x093a5f730, 0x17d35ba46
475 dq 0x06cb08e5c, 0x11d5ca20e
476 dq 0x06b749fb2, 0x1bf2e8b8a
477 dq 0x1167f94f2, 0x021f3d99c
478 dq 0x0cec3662e, 0x1a3e0968a
479 dq 0x19329634a, 0x08f158014
480 dq 0x0e6fc4e6a, 0x0ce7f39f4
481 dq 0x08227bb8a, 0x1a5e82106
482 dq 0x0b0cd4768, 0x061d82e56
483 dq 0x13c2b89c4, 0x188815ab2
484 dq 0x0d7a4825c, 0x0d270f1a2
485 dq 0x10f5ff2ba, 0x105405f3e
486 dq 0x00167d312, 0x1c3f5f66c
487 dq 0x0f6076544, 0x0e9adf796
488 dq 0x026f6a60a, 0x12ed0daac
489 dq 0x1a2adb74e, 0x096638b34
490 dq 0x19d34af3a, 0x065863b64
491 dq 0x049c3cc9c, 0x1e50585a0
492 dq 0x068bce87a, 0x11eef4f8e
493 dq 0x1524fa6c6, 0x19f1c69dc
494 dq 0x16cba8aca, 0x1ee54f54c
495 dq 0x042d98888, 0x12913343e
496 dq 0x1329d9f7e, 0x0b3e32c28
497 dq 0x1b1c69528, 0x088f25a3a
498 dq 0x02178513a, 0x0064f7f26
499 dq 0x0e0ac139e, 0x04e36f0b0
500 dq 0x0170076fa, 0x0dd7e3b0c
501 dq 0x141a1a2e2, 0x0bd6f81f8
502 dq 0x16ad828b4, 0x0f285651c
503 dq 0x041d17b64, 0x19425cbba
504 dq 0x1fae1cc66, 0x010746f3c
505 dq 0x1a75b4b00, 0x18db37e8a
506 dq 0x0f872e54c, 0x1c24afea4
507 dq 0x01e41e9fc, 0x04c144932
508 dq 0x086d8e4d2, 0x0271d9844
509 dq 0x160f7af7a, 0x052148f02
510 dq 0x05bb8f1bc, 0x08e766a0c
511 dq 0x0a90fd27a, 0x0a3c6f37a
512 dq 0x0b3af077a, 0x093a5f730
513 dq 0x04984d782, 0x1d22c238e
514 dq 0x0ca6ef3ac, 0x06cb08e5c
515 dq 0x0234e0b26, 0x063ded06a
516 dq 0x1d88abd4a, 0x06b749fb2
517 dq 0x04597456a, 0x04d56973c
518 dq 0x0e9e28eb4, 0x1167f94f2
519 dq 0x07b3ff57a, 0x19385bf2e
520 dq 0x0c9c8b782, 0x0cec3662e
521 dq 0x13a9cba9e, 0x0e417f38a
522 dq 0x093e106a4, 0x19329634a
523 dq 0x167001a9c, 0x14e727980
524 dq 0x1ddffc5d4, 0x0e6fc4e6a
525 dq 0x00df04680, 0x0d104b8fc
526 dq 0x02342001e, 0x08227bb8a
527 dq 0x00a2a8d7e, 0x05b397730
528 dq 0x168763fa6, 0x0b0cd4768
529 dq 0x1ed5a407a, 0x0e78eb416
530 dq 0x0d2c3ed1a, 0x13c2b89c4
531 dq 0x0995a5724, 0x1641378f0
532 dq 0x19b1afbc4, 0x0d7a4825c
533 dq 0x109ffedc0, 0x08d96551c
534 dq 0x0f2271e60, 0x10f5ff2ba
535 dq 0x00b0bf8ca, 0x00bf80dd2
536 dq 0x123888b7a, 0x00167d312
537 dq 0x1e888f7dc, 0x18dcddd1c
538 dq 0x002ee03b2, 0x0f6076544
539 dq 0x183e8d8fe, 0x06a45d2b2
540 dq 0x133d7a042, 0x026f6a60a
541 dq 0x116b0f50c, 0x1dd3e10e8
542 dq 0x05fabe670, 0x1a2adb74e
543 dq 0x130004488, 0x0de87806c
544 dq 0x000bcf5f6, 0x19d34af3a
545 dq 0x18f0c7078, 0x014338754
546 dq 0x017f27698, 0x049c3cc9c
547 dq 0x058ca5f00, 0x15e3e77ee
548 dq 0x1af900c24, 0x068bce87a
549 dq 0x0b5cfca28, 0x0dd07448e
550 dq 0x0ded288f8, 0x1524fa6c6
551 dq 0x059f229bc, 0x1d8048348
552 dq 0x06d390dec, 0x16cba8aca
553 dq 0x037170390, 0x0a3e3e02c
554 dq 0x06353c1cc, 0x042d98888
555 dq 0x0c4584f5c, 0x0d73c7bea
556 dq 0x1f16a3418, 0x1329d9f7e
557 dq 0x0531377e2, 0x185137662
558 dq 0x1d8d9ca7c, 0x1b1c69528
559 dq 0x0b25b29f2, 0x18a08b5bc
560 dq 0x19fb2a8b0, 0x02178513a
561 dq 0x1a08fe6ac, 0x1da758ae0
562 dq 0x045cddf4e, 0x0e0ac139e
563 dq 0x1a91647f2, 0x169cf9eb0
564 dq 0x1a0f717c4, 0x0170076fa
565
566 ;;; func core, ver, snum
567 slversion crc32_iscsi_01, 01, 03, 0015
568