diff options
| author | 2025-03-09 17:47:56 +0100 | |
|---|---|---|
| committer | 2025-12-01 22:08:04 +0100 | |
| commit | b1af8fd87760b34e3ff2fd3bda38f211815a0473 (patch) | |
| tree | 9317fad1a7ec298d7a8d2678e4e422953bbc6f33 /vendor/github.com/klauspost/crc32/crc32_ppc64le.s | |
| parent | [chore] update URLs to forked source (diff) | |
| download | gotosocial-b1af8fd87760b34e3ff2fd3bda38f211815a0473.tar.xz | |
[chore] remove vendor
Diffstat (limited to 'vendor/github.com/klauspost/crc32/crc32_ppc64le.s')
| -rw-r--r-- | vendor/github.com/klauspost/crc32/crc32_ppc64le.s | 736 |
1 files changed, 0 insertions, 736 deletions
diff --git a/vendor/github.com/klauspost/crc32/crc32_ppc64le.s b/vendor/github.com/klauspost/crc32/crc32_ppc64le.s deleted file mode 100644 index 87edef705..000000000 --- a/vendor/github.com/klauspost/crc32/crc32_ppc64le.s +++ /dev/null @@ -1,736 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// The vectorized implementation found below is a derived work -// from code written by Anton Blanchard <anton@au.ibm.com> found -// at https://github.com/antonblanchard/crc32-vpmsum. The original -// is dual licensed under GPL and Apache 2. As the copyright holder -// for the work, IBM has contributed this new work under -// the golang license. - -// Changes include porting to Go assembler with modifications for -// the Go ABI for ppc64le. - -#include "textflag.h" - -#define POWER8_OFFSET 132 - -#define off16 R16 -#define off32 R17 -#define off48 R18 -#define off64 R19 -#define off80 R20 -#define off96 R21 -#define off112 R22 - -#define const1 V24 -#define const2 V25 - -#define byteswap V26 -#define mask_32bit V27 -#define mask_64bit V28 -#define zeroes V29 - -#define MAX_SIZE 32*1024 -#define REFLECT - -TEXT ·ppc64SlicingUpdateBy8(SB), NOSPLIT|NOFRAME, $0-44 - MOVWZ crc+0(FP), R3 // incoming crc - MOVD table8+8(FP), R4 // *Table - MOVD p+16(FP), R5 - MOVD p_len+24(FP), R6 // p len - - CMP $0, R6 // len == 0? - BNE start - MOVW R3, ret+40(FP) // return crc - RET - -start: - NOR R3, R3, R7 // ^crc - MOVWZ R7, R7 // 32 bits - CMP R6, $16 - MOVD R6, CTR - BLT short - SRAD $3, R6, R8 // 8 byte chunks - MOVD R8, CTR - -loop: - MOVWZ 0(R5), R8 // 0-3 bytes of p ?Endian? - MOVWZ 4(R5), R9 // 4-7 bytes of p - MOVD R4, R10 // &tab[0] - XOR R7, R8, R7 // crc ^= byte[0:3] - RLDICL $40, R9, $56, R17 // p[7] - SLD $2, R17, R17 // p[7]*4 - RLDICL $40, R7, $56, R8 // crc>>24 - SLD $2, R8, R8 // crc>>24*4 - RLDICL $48, R9, $56, R18 // p[6] - SLD $2, R18, R18 // p[6]*4 - MOVWZ (R10)(R17), R21 // tab[0][p[7]] - ADD $1024, R10, R10 // tab[1] - RLDICL $56, R9, $56, R19 // p[5] - SLD $2, R19, R19 // p[5]*4:1 - MOVWZ (R10)(R18), R22 // tab[1][p[6]] - ADD $1024, R10, R10 // tab[2] - XOR R21, R22, R21 // xor done R22 - CLRLSLDI $56, R9, $2, R20 - MOVWZ (R10)(R19), R23 // tab[2][p[5]] - ADD $1024, R10, R10 // &tab[3] - XOR R21, R23, R21 // xor done R23 - MOVWZ (R10)(R20), R24 // tab[3][p[4]] - ADD $1024, R10, R10 // &tab[4] - XOR R21, R24, R21 // xor done R24 - MOVWZ (R10)(R8), R25 // tab[4][crc>>24] - RLDICL $48, R7, $56, R24 // crc>>16&0xFF - XOR R21, R25, R21 // xor done R25 - ADD $1024, R10, R10 // &tab[5] - SLD $2, R24, R24 // crc>>16&0xFF*4 - MOVWZ (R10)(R24), R26 // tab[5][crc>>16&0xFF] - XOR R21, R26, R21 // xor done R26 - RLDICL $56, R7, $56, R25 // crc>>8 - ADD $1024, R10, R10 // &tab[6] - SLD $2, R25, R25 // crc>>8&FF*2 - MOVBZ R7, R26 // crc&0xFF - MOVWZ (R10)(R25), R27 // tab[6][crc>>8&0xFF] - ADD $1024, R10, R10 // &tab[7] - SLD $2, R26, R26 // crc&0xFF*2 - XOR R21, R27, R21 // xor done R27 - ADD $8, R5 // p = p[8:] - MOVWZ (R10)(R26), R28 // tab[7][crc&0xFF] - XOR R21, R28, R21 // xor done R28 - MOVWZ R21, R7 // crc for next round - BDNZ loop - ANDCC $7, R6, R8 // any leftover bytes - BEQ done // none --> done - MOVD R8, CTR // byte count - PCALIGN $16 // align short loop - -short: - MOVBZ 0(R5), R8 // get v - XOR R8, R7, R8 // byte(crc)^v -> R8 - RLDIC $2, R8, $54, R8 // rldicl r8,r8,2,22 - SRD $8, R7, R14 // crc>>8 - MOVWZ (R4)(R8), R10 - ADD $1, R5 - XOR R10, R14, R7 // loop crc in R7 - BDNZ short - -done: - NOR R7, R7, R7 // ^crc - MOVW R7, ret+40(FP) // return crc - RET - -#ifdef BYTESWAP_DATA -DATA ·byteswapcons+0(SB)/8, $0x0706050403020100 -DATA ·byteswapcons+8(SB)/8, $0x0f0e0d0c0b0a0908 - -GLOBL ·byteswapcons+0(SB), RODATA, $16 -#endif - -TEXT ·vectorCrc32(SB), NOSPLIT|NOFRAME, $0-36 - MOVWZ crc+0(FP), R3 // incoming crc - MOVWZ ctab+4(FP), R14 // crc poly id - MOVD p+8(FP), R4 - MOVD p_len+16(FP), R5 // p len - - // R3 = incoming crc - // R14 = constant table identifier - // R5 = address of bytes - // R6 = length of bytes - - // defines for index loads - - MOVD $16, off16 - MOVD $32, off32 - MOVD $48, off48 - MOVD $64, off64 - MOVD $80, off80 - MOVD $96, off96 - MOVD $112, off112 - MOVD $0, R15 - - MOVD R3, R10 // save initial crc - - NOR R3, R3, R3 // ^crc - MOVWZ R3, R3 // 32 bits - VXOR zeroes, zeroes, zeroes // clear the V reg - VSPLTISW $-1, V0 - VSLDOI $4, V29, V0, mask_32bit - VSLDOI $8, V29, V0, mask_64bit - - VXOR V8, V8, V8 - MTVSRD R3, VS40 // crc initial value VS40 = V8 - -#ifdef REFLECT - VSLDOI $8, zeroes, V8, V8 // or: VSLDOI V29,V8,V27,4 for top 32 bits? - -#else - VSLDOI $4, V8, zeroes, V8 - -#endif - -#ifdef BYTESWAP_DATA - MOVD $·byteswapcons(SB), R3 - LVX (R3), byteswap - -#endif - - CMPU R5, $256 // length of bytes - BLT short - - RLDICR $0, R5, $56, R6 // chunk to process - - // First step for larger sizes -l1: - MOVD $32768, R7 - MOVD R7, R9 - CMP R6, R7 // compare R6, R7 (MAX SIZE) - BGT top // less than MAX, just do remainder - MOVD R6, R7 - -top: - SUB R7, R6, R6 - - // mainloop does 128 bytes at a time - SRD $7, R7 - - // determine the offset into the constants table to start with. - // Each constant is 128 bytes, used against 16 bytes of data. - SLD $4, R7, R8 - SRD $3, R9, R9 - SUB R8, R9, R8 - - // The last iteration is reduced in a separate step - ADD $-1, R7 - MOVD R7, CTR - - // Determine which constant table (depends on poly) - CMP R14, $1 - BNE castTable - MOVD $·IEEEConst(SB), R3 - BR startConst - -castTable: - MOVD $·CastConst(SB), R3 - -startConst: - ADD R3, R8, R3 // starting point in constants table - - VXOR V0, V0, V0 // clear the V regs - VXOR V1, V1, V1 - VXOR V2, V2, V2 - VXOR V3, V3, V3 - VXOR V4, V4, V4 - VXOR V5, V5, V5 - VXOR V6, V6, V6 - VXOR V7, V7, V7 - - LVX (R3), const1 // loading constant values - - CMP R15, $1 // Identify warm up pass - BEQ next - - // First warm up pass: load the bytes to process - LVX (R4), V16 - LVX (R4+off16), V17 - LVX (R4+off32), V18 - LVX (R4+off48), V19 - LVX (R4+off64), V20 - LVX (R4+off80), V21 - LVX (R4+off96), V22 - LVX (R4+off112), V23 - ADD $128, R4 // bump up to next 128 bytes in buffer - - VXOR V16, V8, V16 // xor in initial CRC in V8 - -next: - BC 18, 0, first_warm_up_done - - ADD $16, R3 // bump up to next constants - LVX (R3), const2 // table values - - VPMSUMD V16, const1, V8 // second warm up pass - LVX (R4), V16 // load from buffer - OR $0, R2, R2 - - VPMSUMD V17, const1, V9 // vpmsumd with constants - LVX (R4+off16), V17 // load next from buffer - OR $0, R2, R2 - - VPMSUMD V18, const1, V10 // vpmsumd with constants - LVX (R4+off32), V18 // load next from buffer - OR $0, R2, R2 - - VPMSUMD V19, const1, V11 // vpmsumd with constants - LVX (R4+off48), V19 // load next from buffer - OR $0, R2, R2 - - VPMSUMD V20, const1, V12 // vpmsumd with constants - LVX (R4+off64), V20 // load next from buffer - OR $0, R2, R2 - - VPMSUMD V21, const1, V13 // vpmsumd with constants - LVX (R4+off80), V21 // load next from buffer - OR $0, R2, R2 - - VPMSUMD V22, const1, V14 // vpmsumd with constants - LVX (R4+off96), V22 // load next from buffer - OR $0, R2, R2 - - VPMSUMD V23, const1, V15 // vpmsumd with constants - LVX (R4+off112), V23 // load next from buffer - - ADD $128, R4 // bump up to next 128 bytes in buffer - - BC 18, 0, first_cool_down - -cool_top: - LVX (R3), const1 // constants - ADD $16, R3 // inc to next constants - OR $0, R2, R2 - - VXOR V0, V8, V0 // xor in previous vpmsumd - VPMSUMD V16, const2, V8 // vpmsumd with constants - LVX (R4), V16 // buffer - OR $0, R2, R2 - - VXOR V1, V9, V1 // xor in previous - VPMSUMD V17, const2, V9 // vpmsumd with constants - LVX (R4+off16), V17 // next in buffer - OR $0, R2, R2 - - VXOR V2, V10, V2 // xor in previous - VPMSUMD V18, const2, V10 // vpmsumd with constants - LVX (R4+off32), V18 // next in buffer - OR $0, R2, R2 - - VXOR V3, V11, V3 // xor in previous - VPMSUMD V19, const2, V11 // vpmsumd with constants - LVX (R4+off48), V19 // next in buffer - LVX (R3), const2 // get next constant - OR $0, R2, R2 - - VXOR V4, V12, V4 // xor in previous - VPMSUMD V20, const1, V12 // vpmsumd with constants - LVX (R4+off64), V20 // next in buffer - OR $0, R2, R2 - - VXOR V5, V13, V5 // xor in previous - VPMSUMD V21, const1, V13 // vpmsumd with constants - LVX (R4+off80), V21 // next in buffer - OR $0, R2, R2 - - VXOR V6, V14, V6 // xor in previous - VPMSUMD V22, const1, V14 // vpmsumd with constants - LVX (R4+off96), V22 // next in buffer - OR $0, R2, R2 - - VXOR V7, V15, V7 // xor in previous - VPMSUMD V23, const1, V15 // vpmsumd with constants - LVX (R4+off112), V23 // next in buffer - - ADD $128, R4 // bump up buffer pointer - BDNZ cool_top // are we done? - -first_cool_down: - - // load the constants - // xor in the previous value - // vpmsumd the result with constants - - LVX (R3), const1 - ADD $16, R3 - - VXOR V0, V8, V0 - VPMSUMD V16, const1, V8 - OR $0, R2, R2 - - VXOR V1, V9, V1 - VPMSUMD V17, const1, V9 - OR $0, R2, R2 - - VXOR V2, V10, V2 - VPMSUMD V18, const1, V10 - OR $0, R2, R2 - - VXOR V3, V11, V3 - VPMSUMD V19, const1, V11 - OR $0, R2, R2 - - VXOR V4, V12, V4 - VPMSUMD V20, const1, V12 - OR $0, R2, R2 - - VXOR V5, V13, V5 - VPMSUMD V21, const1, V13 - OR $0, R2, R2 - - VXOR V6, V14, V6 - VPMSUMD V22, const1, V14 - OR $0, R2, R2 - - VXOR V7, V15, V7 - VPMSUMD V23, const1, V15 - OR $0, R2, R2 - -second_cool_down: - - VXOR V0, V8, V0 - VXOR V1, V9, V1 - VXOR V2, V10, V2 - VXOR V3, V11, V3 - VXOR V4, V12, V4 - VXOR V5, V13, V5 - VXOR V6, V14, V6 - VXOR V7, V15, V7 - -#ifdef REFLECT - VSLDOI $4, V0, zeroes, V0 - VSLDOI $4, V1, zeroes, V1 - VSLDOI $4, V2, zeroes, V2 - VSLDOI $4, V3, zeroes, V3 - VSLDOI $4, V4, zeroes, V4 - VSLDOI $4, V5, zeroes, V5 - VSLDOI $4, V6, zeroes, V6 - VSLDOI $4, V7, zeroes, V7 - -#endif - - LVX (R4), V8 - LVX (R4+off16), V9 - LVX (R4+off32), V10 - LVX (R4+off48), V11 - LVX (R4+off64), V12 - LVX (R4+off80), V13 - LVX (R4+off96), V14 - LVX (R4+off112), V15 - - ADD $128, R4 - - VXOR V0, V8, V16 - VXOR V1, V9, V17 - VXOR V2, V10, V18 - VXOR V3, V11, V19 - VXOR V4, V12, V20 - VXOR V5, V13, V21 - VXOR V6, V14, V22 - VXOR V7, V15, V23 - - MOVD $1, R15 - CMP $0, R6 - ADD $128, R6 - - BNE l1 - ANDCC $127, R5 - SUBC R5, $128, R6 - ADD R3, R6, R3 - - SRD $4, R5, R7 - MOVD R7, CTR - LVX (R3), V0 - LVX (R3+off16), V1 - LVX (R3+off32), V2 - LVX (R3+off48), V3 - LVX (R3+off64), V4 - LVX (R3+off80), V5 - LVX (R3+off96), V6 - LVX (R3+off112), V7 - - ADD $128, R3 - - VPMSUMW V16, V0, V0 - VPMSUMW V17, V1, V1 - VPMSUMW V18, V2, V2 - VPMSUMW V19, V3, V3 - VPMSUMW V20, V4, V4 - VPMSUMW V21, V5, V5 - VPMSUMW V22, V6, V6 - VPMSUMW V23, V7, V7 - - // now reduce the tail - - CMP $0, R7 - BEQ next1 - - LVX (R4), V16 - LVX (R3), V17 - VPMSUMW V16, V17, V16 - VXOR V0, V16, V0 - BC 18, 0, next1 - - LVX (R4+off16), V16 - LVX (R3+off16), V17 - VPMSUMW V16, V17, V16 - VXOR V0, V16, V0 - BC 18, 0, next1 - - LVX (R4+off32), V16 - LVX (R3+off32), V17 - VPMSUMW V16, V17, V16 - VXOR V0, V16, V0 - BC 18, 0, next1 - - LVX (R4+off48), V16 - LVX (R3+off48), V17 - VPMSUMW V16, V17, V16 - VXOR V0, V16, V0 - BC 18, 0, next1 - - LVX (R4+off64), V16 - LVX (R3+off64), V17 - VPMSUMW V16, V17, V16 - VXOR V0, V16, V0 - BC 18, 0, next1 - - LVX (R4+off80), V16 - LVX (R3+off80), V17 - VPMSUMW V16, V17, V16 - VXOR V0, V16, V0 - BC 18, 0, next1 - - LVX (R4+off96), V16 - LVX (R3+off96), V17 - VPMSUMW V16, V17, V16 - VXOR V0, V16, V0 - -next1: - VXOR V0, V1, V0 - VXOR V2, V3, V2 - VXOR V4, V5, V4 - VXOR V6, V7, V6 - VXOR V0, V2, V0 - VXOR V4, V6, V4 - VXOR V0, V4, V0 - -barrett_reduction: - - CMP R14, $1 - BNE barcstTable - MOVD $·IEEEBarConst(SB), R3 - BR startbarConst - -barcstTable: - MOVD $·CastBarConst(SB), R3 - -startbarConst: - LVX (R3), const1 - LVX (R3+off16), const2 - - VSLDOI $8, V0, V0, V1 - VXOR V0, V1, V0 - -#ifdef REFLECT - VSPLTISB $1, V1 - VSL V0, V1, V0 - -#endif - - VAND V0, mask_64bit, V0 - -#ifndef REFLECT - - VPMSUMD V0, const1, V1 - VSLDOI $8, zeroes, V1, V1 - VPMSUMD V1, const2, V1 - VXOR V0, V1, V0 - VSLDOI $8, V0, zeroes, V0 - -#else - - VAND V0, mask_32bit, V1 - VPMSUMD V1, const1, V1 - VAND V1, mask_32bit, V1 - VPMSUMD V1, const2, V1 - VXOR V0, V1, V0 - VSLDOI $4, V0, zeroes, V0 - -#endif - - MFVSRD VS32, R3 // VS32 = V0 - - NOR R3, R3, R3 // return ^crc - MOVW R3, ret+32(FP) - RET - -first_warm_up_done: - - LVX (R3), const1 - ADD $16, R3 - - VPMSUMD V16, const1, V8 - VPMSUMD V17, const1, V9 - VPMSUMD V18, const1, V10 - VPMSUMD V19, const1, V11 - VPMSUMD V20, const1, V12 - VPMSUMD V21, const1, V13 - VPMSUMD V22, const1, V14 - VPMSUMD V23, const1, V15 - - BR second_cool_down - -short: - CMP $0, R5 - BEQ zero - - // compute short constants - - CMP R14, $1 - BNE castshTable - MOVD $·IEEEConst(SB), R3 - ADD $4080, R3 - BR startshConst - -castshTable: - MOVD $·CastConst(SB), R3 - ADD $4080, R3 - -startshConst: - SUBC R5, $256, R6 // sub from 256 - ADD R3, R6, R3 - - // calculate where to start - - SRD $4, R5, R7 - MOVD R7, CTR - - VXOR V19, V19, V19 - VXOR V20, V20, V20 - - LVX (R4), V0 - LVX (R3), V16 - VXOR V0, V8, V0 - VPMSUMW V0, V16, V0 - BC 18, 0, v0 - - LVX (R4+off16), V1 - LVX (R3+off16), V17 - VPMSUMW V1, V17, V1 - BC 18, 0, v1 - - LVX (R4+off32), V2 - LVX (R3+off32), V16 - VPMSUMW V2, V16, V2 - BC 18, 0, v2 - - LVX (R4+off48), V3 - LVX (R3+off48), V17 - VPMSUMW V3, V17, V3 - BC 18, 0, v3 - - LVX (R4+off64), V4 - LVX (R3+off64), V16 - VPMSUMW V4, V16, V4 - BC 18, 0, v4 - - LVX (R4+off80), V5 - LVX (R3+off80), V17 - VPMSUMW V5, V17, V5 - BC 18, 0, v5 - - LVX (R4+off96), V6 - LVX (R3+off96), V16 - VPMSUMW V6, V16, V6 - BC 18, 0, v6 - - LVX (R4+off112), V7 - LVX (R3+off112), V17 - VPMSUMW V7, V17, V7 - BC 18, 0, v7 - - ADD $128, R3 - ADD $128, R4 - - LVX (R4), V8 - LVX (R3), V16 - VPMSUMW V8, V16, V8 - BC 18, 0, v8 - - LVX (R4+off16), V9 - LVX (R3+off16), V17 - VPMSUMW V9, V17, V9 - BC 18, 0, v9 - - LVX (R4+off32), V10 - LVX (R3+off32), V16 - VPMSUMW V10, V16, V10 - BC 18, 0, v10 - - LVX (R4+off48), V11 - LVX (R3+off48), V17 - VPMSUMW V11, V17, V11 - BC 18, 0, v11 - - LVX (R4+off64), V12 - LVX (R3+off64), V16 - VPMSUMW V12, V16, V12 - BC 18, 0, v12 - - LVX (R4+off80), V13 - LVX (R3+off80), V17 - VPMSUMW V13, V17, V13 - BC 18, 0, v13 - - LVX (R4+off96), V14 - LVX (R3+off96), V16 - VPMSUMW V14, V16, V14 - BC 18, 0, v14 - - LVX (R4+off112), V15 - LVX (R3+off112), V17 - VPMSUMW V15, V17, V15 - - VXOR V19, V15, V19 - -v14: - VXOR V20, V14, V20 - -v13: - VXOR V19, V13, V19 - -v12: - VXOR V20, V12, V20 - -v11: - VXOR V19, V11, V19 - -v10: - VXOR V20, V10, V20 - -v9: - VXOR V19, V9, V19 - -v8: - VXOR V20, V8, V20 - -v7: - VXOR V19, V7, V19 - -v6: - VXOR V20, V6, V20 - -v5: - VXOR V19, V5, V19 - -v4: - VXOR V20, V4, V20 - -v3: - VXOR V19, V3, V19 - -v2: - VXOR V20, V2, V20 - -v1: - VXOR V19, V1, V19 - -v0: - VXOR V20, V0, V20 - - VXOR V19, V20, V0 - - BR barrett_reduction - -zero: - // This case is the original crc, so just return it - MOVW R10, ret+32(FP) - RET |
