Whamcloud - gitweb
LU-12477 libcfs: Remove obsolete config checks
[fs/lustre-release.git] / libcfs / libcfs / linux / crc32c-pcl-intel-asm_64.S
diff --git a/libcfs/libcfs/linux/crc32c-pcl-intel-asm_64.S b/libcfs/libcfs/linux/crc32c-pcl-intel-asm_64.S
deleted file mode 100644 (file)
index 5c896b9..0000000
+++ /dev/null
@@ -1,466 +0,0 @@
-/*
- * Implement fast CRC32C with PCLMULQDQ instructions. (x86_64)
- *
- * The white papers on CRC32C calculations with PCLMULQDQ instruction can be
- * downloaded from:
- * http://www.intel.com/content/dam/www/public/us/en/documents/white-papers/crc-iscsi-polynomial-crc32-instruction-paper.pdf
- * http://www.intel.com/content/dam/www/public/us/en/documents/white-papers/fast-crc-computation-paper.pdf
- *
- * Copyright (C) 2012 Intel Corporation.
- *
- * Authors:
- *     Wajdi Feghali <wajdi.k.feghali@intel.com>
- *     James Guilford <james.guilford@intel.com>
- *     David Cote <david.m.cote@intel.com>
- *     Tim Chen <tim.c.chen@linux.intel.com>
- *
- * This software is available to you under a choice of one of two
- * licenses.  You may choose to be licensed under the terms of the GNU
- * General Public License (GPL) Version 2, available from the file
- * COPYING in the main directory of this source tree, or the
- * OpenIB.org BSD license below:
- *
- *     Redistribution and use in source and binary forms, with or
- *     without modification, are permitted provided that the following
- *     conditions are met:
- *
- *      - Redistributions of source code must retain the above
- *        copyright notice, this list of conditions and the following
- *        disclaimer.
- *
- *      - Redistributions in binary form must reproduce the above
- *        copyright notice, this list of conditions and the following
- *        disclaimer in the documentation and/or other materials
- *        provided with the distribution.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-#include <linux/linkage.h>
-#include "inst.h"
-
-## ISCSI CRC 32 Implementation with crc32 and pclmulqdq Instruction
-
-.macro LABEL prefix n
-\prefix\n\():
-.endm
-
-.macro JMPTBL_ENTRY i
-.word crc_\i - crc_array
-.endm
-
-.macro JNC_LESS_THAN j
-       jnc less_than_\j
-.endm
-
-# Define threshold where buffers are considered "small" and routed to more
-# efficient "by-1" code. This "by-1" code only handles up to 255 bytes, so
-# SMALL_SIZE can be no larger than 255.
-
-#define SMALL_SIZE 200
-
-.if (SMALL_SIZE > 255)
-.error "SMALL_SIZE must be < 256"
-.endif
-
-# unsigned int crc_pcl(u8 *buffer, int len, unsigned int crc_init);
-
-ENTRY(crc_pcl)
-#define    bufp                %rdi
-#define    bufp_dw     %edi
-#define    bufp_w      %di
-#define    bufp_b      %dil
-#define    bufptmp     %rcx
-#define    block_0     %rcx
-#define    block_1     %rdx
-#define    block_2     %r11
-#define    len         %rsi
-#define    len_dw      %esi
-#define    len_w       %si
-#define    len_b       %sil
-#define    crc_init_arg %rdx
-#define    tmp         %rbx
-#define    crc_init    %r8
-#define    crc_init_dw %r8d
-#define    crc1                %r9
-#define    crc2                %r10
-
-       pushq   %rbx
-       pushq   %rdi
-       pushq   %rsi
-
-       ## Move crc_init for Linux to a different
-       mov     crc_init_arg, crc_init
-
-       ################################################################
-       ## 1) ALIGN:
-       ################################################################
-
-       mov     bufp, bufptmp           # rdi = *buf
-       neg     bufp
-       and     $7, bufp                # calculate the unalignment amount of
-                                       # the address
-       je      proc_block              # Skip if aligned
-
-       ## If len is less than 8 and we're unaligned, we need to jump
-       ## to special code to avoid reading beyond the end of the buffer
-       cmp     $8, len
-       jae     do_align
-       # less_than_8 expects length in upper 3 bits of len_dw
-       # less_than_8_post_shl1 expects length = carryflag * 8 + len_dw[31:30]
-       shl     $32-3+1, len_dw
-       jmp     less_than_8_post_shl1
-
-do_align:
-       #### Calculate CRC of unaligned bytes of the buffer (if any)
-       movq    (bufptmp), tmp          # load a quadward from the buffer
-       add     bufp, bufptmp           # align buffer pointer for quadword
-                                       # processing
-       sub     bufp, len               # update buffer length
-align_loop:
-       crc32b  %bl, crc_init_dw        # compute crc32 of 1-byte
-       shr     $8, tmp                 # get next byte
-       dec     bufp
-       jne     align_loop
-
-proc_block:
-
-       ################################################################
-       ## 2) PROCESS  BLOCKS:
-       ################################################################
-
-       ## compute num of bytes to be processed
-       movq    len, tmp                # save num bytes in tmp
-
-       cmpq    $128*24, len
-       jae     full_block
-
-continue_block:
-       cmpq    $SMALL_SIZE, len
-       jb      small
-
-       ## len < 128*24
-       movq    $2731, %rax             # 2731 = ceil(2^16 / 24)
-       mul     len_dw
-       shrq    $16, %rax
-
-       ## eax contains floor(bytes / 24) = num 24-byte chunks to do
-
-       ## process rax 24-byte chunks (128 >= rax >= 0)
-
-       ## compute end address of each block
-       ## block 0 (base addr + RAX * 8)
-       ## block 1 (base addr + RAX * 16)
-       ## block 2 (base addr + RAX * 24)
-       lea     (bufptmp, %rax, 8), block_0
-       lea     (block_0, %rax, 8), block_1
-       lea     (block_1, %rax, 8), block_2
-
-       xor     crc1, crc1
-       xor     crc2, crc2
-
-       ## branch into array
-       lea     jump_table(%rip), bufp
-       movzxw  (bufp, %rax, 2), len
-       offset=crc_array-jump_table
-       lea     offset(bufp, len, 1), bufp
-       jmp     *bufp
-
-       ################################################################
-       ## 2a) PROCESS FULL BLOCKS:
-       ################################################################
-full_block:
-       movq    $128,%rax
-       lea     128*8*2(block_0), block_1
-       lea     128*8*3(block_0), block_2
-       add     $128*8*1, block_0
-
-       xor     crc1,crc1
-       xor     crc2,crc2
-
-       # Fall thruogh into top of crc array (crc_128)
-
-       ################################################################
-       ## 3) CRC Array:
-       ################################################################
-
-crc_array:
-       i=128
-.rept 128-1
-.altmacro
-LABEL crc_ %i
-.noaltmacro
-       crc32q   -i*8(block_0), crc_init
-       crc32q   -i*8(block_1), crc1
-       crc32q   -i*8(block_2), crc2
-       i=(i-1)
-.endr
-
-.altmacro
-LABEL crc_ %i
-.noaltmacro
-       crc32q   -i*8(block_0), crc_init
-       crc32q   -i*8(block_1), crc1
-# SKIP  crc32  -i*8(block_2), crc2 ; Don't do this one yet
-
-       mov     block_2, block_0
-
-       ################################################################
-       ## 4) Combine three results:
-       ################################################################
-
-       lea     (K_table-16)(%rip), bufp        # first entry is for idx 1
-       shlq    $3, %rax                        # rax *= 8
-       subq    %rax, tmp                       # tmp -= rax*8
-       shlq    $1, %rax
-       subq    %rax, tmp                       # tmp -= rax*16
-                                               # (total tmp -= rax*24)
-       addq    %rax, bufp
-
-       movdqa  (bufp), %xmm0                   # 2 consts: K1:K2
-
-       movq    crc_init, %xmm1                 # CRC for block 1
-       PCLMULQDQ 0x00,%xmm0,%xmm1              # Multiply by K2
-
-       movq    crc1, %xmm2                     # CRC for block 2
-       PCLMULQDQ 0x10, %xmm0, %xmm2            # Multiply by K1
-
-       pxor    %xmm2,%xmm1
-       movq    %xmm1, %rax
-       xor     -i*8(block_2), %rax
-       mov     crc2, crc_init
-       crc32   %rax, crc_init
-
-################################################################
-## 5) Check for end:
-################################################################
-
-LABEL crc_ 0
-       mov     tmp, len
-       cmp     $128*24, tmp
-       jae     full_block
-       cmp     $24, tmp
-       jae     continue_block
-
-less_than_24:
-       shl     $32-4, len_dw                   # less_than_16 expects length
-                                               # in upper 4 bits of len_dw
-       jnc     less_than_16
-       crc32q  (bufptmp), crc_init
-       crc32q  8(bufptmp), crc_init
-       jz      do_return
-       add     $16, bufptmp
-       # len is less than 8 if we got here
-       # less_than_8 expects length in upper 3 bits of len_dw
-       # less_than_8_post_shl1 expects length = carryflag * 8 + len_dw[31:30]
-       shl     $2, len_dw
-       jmp     less_than_8_post_shl1
-
-       #######################################################################
-       ## 6) LESS THAN 256-bytes REMAIN AT THIS POINT (8-bits of len are full)
-       #######################################################################
-small:
-       shl $32-8, len_dw               # Prepare len_dw for less_than_256
-       j=256
-.rept 5                                        # j = {256, 128, 64, 32, 16}
-.altmacro
-LABEL less_than_ %j                    # less_than_j: Length should be in
-                                       # upper lg(j) bits of len_dw
-       j=(j/2)
-       shl     $1, len_dw              # Get next MSB
-       JNC_LESS_THAN %j
-.noaltmacro
-       i=0
-.rept (j/8)
-       crc32q  i(bufptmp), crc_init    # Compute crc32 of 8-byte data
-       i=i+8
-.endr
-       jz      do_return               # Return if remaining length is zero
-       add     $j, bufptmp             # Advance buf
-.endr
-
-less_than_8:                           # Length should be stored in
-                                       # upper 3 bits of len_dw
-       shl     $1, len_dw
-less_than_8_post_shl1:
-       jnc     less_than_4
-       crc32l  (bufptmp), crc_init_dw  # CRC of 4 bytes
-       jz      do_return               # return if remaining data is zero
-       add     $4, bufptmp
-less_than_4:                           # Length should be stored in
-                                       # upper 2 bits of len_dw
-       shl     $1, len_dw
-       jnc     less_than_2
-       crc32w  (bufptmp), crc_init_dw  # CRC of 2 bytes
-       jz      do_return               # return if remaining data is zero
-       add     $2, bufptmp
-less_than_2:                           # Length should be stored in the MSB
-                                       # of len_dw
-       shl     $1, len_dw
-       jnc     less_than_1
-       crc32b  (bufptmp), crc_init_dw  # CRC of 1 byte
-less_than_1:                           # Length should be zero
-do_return:
-       movq    crc_init, %rax
-       popq    %rsi
-       popq    %rdi
-       popq    %rbx
-       ret
-
-       ################################################################
-       ## jump table        Table is 129 entries x 2 bytes each
-       ################################################################
-.align 4
-jump_table:
-       i=0
-.rept 129
-.altmacro
-JMPTBL_ENTRY %i
-.noaltmacro
-       i=i+1
-.endr
-
-ENDPROC(crc_pcl)
-
-       ################################################################
-       ## PCLMULQDQ tables
-       ## Table is 128 entries x 2 quad words each
-       ################################################################
-.data
-.align 64
-K_table:
-       .quad 0x14cd00bd6,0x105ec76f0
-       .quad 0x0ba4fc28e,0x14cd00bd6
-       .quad 0x1d82c63da,0x0f20c0dfe
-       .quad 0x09e4addf8,0x0ba4fc28e
-       .quad 0x039d3b296,0x1384aa63a
-       .quad 0x102f9b8a2,0x1d82c63da
-       .quad 0x14237f5e6,0x01c291d04
-       .quad 0x00d3b6092,0x09e4addf8
-       .quad 0x0c96cfdc0,0x0740eef02
-       .quad 0x18266e456,0x039d3b296
-       .quad 0x0daece73e,0x0083a6eec
-       .quad 0x0ab7aff2a,0x102f9b8a2
-       .quad 0x1248ea574,0x1c1733996
-       .quad 0x083348832,0x14237f5e6
-       .quad 0x12c743124,0x02ad91c30
-       .quad 0x0b9e02b86,0x00d3b6092
-       .quad 0x018b33a4e,0x06992cea2
-       .quad 0x1b331e26a,0x0c96cfdc0
-       .quad 0x17d35ba46,0x07e908048
-       .quad 0x1bf2e8b8a,0x18266e456
-       .quad 0x1a3e0968a,0x11ed1f9d8
-       .quad 0x0ce7f39f4,0x0daece73e
-       .quad 0x061d82e56,0x0f1d0f55e
-       .quad 0x0d270f1a2,0x0ab7aff2a
-       .quad 0x1c3f5f66c,0x0a87ab8a8
-       .quad 0x12ed0daac,0x1248ea574
-       .quad 0x065863b64,0x08462d800
-       .quad 0x11eef4f8e,0x083348832
-       .quad 0x1ee54f54c,0x071d111a8
-       .quad 0x0b3e32c28,0x12c743124
-       .quad 0x0064f7f26,0x0ffd852c6
-       .quad 0x0dd7e3b0c,0x0b9e02b86
-       .quad 0x0f285651c,0x0dcb17aa4
-       .quad 0x010746f3c,0x018b33a4e
-       .quad 0x1c24afea4,0x0f37c5aee
-       .quad 0x0271d9844,0x1b331e26a
-       .quad 0x08e766a0c,0x06051d5a2
-       .quad 0x093a5f730,0x17d35ba46
-       .quad 0x06cb08e5c,0x11d5ca20e
-       .quad 0x06b749fb2,0x1bf2e8b8a
-       .quad 0x1167f94f2,0x021f3d99c
-       .quad 0x0cec3662e,0x1a3e0968a
-       .quad 0x19329634a,0x08f158014
-       .quad 0x0e6fc4e6a,0x0ce7f39f4
-       .quad 0x08227bb8a,0x1a5e82106
-       .quad 0x0b0cd4768,0x061d82e56
-       .quad 0x13c2b89c4,0x188815ab2
-       .quad 0x0d7a4825c,0x0d270f1a2
-       .quad 0x10f5ff2ba,0x105405f3e
-       .quad 0x00167d312,0x1c3f5f66c
-       .quad 0x0f6076544,0x0e9adf796
-       .quad 0x026f6a60a,0x12ed0daac
-       .quad 0x1a2adb74e,0x096638b34
-       .quad 0x19d34af3a,0x065863b64
-       .quad 0x049c3cc9c,0x1e50585a0
-       .quad 0x068bce87a,0x11eef4f8e
-       .quad 0x1524fa6c6,0x19f1c69dc
-       .quad 0x16cba8aca,0x1ee54f54c
-       .quad 0x042d98888,0x12913343e
-       .quad 0x1329d9f7e,0x0b3e32c28
-       .quad 0x1b1c69528,0x088f25a3a
-       .quad 0x02178513a,0x0064f7f26
-       .quad 0x0e0ac139e,0x04e36f0b0
-       .quad 0x0170076fa,0x0dd7e3b0c
-       .quad 0x141a1a2e2,0x0bd6f81f8
-       .quad 0x16ad828b4,0x0f285651c
-       .quad 0x041d17b64,0x19425cbba
-       .quad 0x1fae1cc66,0x010746f3c
-       .quad 0x1a75b4b00,0x18db37e8a
-       .quad 0x0f872e54c,0x1c24afea4
-       .quad 0x01e41e9fc,0x04c144932
-       .quad 0x086d8e4d2,0x0271d9844
-       .quad 0x160f7af7a,0x052148f02
-       .quad 0x05bb8f1bc,0x08e766a0c
-       .quad 0x0a90fd27a,0x0a3c6f37a
-       .quad 0x0b3af077a,0x093a5f730
-       .quad 0x04984d782,0x1d22c238e
-       .quad 0x0ca6ef3ac,0x06cb08e5c
-       .quad 0x0234e0b26,0x063ded06a
-       .quad 0x1d88abd4a,0x06b749fb2
-       .quad 0x04597456a,0x04d56973c
-       .quad 0x0e9e28eb4,0x1167f94f2
-       .quad 0x07b3ff57a,0x19385bf2e
-       .quad 0x0c9c8b782,0x0cec3662e
-       .quad 0x13a9cba9e,0x0e417f38a
-       .quad 0x093e106a4,0x19329634a
-       .quad 0x167001a9c,0x14e727980
-       .quad 0x1ddffc5d4,0x0e6fc4e6a
-       .quad 0x00df04680,0x0d104b8fc
-       .quad 0x02342001e,0x08227bb8a
-       .quad 0x00a2a8d7e,0x05b397730
-       .quad 0x168763fa6,0x0b0cd4768
-       .quad 0x1ed5a407a,0x0e78eb416
-       .quad 0x0d2c3ed1a,0x13c2b89c4
-       .quad 0x0995a5724,0x1641378f0
-       .quad 0x19b1afbc4,0x0d7a4825c
-       .quad 0x109ffedc0,0x08d96551c
-       .quad 0x0f2271e60,0x10f5ff2ba
-       .quad 0x00b0bf8ca,0x00bf80dd2
-       .quad 0x123888b7a,0x00167d312
-       .quad 0x1e888f7dc,0x18dcddd1c
-       .quad 0x002ee03b2,0x0f6076544
-       .quad 0x183e8d8fe,0x06a45d2b2
-       .quad 0x133d7a042,0x026f6a60a
-       .quad 0x116b0f50c,0x1dd3e10e8
-       .quad 0x05fabe670,0x1a2adb74e
-       .quad 0x130004488,0x0de87806c
-       .quad 0x000bcf5f6,0x19d34af3a
-       .quad 0x18f0c7078,0x014338754
-       .quad 0x017f27698,0x049c3cc9c
-       .quad 0x058ca5f00,0x15e3e77ee
-       .quad 0x1af900c24,0x068bce87a
-       .quad 0x0b5cfca28,0x0dd07448e
-       .quad 0x0ded288f8,0x1524fa6c6
-       .quad 0x059f229bc,0x1d8048348
-       .quad 0x06d390dec,0x16cba8aca
-       .quad 0x037170390,0x0a3e3e02c
-       .quad 0x06353c1cc,0x042d98888
-       .quad 0x0c4584f5c,0x0d73c7bea
-       .quad 0x1f16a3418,0x1329d9f7e
-       .quad 0x0531377e2,0x185137662
-       .quad 0x1d8d9ca7c,0x1b1c69528
-       .quad 0x0b25b29f2,0x18a08b5bc
-       .quad 0x19fb2a8b0,0x02178513a
-       .quad 0x1a08fe6ac,0x1da758ae0
-       .quad 0x045cddf4e,0x0e0ac139e
-       .quad 0x1a91647f2,0x169cf9eb0
-       .quad 0x1a0f717c4,0x0170076fa