mirror of
https://github.com/MariaDB/server.git
synced 2025-08-09 22:24:09 +03:00
MDEV-9699: power crc32: Per the PPC64 ABI, v20-v31 are non-volatile registers
These where modified and not restored.
Corrected as per upstream:
f2145e5858...aaf0ac4
This commit is contained in:
committed by
Daniel Black
parent
66832b6195
commit
5ea894a7c8
@@ -67,14 +67,13 @@
|
|||||||
#define off96 r30
|
#define off96 r30
|
||||||
#define off112 r31
|
#define off112 r31
|
||||||
|
|
||||||
#define const1 v25
|
#define const1 v24
|
||||||
#define const2 v26
|
#define const2 v25
|
||||||
|
|
||||||
#define byteswap v27
|
#define byteswap v26
|
||||||
#define mask_32bit v28
|
#define mask_32bit v27
|
||||||
#define mask_64bit v29
|
#define mask_64bit v28
|
||||||
#define zeroes v30
|
#define zeroes v29
|
||||||
#define ones v31
|
|
||||||
|
|
||||||
#ifdef BYTESWAP_DATA
|
#ifdef BYTESWAP_DATA
|
||||||
#define VPERM(A, B, C, D) vperm A, B, C, D
|
#define VPERM(A, B, C, D) vperm A, B, C, D
|
||||||
@@ -101,13 +100,28 @@ FUNC_START(__crc32_vpmsum)
|
|||||||
li off112,112
|
li off112,112
|
||||||
li r0,0
|
li r0,0
|
||||||
|
|
||||||
|
/* Enough room for saving 10 non volatile VMX registers */
|
||||||
|
subi r6,r1,56+10*16
|
||||||
|
subi r7,r1,56+2*16
|
||||||
|
|
||||||
|
stvx v20,0,r6
|
||||||
|
stvx v21,off16,r6
|
||||||
|
stvx v22,off32,r6
|
||||||
|
stvx v23,off48,r6
|
||||||
|
stvx v24,off64,r6
|
||||||
|
stvx v25,off80,r6
|
||||||
|
stvx v26,off96,r6
|
||||||
|
stvx v27,off112,r6
|
||||||
|
stvx v28,0,r7
|
||||||
|
stvx v29,off16,r7
|
||||||
|
|
||||||
mr r10,r3
|
mr r10,r3
|
||||||
|
|
||||||
vxor zeroes,zeroes,zeroes
|
vxor zeroes,zeroes,zeroes
|
||||||
vspltisw ones,-1
|
vspltisw v0,-1
|
||||||
|
|
||||||
vsldoi mask_32bit,zeroes,ones,4
|
vsldoi mask_32bit,zeroes,v0,4
|
||||||
vsldoi mask_64bit,zeroes,ones,8
|
vsldoi mask_64bit,zeroes,v0,8
|
||||||
|
|
||||||
/* Get the initial value into v8 */
|
/* Get the initial value into v8 */
|
||||||
vxor v8,v8,v8
|
vxor v8,v8,v8
|
||||||
@@ -570,6 +584,21 @@ FUNC_START(__crc32_vpmsum)
|
|||||||
vsldoi v0,v0,zeroes,4 /* shift result into top 64 bits of */
|
vsldoi v0,v0,zeroes,4 /* shift result into top 64 bits of */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
.Lout:
|
||||||
|
subi r6,r1,56+10*16
|
||||||
|
subi r7,r1,56+2*16
|
||||||
|
|
||||||
|
lvx v20,0,r6
|
||||||
|
lvx v21,off16,r6
|
||||||
|
lvx v22,off32,r6
|
||||||
|
lvx v23,off48,r6
|
||||||
|
lvx v24,off64,r6
|
||||||
|
lvx v25,off80,r6
|
||||||
|
lvx v26,off96,r6
|
||||||
|
lvx v27,off112,r6
|
||||||
|
lvx v28,0,r7
|
||||||
|
lvx v29,off16,r7
|
||||||
|
|
||||||
/* Get it into r3 */
|
/* Get it into r3 */
|
||||||
MFVRD(r3, v0)
|
MFVRD(r3, v0)
|
||||||
|
|
||||||
@@ -739,6 +768,8 @@ FUNC_START(__crc32_vpmsum)
|
|||||||
.Lzero:
|
.Lzero:
|
||||||
mr r3,r10
|
mr r3,r10
|
||||||
blr
|
blr
|
||||||
|
b .Lout
|
||||||
|
|
||||||
FUNC_END(__crc32_vpmsum)
|
FUNC_END(__crc32_vpmsum)
|
||||||
|
|
||||||
#endif /* __powerpc__ */
|
#endif /* __powerpc__ */
|
||||||
|
@@ -67,14 +67,13 @@
|
|||||||
#define off96 r30
|
#define off96 r30
|
||||||
#define off112 r31
|
#define off112 r31
|
||||||
|
|
||||||
#define const1 v25
|
#define const1 v24
|
||||||
#define const2 v26
|
#define const2 v25
|
||||||
|
|
||||||
#define byteswap v27
|
#define byteswap v26
|
||||||
#define mask_32bit v28
|
#define mask_32bit v27
|
||||||
#define mask_64bit v29
|
#define mask_64bit v28
|
||||||
#define zeroes v30
|
#define zeroes v29
|
||||||
#define ones v31
|
|
||||||
|
|
||||||
#ifdef BYTESWAP_DATA
|
#ifdef BYTESWAP_DATA
|
||||||
#define VPERM(A, B, C, D) vperm A, B, C, D
|
#define VPERM(A, B, C, D) vperm A, B, C, D
|
||||||
@@ -101,13 +100,28 @@ FUNC_START(__crc32_vpmsum)
|
|||||||
li off112,112
|
li off112,112
|
||||||
li r0,0
|
li r0,0
|
||||||
|
|
||||||
|
/* Enough room for saving 10 non volatile VMX registers */
|
||||||
|
subi r6,r1,56+10*16
|
||||||
|
subi r7,r1,56+2*16
|
||||||
|
|
||||||
|
stvx v20,0,r6
|
||||||
|
stvx v21,off16,r6
|
||||||
|
stvx v22,off32,r6
|
||||||
|
stvx v23,off48,r6
|
||||||
|
stvx v24,off64,r6
|
||||||
|
stvx v25,off80,r6
|
||||||
|
stvx v26,off96,r6
|
||||||
|
stvx v27,off112,r6
|
||||||
|
stvx v28,0,r7
|
||||||
|
stvx v29,off16,r7
|
||||||
|
|
||||||
mr r10,r3
|
mr r10,r3
|
||||||
|
|
||||||
vxor zeroes,zeroes,zeroes
|
vxor zeroes,zeroes,zeroes
|
||||||
vspltisw ones,-1
|
vspltisw v0,-1
|
||||||
|
|
||||||
vsldoi mask_32bit,zeroes,ones,4
|
vsldoi mask_32bit,zeroes,v0,4
|
||||||
vsldoi mask_64bit,zeroes,ones,8
|
vsldoi mask_64bit,zeroes,v0,8
|
||||||
|
|
||||||
/* Get the initial value into v8 */
|
/* Get the initial value into v8 */
|
||||||
vxor v8,v8,v8
|
vxor v8,v8,v8
|
||||||
@@ -570,6 +584,21 @@ FUNC_START(__crc32_vpmsum)
|
|||||||
vsldoi v0,v0,zeroes,4 /* shift result into top 64 bits of */
|
vsldoi v0,v0,zeroes,4 /* shift result into top 64 bits of */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
.Lout:
|
||||||
|
subi r6,r1,56+10*16
|
||||||
|
subi r7,r1,56+2*16
|
||||||
|
|
||||||
|
lvx v20,0,r6
|
||||||
|
lvx v21,off16,r6
|
||||||
|
lvx v22,off32,r6
|
||||||
|
lvx v23,off48,r6
|
||||||
|
lvx v24,off64,r6
|
||||||
|
lvx v25,off80,r6
|
||||||
|
lvx v26,off96,r6
|
||||||
|
lvx v27,off112,r6
|
||||||
|
lvx v28,0,r7
|
||||||
|
lvx v29,off16,r7
|
||||||
|
|
||||||
/* Get it into r3 */
|
/* Get it into r3 */
|
||||||
MFVRD(r3, v0)
|
MFVRD(r3, v0)
|
||||||
|
|
||||||
@@ -739,6 +768,8 @@ FUNC_START(__crc32_vpmsum)
|
|||||||
.Lzero:
|
.Lzero:
|
||||||
mr r3,r10
|
mr r3,r10
|
||||||
blr
|
blr
|
||||||
|
b .Lout
|
||||||
|
|
||||||
FUNC_END(__crc32_vpmsum)
|
FUNC_END(__crc32_vpmsum)
|
||||||
|
|
||||||
#endif /* __powerpc__ */
|
#endif /* __powerpc__ */
|
||||||
|
Reference in New Issue
Block a user