mirror of
https://github.com/amadvance/snapraid.git
synced 2026-10-26 19:01:57 -04:00
Beautifies the raid lib.
This commit is contained in:
parent
6cfe0e66b2
commit
4a92b064f4
16 changed files with 377 additions and 369 deletions
|
|
@ -145,7 +145,7 @@ recurse:
|
|||
/* initialize all the next positions, if any */
|
||||
while (i < r) {
|
||||
/* each position start at the next value of the previous one */
|
||||
c[i] = c[i-1] + 1;
|
||||
c[i] = c[i - 1] + 1;
|
||||
++i;
|
||||
}
|
||||
|
||||
|
|
|
|||
18
raid/cpu.h
18
raid/cpu.h
|
|
@ -19,9 +19,9 @@
|
|||
|
||||
static inline void raid_cpuid(uint32_t func_eax, uint32_t sub_ecx, uint32_t *reg)
|
||||
{
|
||||
asm volatile(
|
||||
asm volatile (
|
||||
#if defined(__i386__) && defined(__PIC__)
|
||||
/* allow compilation in PIC mode saving ebx */
|
||||
/* allow compilation in PIC mode saving ebx */
|
||||
"xchgl %%ebx, %1\n"
|
||||
"cpuid\n"
|
||||
"xchgl %%ebx, %1\n"
|
||||
|
|
@ -44,9 +44,9 @@ static inline void raid_cpu_info(char *vendor, unsigned *family, unsigned *model
|
|||
|
||||
raid_cpuid(0, 0, reg);
|
||||
|
||||
((uint32_t *)vendor)[0] = reg[1];
|
||||
((uint32_t *)vendor)[1] = reg[3];
|
||||
((uint32_t *)vendor)[2] = reg[2];
|
||||
((uint32_t*)vendor)[0] = reg[1];
|
||||
((uint32_t*)vendor)[1] = reg[3];
|
||||
((uint32_t*)vendor)[2] = reg[2];
|
||||
vendor[12] = 0;
|
||||
|
||||
raid_cpuid(1, 0, reg);
|
||||
|
|
@ -120,10 +120,10 @@ static inline int raid_os_support_256bit_regs(void)
|
|||
uint32_t reg[4];
|
||||
|
||||
/* get the value of the Extended Control Register ecx=0 */
|
||||
asm volatile(
|
||||
/* uses a direct encoding of the XGETBV instruction as only recent */
|
||||
/* assemblers support it. */
|
||||
/* the next line is equivalent at: "xgetbv\n" */
|
||||
asm volatile (
|
||||
/* uses a direct encoding of the XGETBV instruction as only recent */
|
||||
/* assemblers support it. */
|
||||
/* the next line is equivalent at: "xgetbv\n" */
|
||||
".byte 0x0f, 0x01, 0xd0\n"
|
||||
: "=a" (reg[0]), "=d" (reg[3])
|
||||
: "c" (0)
|
||||
|
|
|
|||
10
raid/gf.h
10
raid/gf.h
|
|
@ -69,17 +69,17 @@ static __always_inline uint8_t A(int p, int d)
|
|||
/*
|
||||
* Dereference as uint8_t
|
||||
*/
|
||||
#define v_8(p) (*(uint8_t *)&(p))
|
||||
#define v_8(p) (*(uint8_t*)&(p))
|
||||
|
||||
/*
|
||||
* Dereference as uint32_t
|
||||
*/
|
||||
#define v_32(p) (*(uint32_t *)&(p))
|
||||
#define v_32(p) (*(uint32_t*)&(p))
|
||||
|
||||
/*
|
||||
* Dereference as uint64_t
|
||||
*/
|
||||
#define v_64(p) (*(uint64_t *)&(p))
|
||||
#define v_64(p) (*(uint64_t*)&(p))
|
||||
|
||||
/*
|
||||
* Multiply each byte of a uint32 by 2 in the GF(2^8).
|
||||
|
|
@ -87,6 +87,7 @@ static __always_inline uint8_t A(int p, int d)
|
|||
static __always_inline uint32_t x2_32(uint32_t v)
|
||||
{
|
||||
uint32_t mask = v & 0x80808080U;
|
||||
|
||||
mask = (mask << 1) - (mask >> 7);
|
||||
v = (v << 1) & 0xfefefefeU;
|
||||
v ^= mask & 0x1d1d1d1dU;
|
||||
|
|
@ -99,6 +100,7 @@ static __always_inline uint32_t x2_32(uint32_t v)
|
|||
static __always_inline uint64_t x2_64(uint64_t v)
|
||||
{
|
||||
uint64_t mask = v & 0x8080808080808080ULL;
|
||||
|
||||
mask = (mask << 1) - (mask >> 7);
|
||||
v = (v << 1) & 0xfefefefefefefefeULL;
|
||||
v ^= mask & 0x1d1d1d1d1d1d1d1dULL;
|
||||
|
|
@ -111,6 +113,7 @@ static __always_inline uint64_t x2_64(uint64_t v)
|
|||
static __always_inline uint32_t d2_32(uint32_t v)
|
||||
{
|
||||
uint32_t mask = v & 0x01010101U;
|
||||
|
||||
mask = (mask << 8) - mask;
|
||||
v = (v >> 1) & 0x7f7f7f7fU;
|
||||
v ^= mask & 0x8e8e8e8eU;
|
||||
|
|
@ -123,6 +126,7 @@ static __always_inline uint32_t d2_32(uint32_t v)
|
|||
static __always_inline uint64_t d2_64(uint64_t v)
|
||||
{
|
||||
uint64_t mask = v & 0x0101010101010101ULL;
|
||||
|
||||
mask = (mask << 8) - mask;
|
||||
v = (v >> 1) & 0x7f7f7f7f7f7f7f7fULL;
|
||||
v ^= mask & 0x8e8e8e8e8e8e8e8eULL;
|
||||
|
|
|
|||
|
|
@ -80,10 +80,10 @@ void raid_insert(int n, int *v, int i)
|
|||
v[n] = i;
|
||||
|
||||
/* swap until in the correct position */
|
||||
while (n > 0 && v[n-1] > v[n]) {
|
||||
while (n > 0 && v[n - 1] > v[n]) {
|
||||
/* swap */
|
||||
int t = v[n-1];
|
||||
v[n-1] = v[n];
|
||||
int t = v[n - 1];
|
||||
v[n - 1] = v[n];
|
||||
v[n] = t;
|
||||
|
||||
/* previous position */
|
||||
|
|
|
|||
114
raid/int.c
114
raid/int.c
|
|
@ -20,7 +20,7 @@
|
|||
*/
|
||||
void raid_gen1_int32(int nd, size_t size, void **vv)
|
||||
{
|
||||
uint8_t **v = (uint8_t **)vv;
|
||||
uint8_t **v = (uint8_t**)vv;
|
||||
uint8_t *p;
|
||||
int d, l;
|
||||
size_t i;
|
||||
|
|
@ -33,13 +33,13 @@ void raid_gen1_int32(int nd, size_t size, void **vv)
|
|||
|
||||
for (i = 0; i < size; i += 8) {
|
||||
p0 = v_32(v[l][i]);
|
||||
p1 = v_32(v[l][i+4]);
|
||||
for (d = l-1; d >= 0; --d) {
|
||||
p1 = v_32(v[l][i + 4]);
|
||||
for (d = l - 1; d >= 0; --d) {
|
||||
p0 ^= v_32(v[d][i]);
|
||||
p1 ^= v_32(v[d][i+4]);
|
||||
p1 ^= v_32(v[d][i + 4]);
|
||||
}
|
||||
v_32(p[i]) = p0;
|
||||
v_32(p[i+4]) = p1;
|
||||
v_32(p[i + 4]) = p1;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -48,7 +48,7 @@ void raid_gen1_int32(int nd, size_t size, void **vv)
|
|||
*/
|
||||
void raid_gen1_int64(int nd, size_t size, void **vv)
|
||||
{
|
||||
uint8_t **v = (uint8_t **)vv;
|
||||
uint8_t **v = (uint8_t**)vv;
|
||||
uint8_t *p;
|
||||
int d, l;
|
||||
size_t i;
|
||||
|
|
@ -61,13 +61,13 @@ void raid_gen1_int64(int nd, size_t size, void **vv)
|
|||
|
||||
for (i = 0; i < size; i += 16) {
|
||||
p0 = v_64(v[l][i]);
|
||||
p1 = v_64(v[l][i+8]);
|
||||
for (d = l-1; d >= 0; --d) {
|
||||
p1 = v_64(v[l][i + 8]);
|
||||
for (d = l - 1; d >= 0; --d) {
|
||||
p0 ^= v_64(v[d][i]);
|
||||
p1 ^= v_64(v[d][i+8]);
|
||||
p1 ^= v_64(v[d][i + 8]);
|
||||
}
|
||||
v_64(p[i]) = p0;
|
||||
v_64(p[i+8]) = p1;
|
||||
v_64(p[i + 8]) = p1;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -76,7 +76,7 @@ void raid_gen1_int64(int nd, size_t size, void **vv)
|
|||
*/
|
||||
void raid_gen2_int32(int nd, size_t size, void **vv)
|
||||
{
|
||||
uint8_t **v = (uint8_t **)vv;
|
||||
uint8_t **v = (uint8_t**)vv;
|
||||
uint8_t *p;
|
||||
uint8_t *q;
|
||||
int d, l;
|
||||
|
|
@ -87,14 +87,14 @@ void raid_gen2_int32(int nd, size_t size, void **vv)
|
|||
|
||||
l = nd - 1;
|
||||
p = v[nd];
|
||||
q = v[nd+1];
|
||||
q = v[nd + 1];
|
||||
|
||||
for (i = 0; i < size; i += 8) {
|
||||
q0 = p0 = v_32(v[l][i]);
|
||||
q1 = p1 = v_32(v[l][i+4]);
|
||||
for (d = l-1; d >= 0; --d) {
|
||||
q1 = p1 = v_32(v[l][i + 4]);
|
||||
for (d = l - 1; d >= 0; --d) {
|
||||
d0 = v_32(v[d][i]);
|
||||
d1 = v_32(v[d][i+4]);
|
||||
d1 = v_32(v[d][i + 4]);
|
||||
|
||||
p0 ^= d0;
|
||||
p1 ^= d1;
|
||||
|
|
@ -106,9 +106,9 @@ void raid_gen2_int32(int nd, size_t size, void **vv)
|
|||
q1 ^= d1;
|
||||
}
|
||||
v_32(p[i]) = p0;
|
||||
v_32(p[i+4]) = p1;
|
||||
v_32(p[i + 4]) = p1;
|
||||
v_32(q[i]) = q0;
|
||||
v_32(q[i+4]) = q1;
|
||||
v_32(q[i + 4]) = q1;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -117,7 +117,7 @@ void raid_gen2_int32(int nd, size_t size, void **vv)
|
|||
*/
|
||||
void raid_gen2_int64(int nd, size_t size, void **vv)
|
||||
{
|
||||
uint8_t **v = (uint8_t **)vv;
|
||||
uint8_t **v = (uint8_t**)vv;
|
||||
uint8_t *p;
|
||||
uint8_t *q;
|
||||
int d, l;
|
||||
|
|
@ -128,14 +128,14 @@ void raid_gen2_int64(int nd, size_t size, void **vv)
|
|||
|
||||
l = nd - 1;
|
||||
p = v[nd];
|
||||
q = v[nd+1];
|
||||
q = v[nd + 1];
|
||||
|
||||
for (i = 0; i < size; i += 16) {
|
||||
q0 = p0 = v_64(v[l][i]);
|
||||
q1 = p1 = v_64(v[l][i+8]);
|
||||
for (d = l-1; d >= 0; --d) {
|
||||
q1 = p1 = v_64(v[l][i + 8]);
|
||||
for (d = l - 1; d >= 0; --d) {
|
||||
d0 = v_64(v[d][i]);
|
||||
d1 = v_64(v[d][i+8]);
|
||||
d1 = v_64(v[d][i + 8]);
|
||||
|
||||
p0 ^= d0;
|
||||
p1 ^= d1;
|
||||
|
|
@ -147,9 +147,9 @@ void raid_gen2_int64(int nd, size_t size, void **vv)
|
|||
q1 ^= d1;
|
||||
}
|
||||
v_64(p[i]) = p0;
|
||||
v_64(p[i+8]) = p1;
|
||||
v_64(p[i + 8]) = p1;
|
||||
v_64(q[i]) = q0;
|
||||
v_64(q[i+8]) = q1;
|
||||
v_64(q[i + 8]) = q1;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -163,7 +163,7 @@ void raid_gen2_int64(int nd, size_t size, void **vv)
|
|||
*/
|
||||
void raid_gen3_int8(int nd, size_t size, void **vv)
|
||||
{
|
||||
uint8_t **v = (uint8_t **)vv;
|
||||
uint8_t **v = (uint8_t**)vv;
|
||||
uint8_t *p;
|
||||
uint8_t *q;
|
||||
uint8_t *r;
|
||||
|
|
@ -174,8 +174,8 @@ void raid_gen3_int8(int nd, size_t size, void **vv)
|
|||
|
||||
l = nd - 1;
|
||||
p = v[nd];
|
||||
q = v[nd+1];
|
||||
r = v[nd+2];
|
||||
q = v[nd + 1];
|
||||
r = v[nd + 2];
|
||||
|
||||
for (i = 0; i < size; i += 1) {
|
||||
p0 = q0 = r0 = 0;
|
||||
|
|
@ -210,7 +210,7 @@ void raid_gen3_int8(int nd, size_t size, void **vv)
|
|||
*/
|
||||
void raid_gen4_int8(int nd, size_t size, void **vv)
|
||||
{
|
||||
uint8_t **v = (uint8_t **)vv;
|
||||
uint8_t **v = (uint8_t**)vv;
|
||||
uint8_t *p;
|
||||
uint8_t *q;
|
||||
uint8_t *r;
|
||||
|
|
@ -222,9 +222,9 @@ void raid_gen4_int8(int nd, size_t size, void **vv)
|
|||
|
||||
l = nd - 1;
|
||||
p = v[nd];
|
||||
q = v[nd+1];
|
||||
r = v[nd+2];
|
||||
s = v[nd+3];
|
||||
q = v[nd + 1];
|
||||
r = v[nd + 2];
|
||||
s = v[nd + 3];
|
||||
|
||||
for (i = 0; i < size; i += 1) {
|
||||
p0 = q0 = r0 = s0 = 0;
|
||||
|
|
@ -262,7 +262,7 @@ void raid_gen4_int8(int nd, size_t size, void **vv)
|
|||
*/
|
||||
void raid_gen5_int8(int nd, size_t size, void **vv)
|
||||
{
|
||||
uint8_t **v = (uint8_t **)vv;
|
||||
uint8_t **v = (uint8_t**)vv;
|
||||
uint8_t *p;
|
||||
uint8_t *q;
|
||||
uint8_t *r;
|
||||
|
|
@ -275,10 +275,10 @@ void raid_gen5_int8(int nd, size_t size, void **vv)
|
|||
|
||||
l = nd - 1;
|
||||
p = v[nd];
|
||||
q = v[nd+1];
|
||||
r = v[nd+2];
|
||||
s = v[nd+3];
|
||||
t = v[nd+4];
|
||||
q = v[nd + 1];
|
||||
r = v[nd + 2];
|
||||
s = v[nd + 3];
|
||||
t = v[nd + 4];
|
||||
|
||||
for (i = 0; i < size; i += 1) {
|
||||
p0 = q0 = r0 = s0 = t0 = 0;
|
||||
|
|
@ -319,7 +319,7 @@ void raid_gen5_int8(int nd, size_t size, void **vv)
|
|||
*/
|
||||
void raid_gen6_int8(int nd, size_t size, void **vv)
|
||||
{
|
||||
uint8_t **v = (uint8_t **)vv;
|
||||
uint8_t **v = (uint8_t**)vv;
|
||||
uint8_t *p;
|
||||
uint8_t *q;
|
||||
uint8_t *r;
|
||||
|
|
@ -333,11 +333,11 @@ void raid_gen6_int8(int nd, size_t size, void **vv)
|
|||
|
||||
l = nd - 1;
|
||||
p = v[nd];
|
||||
q = v[nd+1];
|
||||
r = v[nd+2];
|
||||
s = v[nd+3];
|
||||
t = v[nd+4];
|
||||
u = v[nd+5];
|
||||
q = v[nd + 1];
|
||||
r = v[nd + 2];
|
||||
s = v[nd + 3];
|
||||
t = v[nd + 4];
|
||||
u = v[nd + 5];
|
||||
|
||||
for (i = 0; i < size; i += 1) {
|
||||
p0 = q0 = r0 = s0 = t0 = u0 = 0;
|
||||
|
|
@ -385,7 +385,7 @@ void raid_gen6_int8(int nd, size_t size, void **vv)
|
|||
*/
|
||||
void raid_rec1_int8(int nr, int *id, int *ip, int nd, size_t size, void **vv)
|
||||
{
|
||||
uint8_t **v = (uint8_t **)vv;
|
||||
uint8_t **v = (uint8_t**)vv;
|
||||
uint8_t *p;
|
||||
uint8_t *pa;
|
||||
const uint8_t *T;
|
||||
|
|
@ -413,7 +413,7 @@ void raid_rec1_int8(int nr, int *id, int *ip, int nd, size_t size, void **vv)
|
|||
/* compute delta parity */
|
||||
raid_delta_gen(1, id, ip, nd, size, vv);
|
||||
|
||||
p = v[nd+ip[0]];
|
||||
p = v[nd + ip[0]];
|
||||
pa = v[id[0]];
|
||||
|
||||
for (i = 0; i < size; ++i) {
|
||||
|
|
@ -438,15 +438,15 @@ void raid_rec1_int8(int nr, int *id, int *ip, int nd, size_t size, void **vv)
|
|||
*/
|
||||
void raid_rec2_int8(int nr, int *id, int *ip, int nd, size_t size, void **vv)
|
||||
{
|
||||
uint8_t **v = (uint8_t **)vv;
|
||||
uint8_t **v = (uint8_t**)vv;
|
||||
uint8_t *p;
|
||||
uint8_t *pa;
|
||||
uint8_t *q;
|
||||
uint8_t *qa;
|
||||
const int N = 2;
|
||||
const uint8_t *T[N][N];
|
||||
uint8_t G[N*N];
|
||||
uint8_t V[N*N];
|
||||
uint8_t G[N * N];
|
||||
uint8_t V[N * N];
|
||||
size_t i;
|
||||
int j, k;
|
||||
|
||||
|
|
@ -461,7 +461,7 @@ void raid_rec2_int8(int nr, int *id, int *ip, int nd, size_t size, void **vv)
|
|||
/* setup the coefficients matrix */
|
||||
for (j = 0; j < N; ++j)
|
||||
for (k = 0; k < N; ++k)
|
||||
G[j*N+k] = A(ip[j], id[k]);
|
||||
G[j * N + k] = A(ip[j], id[k]);
|
||||
|
||||
/* invert it to solve the system of linear equations */
|
||||
raid_invert(G, V, N);
|
||||
|
|
@ -469,13 +469,13 @@ void raid_rec2_int8(int nr, int *id, int *ip, int nd, size_t size, void **vv)
|
|||
/* get multiplication tables */
|
||||
for (j = 0; j < N; ++j)
|
||||
for (k = 0; k < N; ++k)
|
||||
T[j][k] = table(V[j*N+k]);
|
||||
T[j][k] = table(V[j * N + k]);
|
||||
|
||||
/* compute delta parity */
|
||||
raid_delta_gen(2, id, ip, nd, size, vv);
|
||||
|
||||
p = v[nd+ip[0]];
|
||||
q = v[nd+ip[1]];
|
||||
p = v[nd + ip[0]];
|
||||
q = v[nd + ip[1]];
|
||||
pa = v[id[0]];
|
||||
qa = v[id[1]];
|
||||
|
||||
|
|
@ -506,19 +506,19 @@ void raid_rec2_int8(int nr, int *id, int *ip, int nd, size_t size, void **vv)
|
|||
*/
|
||||
void raid_recX_int8(int nr, int *id, int *ip, int nd, size_t size, void **vv)
|
||||
{
|
||||
uint8_t **v = (uint8_t **)vv;
|
||||
uint8_t **v = (uint8_t**)vv;
|
||||
uint8_t *p[RAID_PARITY_MAX];
|
||||
uint8_t *pa[RAID_PARITY_MAX];
|
||||
const uint8_t *T[RAID_PARITY_MAX][RAID_PARITY_MAX];
|
||||
uint8_t G[RAID_PARITY_MAX*RAID_PARITY_MAX];
|
||||
uint8_t V[RAID_PARITY_MAX*RAID_PARITY_MAX];
|
||||
uint8_t G[RAID_PARITY_MAX * RAID_PARITY_MAX];
|
||||
uint8_t V[RAID_PARITY_MAX * RAID_PARITY_MAX];
|
||||
size_t i;
|
||||
int j, k;
|
||||
|
||||
/* setup the coefficients matrix */
|
||||
for (j = 0; j < nr; ++j)
|
||||
for (k = 0; k < nr; ++k)
|
||||
G[j*nr+k] = A(ip[j], id[k]);
|
||||
G[j * nr + k] = A(ip[j], id[k]);
|
||||
|
||||
/* invert it to solve the system of linear equations */
|
||||
raid_invert(G, V, nr);
|
||||
|
|
@ -526,13 +526,13 @@ void raid_recX_int8(int nr, int *id, int *ip, int nd, size_t size, void **vv)
|
|||
/* get multiplication tables */
|
||||
for (j = 0; j < nr; ++j)
|
||||
for (k = 0; k < nr; ++k)
|
||||
T[j][k] = table(V[j*nr+k]);
|
||||
T[j][k] = table(V[j * nr + k]);
|
||||
|
||||
/* compute delta parity */
|
||||
raid_delta_gen(nr, id, ip, nd, size, vv);
|
||||
|
||||
for (j = 0; j < nr; ++j) {
|
||||
p[j] = v[nd+ip[j]];
|
||||
p[j] = v[nd + ip[j]];
|
||||
pa[j] = v[id[j]];
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -202,7 +202,7 @@ static __always_inline void raid_asm_end(void)
|
|||
/* see correctly the data written, we use a store-store memory */
|
||||
/* barrier at the end of the asm code */
|
||||
#ifdef CONFIG_SSE2
|
||||
asm volatile("sfence" : : : "memory");
|
||||
asm volatile ("sfence" : : : "memory");
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
@ -216,7 +216,7 @@ static __always_inline void raid_asm_clobber_xmm4(void)
|
|||
/* we check for __SSE2_ because we require that the */
|
||||
/* compiler supports SSE2 registers in the clobber list */
|
||||
#if defined(CONFIG_SSE2) && defined(__SSE2__)
|
||||
asm volatile("" : : : "%xmm0", "%xmm1", "%xmm2", "%xmm3");
|
||||
asm volatile ("" : : : "%xmm0", "%xmm1", "%xmm2", "%xmm3");
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
@ -224,7 +224,7 @@ static __always_inline void raid_asm_clobber_xmm8(void)
|
|||
{
|
||||
raid_asm_clobber_xmm4();
|
||||
#if defined(CONFIG_SSE2) && defined(__SSE2__)
|
||||
asm volatile("" : : : "%xmm4", "%xmm5", "%xmm6", "%xmm7");
|
||||
asm volatile ("" : : : "%xmm4", "%xmm5", "%xmm6", "%xmm7");
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
@ -235,7 +235,7 @@ static __always_inline void raid_asm_clobber_ymm4(void)
|
|||
/* to avoid the 70 clocks penality on the next */
|
||||
/* xmm register use */
|
||||
#ifdef CONFIG_AVX2
|
||||
asm volatile("vzeroupper" : : : "memory");
|
||||
asm volatile ("vzeroupper" : : : "memory");
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
@ -243,7 +243,7 @@ static __always_inline void raid_asm_clobber_ymm8(void)
|
|||
{
|
||||
raid_asm_clobber_xmm8();
|
||||
#ifdef CONFIG_AVX2
|
||||
asm volatile("vzeroupper" : : : "memory");
|
||||
asm volatile ("vzeroupper" : : : "memory");
|
||||
#endif
|
||||
}
|
||||
#endif /* CONFIG_X86 */
|
||||
|
|
@ -253,8 +253,8 @@ static __always_inline void raid_asm_clobber_xmm16(void)
|
|||
{
|
||||
raid_asm_clobber_xmm8();
|
||||
#if defined(CONFIG_SSE2) && defined(__SSE2__)
|
||||
asm volatile("" : : : "%xmm8", "%xmm9", "%xmm10", "%xmm11");
|
||||
asm volatile("" : : : "%xmm12", "%xmm13", "%xmm14", "%xmm15");
|
||||
asm volatile ("" : : : "%xmm8", "%xmm9", "%xmm10", "%xmm11");
|
||||
asm volatile ("" : : : "%xmm12", "%xmm13", "%xmm14", "%xmm15");
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
@ -262,7 +262,7 @@ static __always_inline void raid_asm_clobber_ymm16(void)
|
|||
{
|
||||
raid_asm_clobber_xmm16();
|
||||
#ifdef CONFIG_AVX2
|
||||
asm volatile("vzeroupper" : : : "memory");
|
||||
asm volatile ("vzeroupper" : : : "memory");
|
||||
#endif
|
||||
}
|
||||
#endif /* CONFIG_X86_64 */
|
||||
|
|
|
|||
36
raid/intz.c
36
raid/intz.c
|
|
@ -20,7 +20,7 @@
|
|||
*/
|
||||
void raid_genz_int32(int nd, size_t size, void **vv)
|
||||
{
|
||||
uint8_t **v = (uint8_t **)vv;
|
||||
uint8_t **v = (uint8_t**)vv;
|
||||
uint8_t *p;
|
||||
uint8_t *q;
|
||||
uint8_t *r;
|
||||
|
|
@ -32,15 +32,15 @@ void raid_genz_int32(int nd, size_t size, void **vv)
|
|||
|
||||
l = nd - 1;
|
||||
p = v[nd];
|
||||
q = v[nd+1];
|
||||
r = v[nd+2];
|
||||
q = v[nd + 1];
|
||||
r = v[nd + 2];
|
||||
|
||||
for (i = 0; i < size; i += 8) {
|
||||
r0 = q0 = p0 = v_32(v[l][i]);
|
||||
r1 = q1 = p1 = v_32(v[l][i+4]);
|
||||
for (d = l-1; d >= 0; --d) {
|
||||
r1 = q1 = p1 = v_32(v[l][i + 4]);
|
||||
for (d = l - 1; d >= 0; --d) {
|
||||
d0 = v_32(v[d][i]);
|
||||
d1 = v_32(v[d][i+4]);
|
||||
d1 = v_32(v[d][i + 4]);
|
||||
|
||||
p0 ^= d0;
|
||||
p1 ^= d1;
|
||||
|
|
@ -58,11 +58,11 @@ void raid_genz_int32(int nd, size_t size, void **vv)
|
|||
r1 ^= d1;
|
||||
}
|
||||
v_32(p[i]) = p0;
|
||||
v_32(p[i+4]) = p1;
|
||||
v_32(p[i + 4]) = p1;
|
||||
v_32(q[i]) = q0;
|
||||
v_32(q[i+4]) = q1;
|
||||
v_32(q[i + 4]) = q1;
|
||||
v_32(r[i]) = r0;
|
||||
v_32(r[i+4]) = r1;
|
||||
v_32(r[i + 4]) = r1;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -71,7 +71,7 @@ void raid_genz_int32(int nd, size_t size, void **vv)
|
|||
*/
|
||||
void raid_genz_int64(int nd, size_t size, void **vv)
|
||||
{
|
||||
uint8_t **v = (uint8_t **)vv;
|
||||
uint8_t **v = (uint8_t**)vv;
|
||||
uint8_t *p;
|
||||
uint8_t *q;
|
||||
uint8_t *r;
|
||||
|
|
@ -83,15 +83,15 @@ void raid_genz_int64(int nd, size_t size, void **vv)
|
|||
|
||||
l = nd - 1;
|
||||
p = v[nd];
|
||||
q = v[nd+1];
|
||||
r = v[nd+2];
|
||||
q = v[nd + 1];
|
||||
r = v[nd + 2];
|
||||
|
||||
for (i = 0; i < size; i += 16) {
|
||||
r0 = q0 = p0 = v_64(v[l][i]);
|
||||
r1 = q1 = p1 = v_64(v[l][i+8]);
|
||||
for (d = l-1; d >= 0; --d) {
|
||||
r1 = q1 = p1 = v_64(v[l][i + 8]);
|
||||
for (d = l - 1; d >= 0; --d) {
|
||||
d0 = v_64(v[d][i]);
|
||||
d1 = v_64(v[d][i+8]);
|
||||
d1 = v_64(v[d][i + 8]);
|
||||
|
||||
p0 ^= d0;
|
||||
p1 ^= d1;
|
||||
|
|
@ -109,11 +109,11 @@ void raid_genz_int64(int nd, size_t size, void **vv)
|
|||
r1 ^= d1;
|
||||
}
|
||||
v_64(p[i]) = p0;
|
||||
v_64(p[i+8]) = p1;
|
||||
v_64(p[i + 8]) = p1;
|
||||
v_64(q[i]) = q0;
|
||||
v_64(q[i+8]) = q1;
|
||||
v_64(q[i + 8]) = q1;
|
||||
v_64(r[i]) = r0;
|
||||
v_64(r[i+8]) = r1;
|
||||
v_64(r[i + 8]) = r1;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -59,7 +59,7 @@ void **raid_malloc_vector(int nd, int n, size_t size, void **freeptr)
|
|||
|
||||
/* reverse order of the data blocks */
|
||||
/* because they are usually accessed from the last one */
|
||||
for (i = 0; i < nd/2; ++i) {
|
||||
for (i = 0; i < nd / 2; ++i) {
|
||||
void *ptr = v[i];
|
||||
v[i] = v[nd - 1 - i];
|
||||
v[nd - 1 - i] = ptr;
|
||||
|
|
@ -70,7 +70,7 @@ void **raid_malloc_vector(int nd, int n, size_t size, void **freeptr)
|
|||
|
||||
void raid_mrand_vector(int n, size_t size, void **vv)
|
||||
{
|
||||
unsigned char **v = (unsigned char **)vv;
|
||||
unsigned char **v = (unsigned char**)vv;
|
||||
int i;
|
||||
size_t j;
|
||||
|
||||
|
|
@ -81,7 +81,7 @@ void raid_mrand_vector(int n, size_t size, void **vv)
|
|||
|
||||
int raid_mtest_vector(int n, size_t size, void **vv)
|
||||
{
|
||||
unsigned char **v = (unsigned char **)vv;
|
||||
unsigned char **v = (unsigned char**)vv;
|
||||
int i;
|
||||
size_t j;
|
||||
unsigned k;
|
||||
|
|
@ -113,9 +113,9 @@ int raid_mtest_vector(int n, size_t size, void **vv)
|
|||
/* backward fill with complement */
|
||||
for (i = 0; i < n; ++i) {
|
||||
for (j = size; j > 0; --j) {
|
||||
if (v[i][j-1] != p)
|
||||
if (v[i][j - 1] != p)
|
||||
return -1;
|
||||
v[i][j-1] = d;
|
||||
v[i][j - 1] = d;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ static uint8_t gfmul(uint8_t a, uint8_t b)
|
|||
uint8_t v;
|
||||
|
||||
v = 0;
|
||||
while (b) {
|
||||
while (b) {
|
||||
if ((b & 1) != 0)
|
||||
v ^= a;
|
||||
|
||||
|
|
@ -55,7 +55,7 @@ uint8_t gfinv[256];
|
|||
* Number of disks.
|
||||
* This is the number of columns of the generator matrix.
|
||||
*/
|
||||
#define DISK (257-PARITY)
|
||||
#define DISK (257 - PARITY)
|
||||
|
||||
/**
|
||||
* Setup the Cauchy matrix used to generate the parity.
|
||||
|
|
@ -82,7 +82,7 @@ static void set_cauchy(uint8_t *matrix)
|
|||
* - - - - - -
|
||||
*/
|
||||
for (i = 0; i < DISK; ++i)
|
||||
matrix[0*DISK+i] = 1;
|
||||
matrix[0 * DISK + i] = 1;
|
||||
|
||||
/*
|
||||
* Second row is formed with powers 2^i, and it's the first
|
||||
|
|
@ -117,7 +117,7 @@ static void set_cauchy(uint8_t *matrix)
|
|||
*/
|
||||
inv_x = 1;
|
||||
for (i = 0; i < DISK; ++i) {
|
||||
matrix[1*DISK+i] = inv_x;
|
||||
matrix[1 * DISK + i] = inv_x;
|
||||
inv_x = gfmul(2, inv_x);
|
||||
}
|
||||
|
||||
|
|
@ -143,11 +143,11 @@ static void set_cauchy(uint8_t *matrix)
|
|||
* 167 39 213 59 153 82
|
||||
*/
|
||||
y = 2;
|
||||
for (j = 0; j < PARITY-2; ++j) {
|
||||
for (j = 0; j < PARITY - 2; ++j) {
|
||||
inv_x = 1;
|
||||
for (i = 0; i < DISK; ++i) {
|
||||
uint8_t x = gfinv[inv_x];
|
||||
matrix[(j+2)*DISK+i] = gfinv[y ^ x];
|
||||
matrix[(j + 2) * DISK + i] = gfinv[y ^ x];
|
||||
inv_x = gfmul(2, inv_x);
|
||||
}
|
||||
|
||||
|
|
@ -167,11 +167,11 @@ static void set_cauchy(uint8_t *matrix)
|
|||
* 1 245 210 196 154 113
|
||||
* 1 187 166 215 7 106
|
||||
*/
|
||||
for (j = 0; j < PARITY-2; ++j) {
|
||||
uint8_t f = gfinv[matrix[(j+2)*DISK]];
|
||||
for (j = 0; j < PARITY - 2; ++j) {
|
||||
uint8_t f = gfinv[matrix[(j + 2) * DISK]];
|
||||
|
||||
for (i = 0; i < DISK; ++i)
|
||||
matrix[(j+2)*DISK+i] = gfmul(matrix[(j+2)*DISK+i], f);
|
||||
matrix[(j + 2) * DISK + i] = gfmul(matrix[(j + 2) * DISK + i], f);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -185,17 +185,17 @@ static void set_power(uint8_t *matrix)
|
|||
|
||||
v = 1;
|
||||
for (i = 0; i < DISK; ++i)
|
||||
matrix[0*DISK+i] = v;
|
||||
matrix[0 * DISK + i] = v;
|
||||
|
||||
v = 1;
|
||||
for (i = 0; i < DISK; ++i) {
|
||||
matrix[1*DISK+i] = v;
|
||||
matrix[1 * DISK + i] = v;
|
||||
v = gfmul(2, v);
|
||||
}
|
||||
|
||||
v = 1;
|
||||
for (i = 0; i < DISK; ++i) {
|
||||
matrix[2*DISK+i] = v;
|
||||
matrix[2 * DISK + i] = v;
|
||||
v = gfmul(0x8e, v);
|
||||
}
|
||||
}
|
||||
|
|
@ -306,7 +306,7 @@ int main(void)
|
|||
for (p = 0; p < 3; ++p) {
|
||||
printf(" * ");
|
||||
for (i = 0; i < DISK; ++i)
|
||||
printf("%02x ", matrix[p*DISK+i]);
|
||||
printf("%02x ", matrix[p * DISK + i]);
|
||||
printf("\n");
|
||||
}
|
||||
printf(" */\n");
|
||||
|
|
@ -317,7 +317,7 @@ int main(void)
|
|||
for (i = 0; i < DISK; ++i) {
|
||||
if (i % 8 == 0)
|
||||
printf("\t\t");
|
||||
printf("0x%02x,", matrix[p*DISK+i]);
|
||||
printf("0x%02x,", matrix[p * DISK + i]);
|
||||
if (i % 8 == 7)
|
||||
printf("\n");
|
||||
else
|
||||
|
|
@ -337,7 +337,7 @@ int main(void)
|
|||
for (p = 0; p < PARITY; ++p) {
|
||||
printf(" * ");
|
||||
for (i = 0; i < DISK; ++i)
|
||||
printf("%02x ", matrix[p*DISK+i]);
|
||||
printf("%02x ", matrix[p * DISK + i]);
|
||||
printf("\n");
|
||||
}
|
||||
printf(" */\n");
|
||||
|
|
@ -348,7 +348,7 @@ int main(void)
|
|||
for (i = 0; i < DISK; ++i) {
|
||||
if (i % 8 == 0)
|
||||
printf("\t\t");
|
||||
printf("0x%02x,", matrix[p*DISK+i]);
|
||||
printf("0x%02x,", matrix[p * DISK + i]);
|
||||
if (i % 8 == 7)
|
||||
printf("\n");
|
||||
else
|
||||
|
|
@ -374,7 +374,7 @@ int main(void)
|
|||
for (j = 0; j < 2; ++j) {
|
||||
printf("\t\t\t{ ");
|
||||
for (k = 0; k < 16; ++k) {
|
||||
v = gfmul(matrix[p*DISK+i], k);
|
||||
v = gfmul(matrix[p * DISK + i], k);
|
||||
if (j == 1)
|
||||
v = gfmul(v, 16);
|
||||
printf("0x%02x", (unsigned)v);
|
||||
|
|
|
|||
|
|
@ -114,7 +114,7 @@ void raid_init(void)
|
|||
*/
|
||||
void raid_gen_ref(int nd, int np, size_t size, void **vv)
|
||||
{
|
||||
uint8_t **v = (uint8_t **)vv;
|
||||
uint8_t **v = (uint8_t**)vv;
|
||||
size_t i;
|
||||
|
||||
for (i = 0; i < size; ++i) {
|
||||
|
|
@ -160,13 +160,13 @@ static int raid_test_par(int nd, int np, size_t size, void **v, void **ref)
|
|||
|
||||
/* setup parity */
|
||||
for (i = 0; i < np; ++i)
|
||||
t[nd+i] = v[nd+i];
|
||||
t[nd + i] = v[nd + i];
|
||||
|
||||
raid_gen(nd, np, size, t);
|
||||
|
||||
/* compare parity */
|
||||
for (i = 0; i < np; ++i)
|
||||
if (memcmp(t[nd+i], ref[nd+i], size) != 0)
|
||||
if (memcmp(t[nd + i], ref[nd + i], size) != 0)
|
||||
return -1;
|
||||
|
||||
return 0;
|
||||
|
|
@ -181,7 +181,7 @@ static int raid_test_rec(int nr, int *ir, int nd, int np, size_t size, void **v,
|
|||
void *t[TEST_COUNT + RAID_PARITY_MAX];
|
||||
|
||||
/* setup vector */
|
||||
for (i = 0, j = 0; i < nd+np; ++i) {
|
||||
for (i = 0, j = 0; i < nd + np; ++i) {
|
||||
if (j < nr && ir[j] == i) {
|
||||
/* this block has to be recovered */
|
||||
t[i] = v[i];
|
||||
|
|
@ -195,7 +195,7 @@ static int raid_test_rec(int nr, int *ir, int nd, int np, size_t size, void **v,
|
|||
raid_rec(nr, ir, nd, np, size, t);
|
||||
|
||||
/* compare all data and parity */
|
||||
for (i = 0; i < nd+np; ++i) {
|
||||
for (i = 0; i < nd + np; ++i) {
|
||||
if (t[i] != ref[i] && memcmp(t[i], ref[i], size) != 0) {
|
||||
return -1;
|
||||
}
|
||||
|
|
@ -226,16 +226,16 @@ int raid_selftest(void)
|
|||
if (!v)
|
||||
return -1;
|
||||
|
||||
memset(v[nv-1], 0, size);
|
||||
raid_zero(v[nv-1]);
|
||||
memset(v[nv - 1], 0, size);
|
||||
raid_zero(v[nv - 1]);
|
||||
|
||||
/* use the multiplication table as data */
|
||||
for (i = 0; i < nd; ++i)
|
||||
ref[i] = ((uint8_t *)gfmul) + size * i;
|
||||
ref[i] = ((uint8_t*)gfmul) + size * i;
|
||||
|
||||
/* setup reference parity */
|
||||
for (i = 0; i < RAID_PARITY_MAX; ++i)
|
||||
ref[nd+i] = v[nd+RAID_PARITY_MAX+i];
|
||||
ref[nd + i] = v[nd + RAID_PARITY_MAX + i];
|
||||
|
||||
/* compute reference parity */
|
||||
raid_gen_ref(nd, RAID_PARITY_MAX, size, ref);
|
||||
|
|
@ -285,4 +285,3 @@ bail:
|
|||
return ret;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
24
raid/raid.c
24
raid/raid.c
|
|
@ -171,7 +171,7 @@
|
|||
/**
|
||||
* Generator matrix currently used.
|
||||
*/
|
||||
const uint8_t (*raid_gfgen)[256];
|
||||
const uint8_t(*raid_gfgen)[256];
|
||||
|
||||
void raid_mode(int mode)
|
||||
{
|
||||
|
|
@ -239,7 +239,7 @@ void raid_invert(uint8_t *M, uint8_t *V, int n)
|
|||
/* set the identity matrix in V */
|
||||
for (i = 0; i < n; ++i)
|
||||
for (j = 0; j < n; ++j)
|
||||
V[i*n+j] = i == j;
|
||||
V[i * n + j] = i == j;
|
||||
|
||||
/* for each element in the diagonal */
|
||||
for (k = 0; k < n; ++k) {
|
||||
|
|
@ -248,13 +248,13 @@ void raid_invert(uint8_t *M, uint8_t *V, int n)
|
|||
/* the diagonal element cannot be 0 because */
|
||||
/* we are inverting matrices with all the square */
|
||||
/* submatrices not singular */
|
||||
BUG_ON(M[k*n+k] == 0);
|
||||
BUG_ON(M[k * n + k] == 0);
|
||||
|
||||
/* make the diagonal element to be 1 */
|
||||
f = inv(M[k*n+k]);
|
||||
f = inv(M[k * n + k]);
|
||||
for (j = 0; j < n; ++j) {
|
||||
M[k*n+j] = mul(f, M[k*n+j]);
|
||||
V[k*n+j] = mul(f, V[k*n+j]);
|
||||
M[k * n + j] = mul(f, M[k * n + j]);
|
||||
V[k * n + j] = mul(f, V[k * n + j]);
|
||||
}
|
||||
|
||||
/* make all the elements over and under the diagonal */
|
||||
|
|
@ -262,10 +262,10 @@ void raid_invert(uint8_t *M, uint8_t *V, int n)
|
|||
for (i = 0; i < n; ++i) {
|
||||
if (i == k)
|
||||
continue;
|
||||
f = M[i*n+k];
|
||||
f = M[i * n + k];
|
||||
for (j = 0; j < n; ++j) {
|
||||
M[i*n+j] ^= mul(f, M[k*n+j]);
|
||||
V[i*n+j] ^= mul(f, V[k*n+j]);
|
||||
M[i * n + j] ^= mul(f, M[k * n + j]);
|
||||
V[i * n + j] ^= mul(f, V[k * n + j]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -420,7 +420,7 @@ void raid_rec1of1(int *id, int nd, size_t size, void **v)
|
|||
*/
|
||||
void raid_rec2of2_int8(int *id, int *ip, int nd, size_t size, void **vv)
|
||||
{
|
||||
uint8_t **v = (uint8_t **)vv;
|
||||
uint8_t **v = (uint8_t**)vv;
|
||||
size_t i;
|
||||
uint8_t *p;
|
||||
uint8_t *pa;
|
||||
|
|
@ -429,14 +429,14 @@ void raid_rec2of2_int8(int *id, int *ip, int nd, size_t size, void **vv)
|
|||
const uint8_t *T[2];
|
||||
|
||||
/* get multiplication tables */
|
||||
T[0] = table(inv(pow2(id[1]-id[0]) ^ 1));
|
||||
T[0] = table(inv(pow2(id[1] - id[0]) ^ 1));
|
||||
T[1] = table(inv(pow2(id[0]) ^ pow2(id[1])));
|
||||
|
||||
/* compute delta parity */
|
||||
raid_delta_gen(2, id, ip, nd, size, vv);
|
||||
|
||||
p = v[nd];
|
||||
q = v[nd+1];
|
||||
q = v[nd + 1];
|
||||
pa = v[id[0]];
|
||||
qa = v[id[1]];
|
||||
|
||||
|
|
|
|||
|
|
@ -8799,9 +8799,9 @@ const uint8_t __aligned(256) raid_gfinv[256] =
|
|||
* Power matrix used to generate parity.
|
||||
* This matrix is valid for up to 3 parity with 251 data disks.
|
||||
*
|
||||
* 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
|
||||
* 01 02 04 08 10 20 40 80 1d 3a 74 e8 cd 87 13 26 4c 98 2d 5a b4 75 ea c9 8f 03 06 0c 18 30 60 c0 9d 27 4e 9c 25 4a 94 35 6a d4 b5 77 ee c1 9f 23 46 8c 05 0a 14 28 50 a0 5d ba 69 d2 b9 6f de a1 5f be 61 c2 99 2f 5e bc 65 ca 89 0f 1e 3c 78 f0 fd e7 d3 bb 6b d6 b1 7f fe e1 df a3 5b b6 71 e2 d9 af 43 86 11 22 44 88 0d 1a 34 68 d0 bd 67 ce 81 1f 3e 7c f8 ed c7 93 3b 76 ec c5 97 33 66 cc 85 17 2e 5c b8 6d da a9 4f 9e 21 42 84 15 2a 54 a8 4d 9a 29 52 a4 55 aa 49 92 39 72 e4 d5 b7 73 e6 d1 bf 63 c6 91 3f 7e fc e5 d7 b3 7b f6 f1 ff e3 db ab 4b 96 31 62 c4 95 37 6e dc a5 57 ae 41 82 19 32 64 c8 8d 07 0e 1c 38 70 e0 dd a7 53 a6 51 a2 59 b2 79 f2 f9 ef c3 9b 2b 56 ac 45 8a 09 12 24 48 90 3d 7a f4 f5 f7 f3 fb eb cb 8b 0b 16 2c 58 b0 7d fa e9 cf 83 1b 36 6c
|
||||
* 01 8e 47 ad d8 6c 36 1b 83 cf e9 fa 7d b0 58 2c 16 0b 8b cb eb fb f3 f7 f5 f4 7a 3d 90 48 24 12 09 8a 45 ac 56 2b 9b c3 ef f9 f2 79 b2 59 a2 51 a6 53 a7 dd e0 70 38 1c 0e 07 8d c8 64 32 19 82 41 ae 57 a5 dc 6e 37 95 c4 62 31 96 4b ab db e3 ff f1 f6 7b b3 d7 e5 fc 7e 3f 91 c6 63 bf d1 e6 73 b7 d5 e4 72 39 92 49 aa 55 a4 52 29 9a 4d a8 54 2a 15 84 42 21 9e 4f a9 da 6d b8 5c 2e 17 85 cc 66 33 97 c5 ec 76 3b 93 c7 ed f8 7c 3e 1f 81 ce 67 bd d0 68 34 1a 0d 88 44 22 11 86 43 af d9 e2 71 b6 5b a3 df e1 fe 7f b1 d6 6b bb d3 e7 fd f0 78 3c 1e 0f 89 ca 65 bc 5e 2f 99 c2 61 be 5f a1 de 6f b9 d2 69 ba 5d a0 50 28 14 0a 05 8c 46 23 9f c1 ee 77 b5 d4 6a 35 94 4a 25 9c 4e 27 9d c0 60 30 18 0c 06 03 8f c9 ea 75 b4 5a 2d 98 4c 26 13 87 cd e8 74 3a 1d 80 40 20
|
||||
* 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
|
||||
* 01 02 04 08 10 20 40 80 1d 3a 74 e8 cd 87 13 26 4c 98 2d 5a b4 75 ea c9 8f 03 06 0c 18 30 60 c0 9d 27 4e 9c 25 4a 94 35 6a d4 b5 77 ee c1 9f 23 46 8c 05 0a 14 28 50 a0 5d ba 69 d2 b9 6f de a1 5f be 61 c2 99 2f 5e bc 65 ca 89 0f 1e 3c 78 f0 fd e7 d3 bb 6b d6 b1 7f fe e1 df a3 5b b6 71 e2 d9 af 43 86 11 22 44 88 0d 1a 34 68 d0 bd 67 ce 81 1f 3e 7c f8 ed c7 93 3b 76 ec c5 97 33 66 cc 85 17 2e 5c b8 6d da a9 4f 9e 21 42 84 15 2a 54 a8 4d 9a 29 52 a4 55 aa 49 92 39 72 e4 d5 b7 73 e6 d1 bf 63 c6 91 3f 7e fc e5 d7 b3 7b f6 f1 ff e3 db ab 4b 96 31 62 c4 95 37 6e dc a5 57 ae 41 82 19 32 64 c8 8d 07 0e 1c 38 70 e0 dd a7 53 a6 51 a2 59 b2 79 f2 f9 ef c3 9b 2b 56 ac 45 8a 09 12 24 48 90 3d 7a f4 f5 f7 f3 fb eb cb 8b 0b 16 2c 58 b0 7d fa e9 cf 83 1b 36 6c
|
||||
* 01 8e 47 ad d8 6c 36 1b 83 cf e9 fa 7d b0 58 2c 16 0b 8b cb eb fb f3 f7 f5 f4 7a 3d 90 48 24 12 09 8a 45 ac 56 2b 9b c3 ef f9 f2 79 b2 59 a2 51 a6 53 a7 dd e0 70 38 1c 0e 07 8d c8 64 32 19 82 41 ae 57 a5 dc 6e 37 95 c4 62 31 96 4b ab db e3 ff f1 f6 7b b3 d7 e5 fc 7e 3f 91 c6 63 bf d1 e6 73 b7 d5 e4 72 39 92 49 aa 55 a4 52 29 9a 4d a8 54 2a 15 84 42 21 9e 4f a9 da 6d b8 5c 2e 17 85 cc 66 33 97 c5 ec 76 3b 93 c7 ed f8 7c 3e 1f 81 ce 67 bd d0 68 34 1a 0d 88 44 22 11 86 43 af d9 e2 71 b6 5b a3 df e1 fe 7f b1 d6 6b bb d3 e7 fd f0 78 3c 1e 0f 89 ca 65 bc 5e 2f 99 c2 61 be 5f a1 de 6f b9 d2 69 ba 5d a0 50 28 14 0a 05 8c 46 23 9f c1 ee 77 b5 d4 6a 35 94 4a 25 9c 4e 27 9d c0 60 30 18 0c 06 03 8f c9 ea 75 b4 5a 2d 98 4c 26 13 87 cd e8 74 3a 1d 80 40 20
|
||||
*/
|
||||
const uint8_t __aligned(256) raid_gfvandermonde[3][256] =
|
||||
{
|
||||
|
|
@ -8837,7 +8837,7 @@ const uint8_t __aligned(256) raid_gfvandermonde[3][256] =
|
|||
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
|
||||
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
|
||||
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
|
||||
0x01, 0x01, 0x01,
|
||||
0x01, 0x01, 0x01,
|
||||
},
|
||||
{
|
||||
0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,
|
||||
|
|
@ -8871,7 +8871,7 @@ const uint8_t __aligned(256) raid_gfvandermonde[3][256] =
|
|||
0x12, 0x24, 0x48, 0x90, 0x3d, 0x7a, 0xf4, 0xf5,
|
||||
0xf7, 0xf3, 0xfb, 0xeb, 0xcb, 0x8b, 0x0b, 0x16,
|
||||
0x2c, 0x58, 0xb0, 0x7d, 0xfa, 0xe9, 0xcf, 0x83,
|
||||
0x1b, 0x36, 0x6c,
|
||||
0x1b, 0x36, 0x6c,
|
||||
},
|
||||
{
|
||||
0x01, 0x8e, 0x47, 0xad, 0xd8, 0x6c, 0x36, 0x1b,
|
||||
|
|
@ -8905,7 +8905,7 @@ const uint8_t __aligned(256) raid_gfvandermonde[3][256] =
|
|||
0xc0, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x03, 0x8f,
|
||||
0xc9, 0xea, 0x75, 0xb4, 0x5a, 0x2d, 0x98, 0x4c,
|
||||
0x26, 0x13, 0x87, 0xcd, 0xe8, 0x74, 0x3a, 0x1d,
|
||||
0x80, 0x40, 0x20,
|
||||
0x80, 0x40, 0x20,
|
||||
},
|
||||
};
|
||||
|
||||
|
|
@ -8913,12 +8913,12 @@ const uint8_t __aligned(256) raid_gfvandermonde[3][256] =
|
|||
* Cauchy matrix used to generate parity.
|
||||
* This matrix is valid for up to 6 parity with 251 data disks.
|
||||
*
|
||||
* 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
|
||||
* 01 02 04 08 10 20 40 80 1d 3a 74 e8 cd 87 13 26 4c 98 2d 5a b4 75 ea c9 8f 03 06 0c 18 30 60 c0 9d 27 4e 9c 25 4a 94 35 6a d4 b5 77 ee c1 9f 23 46 8c 05 0a 14 28 50 a0 5d ba 69 d2 b9 6f de a1 5f be 61 c2 99 2f 5e bc 65 ca 89 0f 1e 3c 78 f0 fd e7 d3 bb 6b d6 b1 7f fe e1 df a3 5b b6 71 e2 d9 af 43 86 11 22 44 88 0d 1a 34 68 d0 bd 67 ce 81 1f 3e 7c f8 ed c7 93 3b 76 ec c5 97 33 66 cc 85 17 2e 5c b8 6d da a9 4f 9e 21 42 84 15 2a 54 a8 4d 9a 29 52 a4 55 aa 49 92 39 72 e4 d5 b7 73 e6 d1 bf 63 c6 91 3f 7e fc e5 d7 b3 7b f6 f1 ff e3 db ab 4b 96 31 62 c4 95 37 6e dc a5 57 ae 41 82 19 32 64 c8 8d 07 0e 1c 38 70 e0 dd a7 53 a6 51 a2 59 b2 79 f2 f9 ef c3 9b 2b 56 ac 45 8a 09 12 24 48 90 3d 7a f4 f5 f7 f3 fb eb cb 8b 0b 16 2c 58 b0 7d fa e9 cf 83 1b 36 6c
|
||||
* 01 f5 d2 c4 9a 71 f1 7f fc 87 c1 c6 19 2f 40 55 3d ba 53 04 9c 61 34 8c 46 68 70 3e cc 7d 74 75 b5 db 0c df 9e 6d 79 eb 63 9f 38 d0 94 a5 24 89 5c 65 5b ae 37 33 4c dd 47 f4 02 a6 39 d8 9d 2d 62 b9 2e 0f 2b 60 58 e4 f8 6c 72 b0 85 4d 95 41 1c 23 05 99 32 c5 0e 82 91 14 d1 af f9 b3 07 97 6e 0b 67 3b 78 e6 28 22 4f a3 ca 48 de 1d a8 17 6f 90 aa 31 5a f3 e9 a9 44 30 56 09 59 6a 42 cd e5 d6 86 d9 bf cb 26 66 7c d5 be 25 1f e0 98 27 92 51 c7 45 2c c0 ad a7 69 f7 b4 e8 84 e1 18 88 3c 76 20 5e 9b 1e 0d 81 4a bd 16 8a ac 93 ce 1a c2 0a 3f fd e3 77 6b d7 ef a4 80 a1 36 ed a2 12 57 b6 29 8d 7b c8 52 c3 bc b8 21 d4 ea d3 06 ab 2a 1b 5f b7 10 ec 64 f6 e2 11 50 83 54 3a fa fb f2 43 b1 ff e7 c9 03 bb ee 13 8b dc 35 b2 da cf a0 96 49 4e 08 73 f0 7e fe 15 4b
|
||||
* 01 bb a6 d7 c7 07 ce 82 4a 2f a5 9b b6 60 f1 ad e7 f4 06 d2 df 2e ca 65 5c 48 21 aa cd 4e c1 61 38 0a 3e d1 d5 cb 10 dc 5e 24 b8 de 79 36 43 72 d9 f8 f9 a2 a4 6a 3d ea 8e 03 f5 ab b4 5d b5 53 6b 39 86 b0 50 74 96 84 5a 4b e8 49 e5 51 ef 12 bc 89 5b 2b 29 09 c3 57 1e 37 76 0b 64 8a 52 59 80 da a8 44 95 3c 33 e6 7c af 6c b1 9d fc 92 d6 d8 ff a7 77 04 13 73 66 28 7d 83 fb 5f 63 25 19 bd c5 3b 6e 20 35 55 42 31 e1 b9 9e 90 d4 ba db f7 2a e9 3a a0 75 7a d3 02 ee 9c c6 1f 14 cc 22 4d 30 71 58 11 85 4f 6f 6d 1d cf fa 54 a9 17 a3 0f ae 0d 1c c2 d0 32 16 f6 c0 7f 2d 15 f3 1b f2 ed b3 45 c8 ac 7b 2c e2 e4 bf be 9f 34 05 70 3f 98 fe 62 18 9a 56 8d 93 97 78 4c 7e 27 87 08 8b ec 67 0e 1a 23 8c 68 99 94 40 b2 a1 eb b7 26 f0 dd e3 69 0c c4 88 41 81 91 e0 fd
|
||||
* 01 97 7f 9c 7c 18 bd a2 58 1a da 74 70 a3 e5 47 29 07 f5 80 23 e9 fa 46 54 a0 99 95 53 9b 0b c7 09 c0 78 89 92 e3 0d b0 2a 8c fb 17 3f 26 65 87 27 5c 66 61 79 4d 32 b3 8d 52 e2 82 3d f9 c5 02 bc 4c 73 48 62 af ba 41 d9 c4 2f b1 33 b8 15 7d cf 3a a9 5f 84 6d 34 1b 44 94 72 81 42 be cc 4b 0a 6f 5a 22 36 b5 3c 9d 13 7e 08 dd d6 5e 04 fc 5b ec ef f1 6e 1e 77 24 e6 c6 aa cb fd 51 67 06 6a 4a 88 db b2 c2 5d 43 40 f7 50 a8 f2 7a 71 a4 d2 bf 31 90 19 9a 8e f6 c3 a6 e7 60 12 ee 2d de 38 e8 b7 98 c1 28 f3 05 96 63 d1 b9 14 9f 1d 83 68 75 ed 16 03 ce e4 df e0 10 ae 69 55 91 2e 4e fe 21 1f 9e e1 d5 cd ca f0 8b 2b c9 8a 93 bb 57 20 86 1c a1 4f 3e 25 d4 6c a5 6b a7 37 ff 39 35 0c f8 ea 56 45 8f 2c 59 ab 85 eb 49 0f dc d8 76 b6 f4 0e 11 b4 d0 30 d3 3b ad d7
|
||||
* 01 2b 3f cf 73 2c d6 ed cb 74 15 78 8a c1 17 c9 89 68 21 ab 76 3b 4b 5a 6e 0e b9 d3 b6 3e 36 86 bf a2 a7 30 14 eb c7 2d 96 67 20 b5 9a e0 a8 c6 80 04 8d fe 75 5e 23 ca 8f 48 99 0d df 8e b8 70 29 9c 44 69 3d a5 c2 90 d2 1c 9b 02 1d 98 93 ec 84 e8 64 4c 3a 8b 97 f3 e5 c0 7d 26 c8 08 a0 62 82 55 f7 33 f6 51 63 4d 77 da fd c3 38 6d ee 09 47 a3 05 de a6 f1 22 25 6a 0c 81 b2 6b 58 d5 b3 fc fb 28 7f 07 dc 7a 9e d0 37 b4 e1 1a 24 03 ae 94 ba 88 2f ea 2e 8c 5b bb 79 d1 11 ff a4 19 3c 2a 4e 52 e3 95 bd 31 5d 35 4a 41 c4 db 42 c5 0b 49 1b 7c e4 b0 9d 45 f0 a9 61 57 06 d4 40 91 56 13 fa 87 ac 27 54 dd 59 1f 71 39 43 6c f9 be 4f f4 1e 32 cd e9 7e 7b 66 5f ef e7 6f 0a 60 d7 b7 83 92 e2 af 72 f8 b1 50 10 ce 18 53 a1 cc ad 12 34 0f f5 aa 16 e6 f2 d8 85 9f bc
|
||||
* 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
|
||||
* 01 02 04 08 10 20 40 80 1d 3a 74 e8 cd 87 13 26 4c 98 2d 5a b4 75 ea c9 8f 03 06 0c 18 30 60 c0 9d 27 4e 9c 25 4a 94 35 6a d4 b5 77 ee c1 9f 23 46 8c 05 0a 14 28 50 a0 5d ba 69 d2 b9 6f de a1 5f be 61 c2 99 2f 5e bc 65 ca 89 0f 1e 3c 78 f0 fd e7 d3 bb 6b d6 b1 7f fe e1 df a3 5b b6 71 e2 d9 af 43 86 11 22 44 88 0d 1a 34 68 d0 bd 67 ce 81 1f 3e 7c f8 ed c7 93 3b 76 ec c5 97 33 66 cc 85 17 2e 5c b8 6d da a9 4f 9e 21 42 84 15 2a 54 a8 4d 9a 29 52 a4 55 aa 49 92 39 72 e4 d5 b7 73 e6 d1 bf 63 c6 91 3f 7e fc e5 d7 b3 7b f6 f1 ff e3 db ab 4b 96 31 62 c4 95 37 6e dc a5 57 ae 41 82 19 32 64 c8 8d 07 0e 1c 38 70 e0 dd a7 53 a6 51 a2 59 b2 79 f2 f9 ef c3 9b 2b 56 ac 45 8a 09 12 24 48 90 3d 7a f4 f5 f7 f3 fb eb cb 8b 0b 16 2c 58 b0 7d fa e9 cf 83 1b 36 6c
|
||||
* 01 f5 d2 c4 9a 71 f1 7f fc 87 c1 c6 19 2f 40 55 3d ba 53 04 9c 61 34 8c 46 68 70 3e cc 7d 74 75 b5 db 0c df 9e 6d 79 eb 63 9f 38 d0 94 a5 24 89 5c 65 5b ae 37 33 4c dd 47 f4 02 a6 39 d8 9d 2d 62 b9 2e 0f 2b 60 58 e4 f8 6c 72 b0 85 4d 95 41 1c 23 05 99 32 c5 0e 82 91 14 d1 af f9 b3 07 97 6e 0b 67 3b 78 e6 28 22 4f a3 ca 48 de 1d a8 17 6f 90 aa 31 5a f3 e9 a9 44 30 56 09 59 6a 42 cd e5 d6 86 d9 bf cb 26 66 7c d5 be 25 1f e0 98 27 92 51 c7 45 2c c0 ad a7 69 f7 b4 e8 84 e1 18 88 3c 76 20 5e 9b 1e 0d 81 4a bd 16 8a ac 93 ce 1a c2 0a 3f fd e3 77 6b d7 ef a4 80 a1 36 ed a2 12 57 b6 29 8d 7b c8 52 c3 bc b8 21 d4 ea d3 06 ab 2a 1b 5f b7 10 ec 64 f6 e2 11 50 83 54 3a fa fb f2 43 b1 ff e7 c9 03 bb ee 13 8b dc 35 b2 da cf a0 96 49 4e 08 73 f0 7e fe 15 4b
|
||||
* 01 bb a6 d7 c7 07 ce 82 4a 2f a5 9b b6 60 f1 ad e7 f4 06 d2 df 2e ca 65 5c 48 21 aa cd 4e c1 61 38 0a 3e d1 d5 cb 10 dc 5e 24 b8 de 79 36 43 72 d9 f8 f9 a2 a4 6a 3d ea 8e 03 f5 ab b4 5d b5 53 6b 39 86 b0 50 74 96 84 5a 4b e8 49 e5 51 ef 12 bc 89 5b 2b 29 09 c3 57 1e 37 76 0b 64 8a 52 59 80 da a8 44 95 3c 33 e6 7c af 6c b1 9d fc 92 d6 d8 ff a7 77 04 13 73 66 28 7d 83 fb 5f 63 25 19 bd c5 3b 6e 20 35 55 42 31 e1 b9 9e 90 d4 ba db f7 2a e9 3a a0 75 7a d3 02 ee 9c c6 1f 14 cc 22 4d 30 71 58 11 85 4f 6f 6d 1d cf fa 54 a9 17 a3 0f ae 0d 1c c2 d0 32 16 f6 c0 7f 2d 15 f3 1b f2 ed b3 45 c8 ac 7b 2c e2 e4 bf be 9f 34 05 70 3f 98 fe 62 18 9a 56 8d 93 97 78 4c 7e 27 87 08 8b ec 67 0e 1a 23 8c 68 99 94 40 b2 a1 eb b7 26 f0 dd e3 69 0c c4 88 41 81 91 e0 fd
|
||||
* 01 97 7f 9c 7c 18 bd a2 58 1a da 74 70 a3 e5 47 29 07 f5 80 23 e9 fa 46 54 a0 99 95 53 9b 0b c7 09 c0 78 89 92 e3 0d b0 2a 8c fb 17 3f 26 65 87 27 5c 66 61 79 4d 32 b3 8d 52 e2 82 3d f9 c5 02 bc 4c 73 48 62 af ba 41 d9 c4 2f b1 33 b8 15 7d cf 3a a9 5f 84 6d 34 1b 44 94 72 81 42 be cc 4b 0a 6f 5a 22 36 b5 3c 9d 13 7e 08 dd d6 5e 04 fc 5b ec ef f1 6e 1e 77 24 e6 c6 aa cb fd 51 67 06 6a 4a 88 db b2 c2 5d 43 40 f7 50 a8 f2 7a 71 a4 d2 bf 31 90 19 9a 8e f6 c3 a6 e7 60 12 ee 2d de 38 e8 b7 98 c1 28 f3 05 96 63 d1 b9 14 9f 1d 83 68 75 ed 16 03 ce e4 df e0 10 ae 69 55 91 2e 4e fe 21 1f 9e e1 d5 cd ca f0 8b 2b c9 8a 93 bb 57 20 86 1c a1 4f 3e 25 d4 6c a5 6b a7 37 ff 39 35 0c f8 ea 56 45 8f 2c 59 ab 85 eb 49 0f dc d8 76 b6 f4 0e 11 b4 d0 30 d3 3b ad d7
|
||||
* 01 2b 3f cf 73 2c d6 ed cb 74 15 78 8a c1 17 c9 89 68 21 ab 76 3b 4b 5a 6e 0e b9 d3 b6 3e 36 86 bf a2 a7 30 14 eb c7 2d 96 67 20 b5 9a e0 a8 c6 80 04 8d fe 75 5e 23 ca 8f 48 99 0d df 8e b8 70 29 9c 44 69 3d a5 c2 90 d2 1c 9b 02 1d 98 93 ec 84 e8 64 4c 3a 8b 97 f3 e5 c0 7d 26 c8 08 a0 62 82 55 f7 33 f6 51 63 4d 77 da fd c3 38 6d ee 09 47 a3 05 de a6 f1 22 25 6a 0c 81 b2 6b 58 d5 b3 fc fb 28 7f 07 dc 7a 9e d0 37 b4 e1 1a 24 03 ae 94 ba 88 2f ea 2e 8c 5b bb 79 d1 11 ff a4 19 3c 2a 4e 52 e3 95 bd 31 5d 35 4a 41 c4 db 42 c5 0b 49 1b 7c e4 b0 9d 45 f0 a9 61 57 06 d4 40 91 56 13 fa 87 ac 27 54 dd 59 1f 71 39 43 6c f9 be 4f f4 1e 32 cd e9 7e 7b 66 5f ef e7 6f 0a 60 d7 b7 83 92 e2 af 72 f8 b1 50 10 ce 18 53 a1 cc ad 12 34 0f f5 aa 16 e6 f2 d8 85 9f bc
|
||||
*/
|
||||
const uint8_t __aligned(256) raid_gfcauchy[6][256] =
|
||||
{
|
||||
|
|
@ -8954,7 +8954,7 @@ const uint8_t __aligned(256) raid_gfcauchy[6][256] =
|
|||
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
|
||||
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
|
||||
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
|
||||
0x01, 0x01, 0x01,
|
||||
0x01, 0x01, 0x01,
|
||||
},
|
||||
{
|
||||
0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,
|
||||
|
|
@ -8988,7 +8988,7 @@ const uint8_t __aligned(256) raid_gfcauchy[6][256] =
|
|||
0x12, 0x24, 0x48, 0x90, 0x3d, 0x7a, 0xf4, 0xf5,
|
||||
0xf7, 0xf3, 0xfb, 0xeb, 0xcb, 0x8b, 0x0b, 0x16,
|
||||
0x2c, 0x58, 0xb0, 0x7d, 0xfa, 0xe9, 0xcf, 0x83,
|
||||
0x1b, 0x36, 0x6c,
|
||||
0x1b, 0x36, 0x6c,
|
||||
},
|
||||
{
|
||||
0x01, 0xf5, 0xd2, 0xc4, 0x9a, 0x71, 0xf1, 0x7f,
|
||||
|
|
@ -9022,7 +9022,7 @@ const uint8_t __aligned(256) raid_gfcauchy[6][256] =
|
|||
0xf2, 0x43, 0xb1, 0xff, 0xe7, 0xc9, 0x03, 0xbb,
|
||||
0xee, 0x13, 0x8b, 0xdc, 0x35, 0xb2, 0xda, 0xcf,
|
||||
0xa0, 0x96, 0x49, 0x4e, 0x08, 0x73, 0xf0, 0x7e,
|
||||
0xfe, 0x15, 0x4b,
|
||||
0xfe, 0x15, 0x4b,
|
||||
},
|
||||
{
|
||||
0x01, 0xbb, 0xa6, 0xd7, 0xc7, 0x07, 0xce, 0x82,
|
||||
|
|
@ -9056,7 +9056,7 @@ const uint8_t __aligned(256) raid_gfcauchy[6][256] =
|
|||
0xec, 0x67, 0x0e, 0x1a, 0x23, 0x8c, 0x68, 0x99,
|
||||
0x94, 0x40, 0xb2, 0xa1, 0xeb, 0xb7, 0x26, 0xf0,
|
||||
0xdd, 0xe3, 0x69, 0x0c, 0xc4, 0x88, 0x41, 0x81,
|
||||
0x91, 0xe0, 0xfd,
|
||||
0x91, 0xe0, 0xfd,
|
||||
},
|
||||
{
|
||||
0x01, 0x97, 0x7f, 0x9c, 0x7c, 0x18, 0xbd, 0xa2,
|
||||
|
|
@ -9090,7 +9090,7 @@ const uint8_t __aligned(256) raid_gfcauchy[6][256] =
|
|||
0x0c, 0xf8, 0xea, 0x56, 0x45, 0x8f, 0x2c, 0x59,
|
||||
0xab, 0x85, 0xeb, 0x49, 0x0f, 0xdc, 0xd8, 0x76,
|
||||
0xb6, 0xf4, 0x0e, 0x11, 0xb4, 0xd0, 0x30, 0xd3,
|
||||
0x3b, 0xad, 0xd7,
|
||||
0x3b, 0xad, 0xd7,
|
||||
},
|
||||
{
|
||||
0x01, 0x2b, 0x3f, 0xcf, 0x73, 0x2c, 0xd6, 0xed,
|
||||
|
|
@ -9124,7 +9124,7 @@ const uint8_t __aligned(256) raid_gfcauchy[6][256] =
|
|||
0x83, 0x92, 0xe2, 0xaf, 0x72, 0xf8, 0xb1, 0x50,
|
||||
0x10, 0xce, 0x18, 0x53, 0xa1, 0xcc, 0xad, 0x12,
|
||||
0x34, 0x0f, 0xf5, 0xaa, 0x16, 0xe6, 0xf2, 0xd8,
|
||||
0x85, 0x9f, 0xbc,
|
||||
0x85, 0x9f, 0xbc,
|
||||
},
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -75,6 +75,7 @@ static struct raid_func {
|
|||
static const char *raid_tag(void *func)
|
||||
{
|
||||
struct raid_func *i = RAID_FUNC;
|
||||
|
||||
while (i->name != 0) {
|
||||
if (i->p == func)
|
||||
return i->name;
|
||||
|
|
|
|||
19
raid/test.c
19
raid/test.c
|
|
@ -35,6 +35,7 @@ static int ibc(int n, int r)
|
|||
static int ipow(int n, int r)
|
||||
{
|
||||
int v = 1;
|
||||
|
||||
while (r) {
|
||||
v *= n;
|
||||
--r;
|
||||
|
|
@ -94,7 +95,7 @@ int raid_test_insert(void)
|
|||
|
||||
/* check order */
|
||||
for (j = 1; j < r; ++j)
|
||||
if (i[j-1] > i[j])
|
||||
if (i[j - 1] > i[j])
|
||||
return -1;
|
||||
} while (permutation_next(r, RAID_PARITY_MAX, p));
|
||||
}
|
||||
|
|
@ -121,7 +122,7 @@ int raid_test_sort(void)
|
|||
|
||||
/* check order */
|
||||
for (j = 1; j < r; ++j)
|
||||
if (i[j-1] > i[j])
|
||||
if (i[j - 1] > i[j])
|
||||
return -1;
|
||||
} while (permutation_next(r, RAID_PARITY_MAX, p));
|
||||
}
|
||||
|
|
@ -145,6 +146,7 @@ int raid_test_rec(int mode, int nd, size_t size)
|
|||
int i;
|
||||
int j;
|
||||
int nr;
|
||||
|
||||
void (*f[RAID_PARITY_MAX][4])(
|
||||
int nr, int *id, int *ip, int nd, size_t size, void **vbuf);
|
||||
int nf[RAID_PARITY_MAX];
|
||||
|
|
@ -169,10 +171,10 @@ int raid_test_rec(int mode, int nd, size_t size)
|
|||
for (i = 0; i < np; ++i)
|
||||
parity_save[i] = parity[i];
|
||||
|
||||
memset(v[nv-2], 0, size);
|
||||
raid_zero(v[nv-2]);
|
||||
memset(v[nv - 2], 0, size);
|
||||
raid_zero(v[nv - 2]);
|
||||
|
||||
waste = v[nv-1];
|
||||
waste = v[nv - 1];
|
||||
|
||||
/* fill data disk with random */
|
||||
raid_mrand_vector(nd, size, v);
|
||||
|
|
@ -235,7 +237,7 @@ int raid_test_rec(int mode, int nd, size_t size)
|
|||
combination_first(nr, np, ip);
|
||||
do {
|
||||
/* for each recover function */
|
||||
for (j = 0; j < nf[nr-1]; ++j) {
|
||||
for (j = 0; j < nf[nr - 1]; ++j) {
|
||||
/* set */
|
||||
for (i = 0; i < nr; ++i) {
|
||||
/* remove the missing data */
|
||||
|
|
@ -246,7 +248,7 @@ int raid_test_rec(int mode, int nd, size_t size)
|
|||
}
|
||||
|
||||
/* recover */
|
||||
f[nr-1][j](nr, id, ip, nd, size, v);
|
||||
f[nr - 1][j](nr, id, ip, nd, size, v);
|
||||
|
||||
/* check */
|
||||
for (i = 0; i < nr; ++i)
|
||||
|
|
@ -281,7 +283,8 @@ int raid_test_par(int mode, int nd, size_t size)
|
|||
void **v;
|
||||
int nv;
|
||||
int i, j;
|
||||
void (*f[64])(int nd, size_t size, void **vbuf);
|
||||
|
||||
void (*f[64]) (int nd, size_t size, void **vbuf);
|
||||
int nf;
|
||||
int np;
|
||||
|
||||
|
|
|
|||
353
raid/x86.c
353
raid/x86.c
|
|
@ -25,7 +25,7 @@
|
|||
*/
|
||||
void raid_gen1_sse2(int nd, size_t size, void **vv)
|
||||
{
|
||||
uint8_t **v = (uint8_t **)vv;
|
||||
uint8_t **v = (uint8_t**)vv;
|
||||
uint8_t *p;
|
||||
int d, l;
|
||||
size_t i;
|
||||
|
|
@ -37,19 +37,19 @@ void raid_gen1_sse2(int nd, size_t size, void **vv)
|
|||
|
||||
for (i = 0; i < size; i += 64) {
|
||||
asm volatile ("movdqa %0,%%xmm0" : : "m" (v[l][i]));
|
||||
asm volatile ("movdqa %0,%%xmm1" : : "m" (v[l][i+16]));
|
||||
asm volatile ("movdqa %0,%%xmm2" : : "m" (v[l][i+32]));
|
||||
asm volatile ("movdqa %0,%%xmm3" : : "m" (v[l][i+48]));
|
||||
for (d = l-1; d >= 0; --d) {
|
||||
asm volatile ("movdqa %0,%%xmm1" : : "m" (v[l][i + 16]));
|
||||
asm volatile ("movdqa %0,%%xmm2" : : "m" (v[l][i + 32]));
|
||||
asm volatile ("movdqa %0,%%xmm3" : : "m" (v[l][i + 48]));
|
||||
for (d = l - 1; d >= 0; --d) {
|
||||
asm volatile ("pxor %0,%%xmm0" : : "m" (v[d][i]));
|
||||
asm volatile ("pxor %0,%%xmm1" : : "m" (v[d][i+16]));
|
||||
asm volatile ("pxor %0,%%xmm2" : : "m" (v[d][i+32]));
|
||||
asm volatile ("pxor %0,%%xmm3" : : "m" (v[d][i+48]));
|
||||
asm volatile ("pxor %0,%%xmm1" : : "m" (v[d][i + 16]));
|
||||
asm volatile ("pxor %0,%%xmm2" : : "m" (v[d][i + 32]));
|
||||
asm volatile ("pxor %0,%%xmm3" : : "m" (v[d][i + 48]));
|
||||
}
|
||||
asm volatile ("movntdq %%xmm0,%0" : "=m" (p[i]));
|
||||
asm volatile ("movntdq %%xmm1,%0" : "=m" (p[i+16]));
|
||||
asm volatile ("movntdq %%xmm2,%0" : "=m" (p[i+32]));
|
||||
asm volatile ("movntdq %%xmm3,%0" : "=m" (p[i+48]));
|
||||
asm volatile ("movntdq %%xmm1,%0" : "=m" (p[i + 16]));
|
||||
asm volatile ("movntdq %%xmm2,%0" : "=m" (p[i + 32]));
|
||||
asm volatile ("movntdq %%xmm3,%0" : "=m" (p[i + 48]));
|
||||
}
|
||||
|
||||
raid_asm_clobber_xmm4();
|
||||
|
|
@ -68,7 +68,7 @@ void raid_gen1_sse2(int nd, size_t size, void **vv)
|
|||
*/
|
||||
void raid_gen1_avx2(int nd, size_t size, void **vv)
|
||||
{
|
||||
uint8_t **v = (uint8_t **)vv;
|
||||
uint8_t **v = (uint8_t**)vv;
|
||||
uint8_t *p;
|
||||
int d, l;
|
||||
size_t i;
|
||||
|
|
@ -80,13 +80,13 @@ void raid_gen1_avx2(int nd, size_t size, void **vv)
|
|||
|
||||
for (i = 0; i < size; i += 64) {
|
||||
asm volatile ("vmovdqa %0,%%ymm0" : : "m" (v[l][i]));
|
||||
asm volatile ("vmovdqa %0,%%ymm1" : : "m" (v[l][i+32]));
|
||||
for (d = l-1; d >= 0; --d) {
|
||||
asm volatile ("vmovdqa %0,%%ymm1" : : "m" (v[l][i + 32]));
|
||||
for (d = l - 1; d >= 0; --d) {
|
||||
asm volatile ("vpxor %0,%%ymm0,%%ymm0" : : "m" (v[d][i]));
|
||||
asm volatile ("vpxor %0,%%ymm1,%%ymm1" : : "m" (v[d][i+32]));
|
||||
asm volatile ("vpxor %0,%%ymm1,%%ymm1" : : "m" (v[d][i + 32]));
|
||||
}
|
||||
asm volatile ("vmovntdq %%ymm0,%0" : "=m" (p[i]));
|
||||
asm volatile ("vmovntdq %%ymm1,%0" : "=m" (p[i+32]));
|
||||
asm volatile ("vmovntdq %%ymm1,%0" : "=m" (p[i + 32]));
|
||||
}
|
||||
|
||||
raid_asm_clobber_ymm4();
|
||||
|
|
@ -99,7 +99,8 @@ void raid_gen1_avx2(int nd, size_t size, void **vv)
|
|||
static const struct gfconst16 {
|
||||
uint8_t poly[16];
|
||||
uint8_t low4[16];
|
||||
} gfconst16 __aligned(32) = {
|
||||
} gfconst16 __aligned(32) =
|
||||
{
|
||||
{
|
||||
0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d,
|
||||
0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d
|
||||
|
|
@ -117,7 +118,7 @@ static const struct gfconst16 {
|
|||
*/
|
||||
void raid_gen2_sse2(int nd, size_t size, void **vv)
|
||||
{
|
||||
uint8_t **v = (uint8_t **)vv;
|
||||
uint8_t **v = (uint8_t**)vv;
|
||||
uint8_t *p;
|
||||
uint8_t *q;
|
||||
int d, l;
|
||||
|
|
@ -125,7 +126,7 @@ void raid_gen2_sse2(int nd, size_t size, void **vv)
|
|||
|
||||
l = nd - 1;
|
||||
p = v[nd];
|
||||
q = v[nd+1];
|
||||
q = v[nd + 1];
|
||||
|
||||
raid_asm_begin();
|
||||
|
||||
|
|
@ -133,10 +134,10 @@ void raid_gen2_sse2(int nd, size_t size, void **vv)
|
|||
|
||||
for (i = 0; i < size; i += 32) {
|
||||
asm volatile ("movdqa %0,%%xmm0" : : "m" (v[l][i]));
|
||||
asm volatile ("movdqa %0,%%xmm1" : : "m" (v[l][i+16]));
|
||||
asm volatile ("movdqa %0,%%xmm1" : : "m" (v[l][i + 16]));
|
||||
asm volatile ("movdqa %xmm0,%xmm2");
|
||||
asm volatile ("movdqa %xmm1,%xmm3");
|
||||
for (d = l-1; d >= 0; --d) {
|
||||
for (d = l - 1; d >= 0; --d) {
|
||||
asm volatile ("pxor %xmm4,%xmm4");
|
||||
asm volatile ("pxor %xmm5,%xmm5");
|
||||
asm volatile ("pcmpgtb %xmm2,%xmm4");
|
||||
|
|
@ -149,16 +150,16 @@ void raid_gen2_sse2(int nd, size_t size, void **vv)
|
|||
asm volatile ("pxor %xmm5,%xmm3");
|
||||
|
||||
asm volatile ("movdqa %0,%%xmm4" : : "m" (v[d][i]));
|
||||
asm volatile ("movdqa %0,%%xmm5" : : "m" (v[d][i+16]));
|
||||
asm volatile ("movdqa %0,%%xmm5" : : "m" (v[d][i + 16]));
|
||||
asm volatile ("pxor %xmm4,%xmm0");
|
||||
asm volatile ("pxor %xmm5,%xmm1");
|
||||
asm volatile ("pxor %xmm4,%xmm2");
|
||||
asm volatile ("pxor %xmm5,%xmm3");
|
||||
}
|
||||
asm volatile ("movntdq %%xmm0,%0" : "=m" (p[i]));
|
||||
asm volatile ("movntdq %%xmm1,%0" : "=m" (p[i+16]));
|
||||
asm volatile ("movntdq %%xmm1,%0" : "=m" (p[i + 16]));
|
||||
asm volatile ("movntdq %%xmm2,%0" : "=m" (q[i]));
|
||||
asm volatile ("movntdq %%xmm3,%0" : "=m" (q[i+16]));
|
||||
asm volatile ("movntdq %%xmm3,%0" : "=m" (q[i + 16]));
|
||||
}
|
||||
|
||||
raid_asm_clobber_xmm8();
|
||||
|
|
@ -173,7 +174,7 @@ void raid_gen2_sse2(int nd, size_t size, void **vv)
|
|||
*/
|
||||
void raid_gen2_avx2(int nd, size_t size, void **vv)
|
||||
{
|
||||
uint8_t **v = (uint8_t **)vv;
|
||||
uint8_t **v = (uint8_t**)vv;
|
||||
uint8_t *p;
|
||||
uint8_t *q;
|
||||
int d, l;
|
||||
|
|
@ -181,7 +182,7 @@ void raid_gen2_avx2(int nd, size_t size, void **vv)
|
|||
|
||||
l = nd - 1;
|
||||
p = v[nd];
|
||||
q = v[nd+1];
|
||||
q = v[nd + 1];
|
||||
|
||||
raid_asm_begin();
|
||||
|
||||
|
|
@ -190,10 +191,10 @@ void raid_gen2_avx2(int nd, size_t size, void **vv)
|
|||
|
||||
for (i = 0; i < size; i += 64) {
|
||||
asm volatile ("vmovdqa %0,%%ymm0" : : "m" (v[l][i]));
|
||||
asm volatile ("vmovdqa %0,%%ymm1" : : "m" (v[l][i+32]));
|
||||
asm volatile ("vmovdqa %0,%%ymm1" : : "m" (v[l][i + 32]));
|
||||
asm volatile ("vmovdqa %ymm0,%ymm2");
|
||||
asm volatile ("vmovdqa %ymm1,%ymm3");
|
||||
for (d = l-1; d >= 0; --d) {
|
||||
for (d = l - 1; d >= 0; --d) {
|
||||
asm volatile ("vpcmpgtb %ymm2,%ymm6,%ymm4");
|
||||
asm volatile ("vpcmpgtb %ymm3,%ymm6,%ymm5");
|
||||
asm volatile ("vpaddb %ymm2,%ymm2,%ymm2");
|
||||
|
|
@ -204,16 +205,16 @@ void raid_gen2_avx2(int nd, size_t size, void **vv)
|
|||
asm volatile ("vpxor %ymm5,%ymm3,%ymm3");
|
||||
|
||||
asm volatile ("vmovdqa %0,%%ymm4" : : "m" (v[d][i]));
|
||||
asm volatile ("vmovdqa %0,%%ymm5" : : "m" (v[d][i+32]));
|
||||
asm volatile ("vmovdqa %0,%%ymm5" : : "m" (v[d][i + 32]));
|
||||
asm volatile ("vpxor %ymm4,%ymm0,%ymm0");
|
||||
asm volatile ("vpxor %ymm5,%ymm1,%ymm1");
|
||||
asm volatile ("vpxor %ymm4,%ymm2,%ymm2");
|
||||
asm volatile ("vpxor %ymm5,%ymm3,%ymm3");
|
||||
}
|
||||
asm volatile ("vmovntdq %%ymm0,%0" : "=m" (p[i]));
|
||||
asm volatile ("vmovntdq %%ymm1,%0" : "=m" (p[i+32]));
|
||||
asm volatile ("vmovntdq %%ymm1,%0" : "=m" (p[i + 32]));
|
||||
asm volatile ("vmovntdq %%ymm2,%0" : "=m" (q[i]));
|
||||
asm volatile ("vmovntdq %%ymm3,%0" : "=m" (q[i+32]));
|
||||
asm volatile ("vmovntdq %%ymm3,%0" : "=m" (q[i + 32]));
|
||||
}
|
||||
|
||||
raid_asm_clobber_ymm8();
|
||||
|
|
@ -230,7 +231,7 @@ void raid_gen2_avx2(int nd, size_t size, void **vv)
|
|||
*/
|
||||
void raid_gen2_sse2ext(int nd, size_t size, void **vv)
|
||||
{
|
||||
uint8_t **v = (uint8_t **)vv;
|
||||
uint8_t **v = (uint8_t**)vv;
|
||||
uint8_t *p;
|
||||
uint8_t *q;
|
||||
int d, l;
|
||||
|
|
@ -238,7 +239,7 @@ void raid_gen2_sse2ext(int nd, size_t size, void **vv)
|
|||
|
||||
l = nd - 1;
|
||||
p = v[nd];
|
||||
q = v[nd+1];
|
||||
q = v[nd + 1];
|
||||
|
||||
raid_asm_begin();
|
||||
|
||||
|
|
@ -246,14 +247,14 @@ void raid_gen2_sse2ext(int nd, size_t size, void **vv)
|
|||
|
||||
for (i = 0; i < size; i += 64) {
|
||||
asm volatile ("movdqa %0,%%xmm0" : : "m" (v[l][i]));
|
||||
asm volatile ("movdqa %0,%%xmm1" : : "m" (v[l][i+16]));
|
||||
asm volatile ("movdqa %0,%%xmm2" : : "m" (v[l][i+32]));
|
||||
asm volatile ("movdqa %0,%%xmm3" : : "m" (v[l][i+48]));
|
||||
asm volatile ("movdqa %0,%%xmm1" : : "m" (v[l][i + 16]));
|
||||
asm volatile ("movdqa %0,%%xmm2" : : "m" (v[l][i + 32]));
|
||||
asm volatile ("movdqa %0,%%xmm3" : : "m" (v[l][i + 48]));
|
||||
asm volatile ("movdqa %xmm0,%xmm4");
|
||||
asm volatile ("movdqa %xmm1,%xmm5");
|
||||
asm volatile ("movdqa %xmm2,%xmm6");
|
||||
asm volatile ("movdqa %xmm3,%xmm7");
|
||||
for (d = l-1; d >= 0; --d) {
|
||||
for (d = l - 1; d >= 0; --d) {
|
||||
asm volatile ("pxor %xmm8,%xmm8");
|
||||
asm volatile ("pxor %xmm9,%xmm9");
|
||||
asm volatile ("pxor %xmm10,%xmm10");
|
||||
|
|
@ -276,9 +277,9 @@ void raid_gen2_sse2ext(int nd, size_t size, void **vv)
|
|||
asm volatile ("pxor %xmm11,%xmm7");
|
||||
|
||||
asm volatile ("movdqa %0,%%xmm8" : : "m" (v[d][i]));
|
||||
asm volatile ("movdqa %0,%%xmm9" : : "m" (v[d][i+16]));
|
||||
asm volatile ("movdqa %0,%%xmm10" : : "m" (v[d][i+32]));
|
||||
asm volatile ("movdqa %0,%%xmm11" : : "m" (v[d][i+48]));
|
||||
asm volatile ("movdqa %0,%%xmm9" : : "m" (v[d][i + 16]));
|
||||
asm volatile ("movdqa %0,%%xmm10" : : "m" (v[d][i + 32]));
|
||||
asm volatile ("movdqa %0,%%xmm11" : : "m" (v[d][i + 48]));
|
||||
asm volatile ("pxor %xmm8,%xmm0");
|
||||
asm volatile ("pxor %xmm9,%xmm1");
|
||||
asm volatile ("pxor %xmm10,%xmm2");
|
||||
|
|
@ -289,13 +290,13 @@ void raid_gen2_sse2ext(int nd, size_t size, void **vv)
|
|||
asm volatile ("pxor %xmm11,%xmm7");
|
||||
}
|
||||
asm volatile ("movntdq %%xmm0,%0" : "=m" (p[i]));
|
||||
asm volatile ("movntdq %%xmm1,%0" : "=m" (p[i+16]));
|
||||
asm volatile ("movntdq %%xmm2,%0" : "=m" (p[i+32]));
|
||||
asm volatile ("movntdq %%xmm3,%0" : "=m" (p[i+48]));
|
||||
asm volatile ("movntdq %%xmm1,%0" : "=m" (p[i + 16]));
|
||||
asm volatile ("movntdq %%xmm2,%0" : "=m" (p[i + 32]));
|
||||
asm volatile ("movntdq %%xmm3,%0" : "=m" (p[i + 48]));
|
||||
asm volatile ("movntdq %%xmm4,%0" : "=m" (q[i]));
|
||||
asm volatile ("movntdq %%xmm5,%0" : "=m" (q[i+16]));
|
||||
asm volatile ("movntdq %%xmm6,%0" : "=m" (q[i+32]));
|
||||
asm volatile ("movntdq %%xmm7,%0" : "=m" (q[i+48]));
|
||||
asm volatile ("movntdq %%xmm5,%0" : "=m" (q[i + 16]));
|
||||
asm volatile ("movntdq %%xmm6,%0" : "=m" (q[i + 32]));
|
||||
asm volatile ("movntdq %%xmm7,%0" : "=m" (q[i + 48]));
|
||||
}
|
||||
|
||||
raid_asm_clobber_xmm16();
|
||||
|
|
@ -310,7 +311,7 @@ void raid_gen2_sse2ext(int nd, size_t size, void **vv)
|
|||
*/
|
||||
void raid_gen3_ssse3(int nd, size_t size, void **vv)
|
||||
{
|
||||
uint8_t **v = (uint8_t **)vv;
|
||||
uint8_t **v = (uint8_t**)vv;
|
||||
uint8_t *p;
|
||||
uint8_t *q;
|
||||
uint8_t *r;
|
||||
|
|
@ -319,13 +320,13 @@ void raid_gen3_ssse3(int nd, size_t size, void **vv)
|
|||
|
||||
l = nd - 1;
|
||||
p = v[nd];
|
||||
q = v[nd+1];
|
||||
r = v[nd+2];
|
||||
q = v[nd + 1];
|
||||
r = v[nd + 2];
|
||||
|
||||
/* special case with only one data disk */
|
||||
if (l == 0) {
|
||||
for (i = 0; i < 3; ++i)
|
||||
memcpy(v[1+i], v[0], size);
|
||||
memcpy(v[1 + i], v[0], size);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -354,7 +355,7 @@ void raid_gen3_ssse3(int nd, size_t size, void **vv)
|
|||
asm volatile ("pxor %xmm6,%xmm2");
|
||||
|
||||
/* intermediate disks */
|
||||
for (d = l-1; d > 0; --d) {
|
||||
for (d = l - 1; d > 0; --d) {
|
||||
asm volatile ("movdqa %0,%%xmm4" : : "m" (v[d][i]));
|
||||
|
||||
asm volatile ("pxor %xmm5,%xmm5");
|
||||
|
|
@ -411,7 +412,7 @@ void raid_gen3_ssse3(int nd, size_t size, void **vv)
|
|||
*/
|
||||
void raid_gen3_ssse3ext(int nd, size_t size, void **vv)
|
||||
{
|
||||
uint8_t **v = (uint8_t **)vv;
|
||||
uint8_t **v = (uint8_t**)vv;
|
||||
uint8_t *p;
|
||||
uint8_t *q;
|
||||
uint8_t *r;
|
||||
|
|
@ -420,13 +421,13 @@ void raid_gen3_ssse3ext(int nd, size_t size, void **vv)
|
|||
|
||||
l = nd - 1;
|
||||
p = v[nd];
|
||||
q = v[nd+1];
|
||||
r = v[nd+2];
|
||||
q = v[nd + 1];
|
||||
r = v[nd + 2];
|
||||
|
||||
/* special case with only one data disk */
|
||||
if (l == 0) {
|
||||
for (i = 0; i < 3; ++i)
|
||||
memcpy(v[1+i], v[0], size);
|
||||
memcpy(v[1 + i], v[0], size);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -439,7 +440,7 @@ void raid_gen3_ssse3ext(int nd, size_t size, void **vv)
|
|||
for (i = 0; i < size; i += 32) {
|
||||
/* last disk without the by two multiplication */
|
||||
asm volatile ("movdqa %0,%%xmm4" : : "m" (v[l][i]));
|
||||
asm volatile ("movdqa %0,%%xmm12" : : "m" (v[l][i+16]));
|
||||
asm volatile ("movdqa %0,%%xmm12" : : "m" (v[l][i + 16]));
|
||||
|
||||
asm volatile ("movdqa %xmm4,%xmm0");
|
||||
asm volatile ("movdqa %xmm4,%xmm1");
|
||||
|
|
@ -467,9 +468,9 @@ void raid_gen3_ssse3ext(int nd, size_t size, void **vv)
|
|||
asm volatile ("pxor %xmm15,%xmm10");
|
||||
|
||||
/* intermediate disks */
|
||||
for (d = l-1; d > 0; --d) {
|
||||
for (d = l - 1; d > 0; --d) {
|
||||
asm volatile ("movdqa %0,%%xmm4" : : "m" (v[d][i]));
|
||||
asm volatile ("movdqa %0,%%xmm12" : : "m" (v[d][i+16]));
|
||||
asm volatile ("movdqa %0,%%xmm12" : : "m" (v[d][i + 16]));
|
||||
|
||||
asm volatile ("pxor %xmm5,%xmm5");
|
||||
asm volatile ("pxor %xmm13,%xmm13");
|
||||
|
|
@ -512,7 +513,7 @@ void raid_gen3_ssse3ext(int nd, size_t size, void **vv)
|
|||
|
||||
/* first disk with all coefficients at 1 */
|
||||
asm volatile ("movdqa %0,%%xmm4" : : "m" (v[0][i]));
|
||||
asm volatile ("movdqa %0,%%xmm12" : : "m" (v[0][i+16]));
|
||||
asm volatile ("movdqa %0,%%xmm12" : : "m" (v[0][i + 16]));
|
||||
|
||||
asm volatile ("pxor %xmm5,%xmm5");
|
||||
asm volatile ("pxor %xmm13,%xmm13");
|
||||
|
|
@ -533,11 +534,11 @@ void raid_gen3_ssse3ext(int nd, size_t size, void **vv)
|
|||
asm volatile ("pxor %xmm12,%xmm10");
|
||||
|
||||
asm volatile ("movntdq %%xmm0,%0" : "=m" (p[i]));
|
||||
asm volatile ("movntdq %%xmm8,%0" : "=m" (p[i+16]));
|
||||
asm volatile ("movntdq %%xmm8,%0" : "=m" (p[i + 16]));
|
||||
asm volatile ("movntdq %%xmm1,%0" : "=m" (q[i]));
|
||||
asm volatile ("movntdq %%xmm9,%0" : "=m" (q[i+16]));
|
||||
asm volatile ("movntdq %%xmm9,%0" : "=m" (q[i + 16]));
|
||||
asm volatile ("movntdq %%xmm2,%0" : "=m" (r[i]));
|
||||
asm volatile ("movntdq %%xmm10,%0" : "=m" (r[i+16]));
|
||||
asm volatile ("movntdq %%xmm10,%0" : "=m" (r[i + 16]));
|
||||
}
|
||||
|
||||
raid_asm_clobber_xmm16();
|
||||
|
|
@ -554,7 +555,7 @@ void raid_gen3_ssse3ext(int nd, size_t size, void **vv)
|
|||
*/
|
||||
void raid_gen3_avx2ext(int nd, size_t size, void **vv)
|
||||
{
|
||||
uint8_t **v = (uint8_t **)vv;
|
||||
uint8_t **v = (uint8_t**)vv;
|
||||
uint8_t *p;
|
||||
uint8_t *q;
|
||||
uint8_t *r;
|
||||
|
|
@ -563,13 +564,13 @@ void raid_gen3_avx2ext(int nd, size_t size, void **vv)
|
|||
|
||||
l = nd - 1;
|
||||
p = v[nd];
|
||||
q = v[nd+1];
|
||||
r = v[nd+2];
|
||||
q = v[nd + 1];
|
||||
r = v[nd + 2];
|
||||
|
||||
/* special case with only one data disk */
|
||||
if (l == 0) {
|
||||
for (i = 0; i < 3; ++i)
|
||||
memcpy(v[1+i], v[0], size);
|
||||
memcpy(v[1 + i], v[0], size);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -582,7 +583,7 @@ void raid_gen3_avx2ext(int nd, size_t size, void **vv)
|
|||
for (i = 0; i < size; i += 64) {
|
||||
/* last disk without the by two multiplication */
|
||||
asm volatile ("vmovdqa %0,%%ymm4" : : "m" (v[l][i]));
|
||||
asm volatile ("vmovdqa %0,%%ymm12" : : "m" (v[l][i+32]));
|
||||
asm volatile ("vmovdqa %0,%%ymm12" : : "m" (v[l][i + 32]));
|
||||
|
||||
asm volatile ("vmovdqa %ymm4,%ymm0");
|
||||
asm volatile ("vmovdqa %ymm4,%ymm1");
|
||||
|
|
@ -606,9 +607,9 @@ void raid_gen3_avx2ext(int nd, size_t size, void **vv)
|
|||
asm volatile ("vpxor %ymm15,%ymm10,%ymm10");
|
||||
|
||||
/* intermediate disks */
|
||||
for (d = l-1; d > 0; --d) {
|
||||
for (d = l - 1; d > 0; --d) {
|
||||
asm volatile ("vmovdqa %0,%%ymm4" : : "m" (v[d][i]));
|
||||
asm volatile ("vmovdqa %0,%%ymm12" : : "m" (v[d][i+32]));
|
||||
asm volatile ("vmovdqa %0,%%ymm12" : : "m" (v[d][i + 32]));
|
||||
|
||||
asm volatile ("vpxor %ymm5,%ymm5,%ymm5");
|
||||
asm volatile ("vpxor %ymm13,%ymm13,%ymm13");
|
||||
|
|
@ -647,7 +648,7 @@ void raid_gen3_avx2ext(int nd, size_t size, void **vv)
|
|||
|
||||
/* first disk with all coefficients at 1 */
|
||||
asm volatile ("vmovdqa %0,%%ymm4" : : "m" (v[0][i]));
|
||||
asm volatile ("vmovdqa %0,%%ymm12" : : "m" (v[0][i+32]));
|
||||
asm volatile ("vmovdqa %0,%%ymm12" : : "m" (v[0][i + 32]));
|
||||
|
||||
asm volatile ("vpxor %ymm5,%ymm5,%ymm5");
|
||||
asm volatile ("vpxor %ymm13,%ymm13,%ymm13");
|
||||
|
|
@ -668,11 +669,11 @@ void raid_gen3_avx2ext(int nd, size_t size, void **vv)
|
|||
asm volatile ("vpxor %ymm12,%ymm10,%ymm10");
|
||||
|
||||
asm volatile ("vmovntdq %%ymm0,%0" : "=m" (p[i]));
|
||||
asm volatile ("vmovntdq %%ymm8,%0" : "=m" (p[i+32]));
|
||||
asm volatile ("vmovntdq %%ymm8,%0" : "=m" (p[i + 32]));
|
||||
asm volatile ("vmovntdq %%ymm1,%0" : "=m" (q[i]));
|
||||
asm volatile ("vmovntdq %%ymm9,%0" : "=m" (q[i+32]));
|
||||
asm volatile ("vmovntdq %%ymm9,%0" : "=m" (q[i + 32]));
|
||||
asm volatile ("vmovntdq %%ymm2,%0" : "=m" (r[i]));
|
||||
asm volatile ("vmovntdq %%ymm10,%0" : "=m" (r[i+32]));
|
||||
asm volatile ("vmovntdq %%ymm10,%0" : "=m" (r[i + 32]));
|
||||
}
|
||||
|
||||
raid_asm_clobber_ymm16();
|
||||
|
|
@ -687,7 +688,7 @@ void raid_gen3_avx2ext(int nd, size_t size, void **vv)
|
|||
*/
|
||||
void raid_gen4_ssse3(int nd, size_t size, void **vv)
|
||||
{
|
||||
uint8_t **v = (uint8_t **)vv;
|
||||
uint8_t **v = (uint8_t**)vv;
|
||||
uint8_t *p;
|
||||
uint8_t *q;
|
||||
uint8_t *r;
|
||||
|
|
@ -697,14 +698,14 @@ void raid_gen4_ssse3(int nd, size_t size, void **vv)
|
|||
|
||||
l = nd - 1;
|
||||
p = v[nd];
|
||||
q = v[nd+1];
|
||||
r = v[nd+2];
|
||||
s = v[nd+3];
|
||||
q = v[nd + 1];
|
||||
r = v[nd + 2];
|
||||
s = v[nd + 3];
|
||||
|
||||
/* special case with only one data disk */
|
||||
if (l == 0) {
|
||||
for (i = 0; i < 4; ++i)
|
||||
memcpy(v[1+i], v[0], size);
|
||||
memcpy(v[1 + i], v[0], size);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -737,7 +738,7 @@ void raid_gen4_ssse3(int nd, size_t size, void **vv)
|
|||
asm volatile ("pxor %xmm7,%xmm3");
|
||||
|
||||
/* intermediate disks */
|
||||
for (d = l-1; d > 0; --d) {
|
||||
for (d = l - 1; d > 0; --d) {
|
||||
asm volatile ("movdqa %0,%%xmm7" : : "m" (gfconst16.poly[0]));
|
||||
asm volatile ("movdqa %0,%%xmm4" : : "m" (v[d][i]));
|
||||
|
||||
|
|
@ -807,7 +808,7 @@ void raid_gen4_ssse3(int nd, size_t size, void **vv)
|
|||
*/
|
||||
void raid_gen4_ssse3ext(int nd, size_t size, void **vv)
|
||||
{
|
||||
uint8_t **v = (uint8_t **)vv;
|
||||
uint8_t **v = (uint8_t**)vv;
|
||||
uint8_t *p;
|
||||
uint8_t *q;
|
||||
uint8_t *r;
|
||||
|
|
@ -817,14 +818,14 @@ void raid_gen4_ssse3ext(int nd, size_t size, void **vv)
|
|||
|
||||
l = nd - 1;
|
||||
p = v[nd];
|
||||
q = v[nd+1];
|
||||
r = v[nd+2];
|
||||
s = v[nd+3];
|
||||
q = v[nd + 1];
|
||||
r = v[nd + 2];
|
||||
s = v[nd + 3];
|
||||
|
||||
/* special case with only one data disk */
|
||||
if (l == 0) {
|
||||
for (i = 0; i < 4; ++i)
|
||||
memcpy(v[1+i], v[0], size);
|
||||
memcpy(v[1 + i], v[0], size);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -835,7 +836,7 @@ void raid_gen4_ssse3ext(int nd, size_t size, void **vv)
|
|||
/* last disk without the by two multiplication */
|
||||
asm volatile ("movdqa %0,%%xmm15" : : "m" (gfconst16.low4[0]));
|
||||
asm volatile ("movdqa %0,%%xmm4" : : "m" (v[l][i]));
|
||||
asm volatile ("movdqa %0,%%xmm12" : : "m" (v[l][i+16]));
|
||||
asm volatile ("movdqa %0,%%xmm12" : : "m" (v[l][i + 16]));
|
||||
|
||||
asm volatile ("movdqa %xmm4,%xmm0");
|
||||
asm volatile ("movdqa %xmm4,%xmm1");
|
||||
|
|
@ -874,11 +875,11 @@ void raid_gen4_ssse3ext(int nd, size_t size, void **vv)
|
|||
asm volatile ("pxor %xmm15,%xmm11");
|
||||
|
||||
/* intermediate disks */
|
||||
for (d = l-1; d > 0; --d) {
|
||||
for (d = l - 1; d > 0; --d) {
|
||||
asm volatile ("movdqa %0,%%xmm7" : : "m" (gfconst16.poly[0]));
|
||||
asm volatile ("movdqa %0,%%xmm15" : : "m" (gfconst16.low4[0]));
|
||||
asm volatile ("movdqa %0,%%xmm4" : : "m" (v[d][i]));
|
||||
asm volatile ("movdqa %0,%%xmm12" : : "m" (v[d][i+16]));
|
||||
asm volatile ("movdqa %0,%%xmm12" : : "m" (v[d][i + 16]));
|
||||
|
||||
asm volatile ("pxor %xmm5,%xmm5");
|
||||
asm volatile ("pxor %xmm13,%xmm13");
|
||||
|
|
@ -936,7 +937,7 @@ void raid_gen4_ssse3ext(int nd, size_t size, void **vv)
|
|||
asm volatile ("movdqa %0,%%xmm7" : : "m" (gfconst16.poly[0]));
|
||||
asm volatile ("movdqa %0,%%xmm15" : : "m" (gfconst16.low4[0]));
|
||||
asm volatile ("movdqa %0,%%xmm4" : : "m" (v[0][i]));
|
||||
asm volatile ("movdqa %0,%%xmm12" : : "m" (v[0][i+16]));
|
||||
asm volatile ("movdqa %0,%%xmm12" : : "m" (v[0][i + 16]));
|
||||
|
||||
asm volatile ("pxor %xmm5,%xmm5");
|
||||
asm volatile ("pxor %xmm13,%xmm13");
|
||||
|
|
@ -959,13 +960,13 @@ void raid_gen4_ssse3ext(int nd, size_t size, void **vv)
|
|||
asm volatile ("pxor %xmm12,%xmm11");
|
||||
|
||||
asm volatile ("movntdq %%xmm0,%0" : "=m" (p[i]));
|
||||
asm volatile ("movntdq %%xmm8,%0" : "=m" (p[i+16]));
|
||||
asm volatile ("movntdq %%xmm8,%0" : "=m" (p[i + 16]));
|
||||
asm volatile ("movntdq %%xmm1,%0" : "=m" (q[i]));
|
||||
asm volatile ("movntdq %%xmm9,%0" : "=m" (q[i+16]));
|
||||
asm volatile ("movntdq %%xmm9,%0" : "=m" (q[i + 16]));
|
||||
asm volatile ("movntdq %%xmm2,%0" : "=m" (r[i]));
|
||||
asm volatile ("movntdq %%xmm10,%0" : "=m" (r[i+16]));
|
||||
asm volatile ("movntdq %%xmm10,%0" : "=m" (r[i + 16]));
|
||||
asm volatile ("movntdq %%xmm3,%0" : "=m" (s[i]));
|
||||
asm volatile ("movntdq %%xmm11,%0" : "=m" (s[i+16]));
|
||||
asm volatile ("movntdq %%xmm11,%0" : "=m" (s[i + 16]));
|
||||
}
|
||||
|
||||
raid_asm_clobber_xmm16();
|
||||
|
|
@ -982,7 +983,7 @@ void raid_gen4_ssse3ext(int nd, size_t size, void **vv)
|
|||
*/
|
||||
void raid_gen4_avx2ext(int nd, size_t size, void **vv)
|
||||
{
|
||||
uint8_t **v = (uint8_t **)vv;
|
||||
uint8_t **v = (uint8_t**)vv;
|
||||
uint8_t *p;
|
||||
uint8_t *q;
|
||||
uint8_t *r;
|
||||
|
|
@ -992,14 +993,14 @@ void raid_gen4_avx2ext(int nd, size_t size, void **vv)
|
|||
|
||||
l = nd - 1;
|
||||
p = v[nd];
|
||||
q = v[nd+1];
|
||||
r = v[nd+2];
|
||||
s = v[nd+3];
|
||||
q = v[nd + 1];
|
||||
r = v[nd + 2];
|
||||
s = v[nd + 3];
|
||||
|
||||
/* special case with only one data disk */
|
||||
if (l == 0) {
|
||||
for (i = 0; i < 4; ++i)
|
||||
memcpy(v[1+i], v[0], size);
|
||||
memcpy(v[1 + i], v[0], size);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -1010,7 +1011,7 @@ void raid_gen4_avx2ext(int nd, size_t size, void **vv)
|
|||
/* last disk without the by two multiplication */
|
||||
asm volatile ("vbroadcasti128 %0,%%ymm15" : : "m" (gfconst16.low4[0]));
|
||||
asm volatile ("vmovdqa %0,%%ymm4" : : "m" (v[l][i]));
|
||||
asm volatile ("vmovdqa %0,%%ymm12" : : "m" (v[l][i+32]));
|
||||
asm volatile ("vmovdqa %0,%%ymm12" : : "m" (v[l][i + 32]));
|
||||
|
||||
asm volatile ("vmovdqa %ymm4,%ymm0");
|
||||
asm volatile ("vmovdqa %ymm4,%ymm1");
|
||||
|
|
@ -1043,11 +1044,11 @@ void raid_gen4_avx2ext(int nd, size_t size, void **vv)
|
|||
asm volatile ("vpxor %ymm15,%ymm11,%ymm11");
|
||||
|
||||
/* intermediate disks */
|
||||
for (d = l-1; d > 0; --d) {
|
||||
for (d = l - 1; d > 0; --d) {
|
||||
asm volatile ("vbroadcasti128 %0,%%ymm7" : : "m" (gfconst16.poly[0]));
|
||||
asm volatile ("vbroadcasti128 %0,%%ymm15" : : "m" (gfconst16.low4[0]));
|
||||
asm volatile ("vmovdqa %0,%%ymm4" : : "m" (v[d][i]));
|
||||
asm volatile ("vmovdqa %0,%%ymm12" : : "m" (v[d][i+32]));
|
||||
asm volatile ("vmovdqa %0,%%ymm12" : : "m" (v[d][i + 32]));
|
||||
|
||||
asm volatile ("vpxor %ymm5,%ymm5,%ymm5");
|
||||
asm volatile ("vpxor %ymm13,%ymm13,%ymm13");
|
||||
|
|
@ -1099,7 +1100,7 @@ void raid_gen4_avx2ext(int nd, size_t size, void **vv)
|
|||
asm volatile ("vbroadcasti128 %0,%%ymm7" : : "m" (gfconst16.poly[0]));
|
||||
asm volatile ("vbroadcasti128 %0,%%ymm15" : : "m" (gfconst16.low4[0]));
|
||||
asm volatile ("vmovdqa %0,%%ymm4" : : "m" (v[0][i]));
|
||||
asm volatile ("vmovdqa %0,%%ymm12" : : "m" (v[0][i+32]));
|
||||
asm volatile ("vmovdqa %0,%%ymm12" : : "m" (v[0][i + 32]));
|
||||
|
||||
asm volatile ("vpxor %ymm5,%ymm5,%ymm5");
|
||||
asm volatile ("vpxor %ymm13,%ymm13,%ymm13");
|
||||
|
|
@ -1122,13 +1123,13 @@ void raid_gen4_avx2ext(int nd, size_t size, void **vv)
|
|||
asm volatile ("vpxor %ymm12,%ymm11,%ymm11");
|
||||
|
||||
asm volatile ("vmovntdq %%ymm0,%0" : "=m" (p[i]));
|
||||
asm volatile ("vmovntdq %%ymm8,%0" : "=m" (p[i+32]));
|
||||
asm volatile ("vmovntdq %%ymm8,%0" : "=m" (p[i + 32]));
|
||||
asm volatile ("vmovntdq %%ymm1,%0" : "=m" (q[i]));
|
||||
asm volatile ("vmovntdq %%ymm9,%0" : "=m" (q[i+32]));
|
||||
asm volatile ("vmovntdq %%ymm9,%0" : "=m" (q[i + 32]));
|
||||
asm volatile ("vmovntdq %%ymm2,%0" : "=m" (r[i]));
|
||||
asm volatile ("vmovntdq %%ymm10,%0" : "=m" (r[i+32]));
|
||||
asm volatile ("vmovntdq %%ymm10,%0" : "=m" (r[i + 32]));
|
||||
asm volatile ("vmovntdq %%ymm3,%0" : "=m" (s[i]));
|
||||
asm volatile ("vmovntdq %%ymm11,%0" : "=m" (s[i+32]));
|
||||
asm volatile ("vmovntdq %%ymm11,%0" : "=m" (s[i + 32]));
|
||||
}
|
||||
|
||||
raid_asm_clobber_ymm16();
|
||||
|
|
@ -1147,7 +1148,7 @@ __attribute__((force_align_arg_pointer))
|
|||
#endif
|
||||
void raid_gen5_ssse3(int nd, size_t size, void **vv)
|
||||
{
|
||||
uint8_t **v = (uint8_t **)vv;
|
||||
uint8_t **v = (uint8_t**)vv;
|
||||
uint8_t *p;
|
||||
uint8_t *q;
|
||||
uint8_t *r;
|
||||
|
|
@ -1159,15 +1160,15 @@ void raid_gen5_ssse3(int nd, size_t size, void **vv)
|
|||
|
||||
l = nd - 1;
|
||||
p = v[nd];
|
||||
q = v[nd+1];
|
||||
r = v[nd+2];
|
||||
s = v[nd+3];
|
||||
t = v[nd+4];
|
||||
q = v[nd + 1];
|
||||
r = v[nd + 2];
|
||||
s = v[nd + 3];
|
||||
t = v[nd + 4];
|
||||
|
||||
/* special case with only one data disk */
|
||||
if (l == 0) {
|
||||
for (i = 0; i < 5; ++i)
|
||||
memcpy(v[1+i], v[0], size);
|
||||
memcpy(v[1 + i], v[0], size);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -1206,7 +1207,7 @@ void raid_gen5_ssse3(int nd, size_t size, void **vv)
|
|||
asm volatile ("pxor %xmm7,%xmm3");
|
||||
|
||||
/* intermediate disks */
|
||||
for (d = l-1; d > 0; --d) {
|
||||
for (d = l - 1; d > 0; --d) {
|
||||
asm volatile ("movdqa %0,%%xmm4" : : "m" (v[d][i]));
|
||||
asm volatile ("movdqa %0,%%xmm6" : : "m" (p0[0]));
|
||||
asm volatile ("movdqa %0,%%xmm7" : : "m" (gfconst16.poly[0]));
|
||||
|
|
@ -1287,7 +1288,7 @@ void raid_gen5_ssse3(int nd, size_t size, void **vv)
|
|||
*/
|
||||
void raid_gen5_ssse3ext(int nd, size_t size, void **vv)
|
||||
{
|
||||
uint8_t **v = (uint8_t **)vv;
|
||||
uint8_t **v = (uint8_t**)vv;
|
||||
uint8_t *p;
|
||||
uint8_t *q;
|
||||
uint8_t *r;
|
||||
|
|
@ -1298,15 +1299,15 @@ void raid_gen5_ssse3ext(int nd, size_t size, void **vv)
|
|||
|
||||
l = nd - 1;
|
||||
p = v[nd];
|
||||
q = v[nd+1];
|
||||
r = v[nd+2];
|
||||
s = v[nd+3];
|
||||
t = v[nd+4];
|
||||
q = v[nd + 1];
|
||||
r = v[nd + 2];
|
||||
s = v[nd + 3];
|
||||
t = v[nd + 4];
|
||||
|
||||
/* special case with only one data disk */
|
||||
if (l == 0) {
|
||||
for (i = 0; i < 5; ++i)
|
||||
memcpy(v[1+i], v[0], size);
|
||||
memcpy(v[1 + i], v[0], size);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -1347,7 +1348,7 @@ void raid_gen5_ssse3ext(int nd, size_t size, void **vv)
|
|||
asm volatile ("pxor %xmm13,%xmm4");
|
||||
|
||||
/* intermediate disks */
|
||||
for (d = l-1; d > 0; --d) {
|
||||
for (d = l - 1; d > 0; --d) {
|
||||
asm volatile ("movdqa %0,%%xmm10" : : "m" (v[d][i]));
|
||||
|
||||
asm volatile ("pxor %xmm11,%xmm11");
|
||||
|
|
@ -1422,7 +1423,7 @@ void raid_gen5_ssse3ext(int nd, size_t size, void **vv)
|
|||
*/
|
||||
void raid_gen5_avx2ext(int nd, size_t size, void **vv)
|
||||
{
|
||||
uint8_t **v = (uint8_t **)vv;
|
||||
uint8_t **v = (uint8_t**)vv;
|
||||
uint8_t *p;
|
||||
uint8_t *q;
|
||||
uint8_t *r;
|
||||
|
|
@ -1433,15 +1434,15 @@ void raid_gen5_avx2ext(int nd, size_t size, void **vv)
|
|||
|
||||
l = nd - 1;
|
||||
p = v[nd];
|
||||
q = v[nd+1];
|
||||
r = v[nd+2];
|
||||
s = v[nd+3];
|
||||
t = v[nd+4];
|
||||
q = v[nd + 1];
|
||||
r = v[nd + 2];
|
||||
s = v[nd + 3];
|
||||
t = v[nd + 4];
|
||||
|
||||
/* special case with only one data disk */
|
||||
if (l == 0) {
|
||||
for (i = 0; i < 5; ++i)
|
||||
memcpy(v[1+i], v[0], size);
|
||||
memcpy(v[1 + i], v[0], size);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -1482,7 +1483,7 @@ void raid_gen5_avx2ext(int nd, size_t size, void **vv)
|
|||
asm volatile ("vpxor %ymm13,%ymm4,%ymm4");
|
||||
|
||||
/* intermediate disks */
|
||||
for (d = l-1; d > 0; --d) {
|
||||
for (d = l - 1; d > 0; --d) {
|
||||
asm volatile ("vmovdqa %0,%%ymm10" : : "m" (v[d][i]));
|
||||
|
||||
asm volatile ("vpcmpgtb %ymm1,%ymm8,%ymm11");
|
||||
|
|
@ -1556,7 +1557,7 @@ __attribute__((force_align_arg_pointer))
|
|||
#endif
|
||||
void raid_gen6_ssse3(int nd, size_t size, void **vv)
|
||||
{
|
||||
uint8_t **v = (uint8_t **)vv;
|
||||
uint8_t **v = (uint8_t**)vv;
|
||||
uint8_t *p;
|
||||
uint8_t *q;
|
||||
uint8_t *r;
|
||||
|
|
@ -1570,16 +1571,16 @@ void raid_gen6_ssse3(int nd, size_t size, void **vv)
|
|||
|
||||
l = nd - 1;
|
||||
p = v[nd];
|
||||
q = v[nd+1];
|
||||
r = v[nd+2];
|
||||
s = v[nd+3];
|
||||
t = v[nd+4];
|
||||
u = v[nd+5];
|
||||
q = v[nd + 1];
|
||||
r = v[nd + 2];
|
||||
s = v[nd + 3];
|
||||
t = v[nd + 4];
|
||||
u = v[nd + 5];
|
||||
|
||||
/* special case with only one data disk */
|
||||
if (l == 0) {
|
||||
for (i = 0; i < 6; ++i)
|
||||
memcpy(v[1+i], v[0], size);
|
||||
memcpy(v[1 + i], v[0], size);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -1624,7 +1625,7 @@ void raid_gen6_ssse3(int nd, size_t size, void **vv)
|
|||
asm volatile ("pxor %xmm7,%xmm3");
|
||||
|
||||
/* intermediate disks */
|
||||
for (d = l-1; d > 0; --d) {
|
||||
for (d = l - 1; d > 0; --d) {
|
||||
asm volatile ("movdqa %0,%%xmm5" : : "m" (p0[0]));
|
||||
asm volatile ("movdqa %0,%%xmm6" : : "m" (q0[0]));
|
||||
asm volatile ("movdqa %0,%%xmm7" : : "m" (gfconst16.poly[0]));
|
||||
|
|
@ -1718,7 +1719,7 @@ void raid_gen6_ssse3(int nd, size_t size, void **vv)
|
|||
*/
|
||||
void raid_gen6_ssse3ext(int nd, size_t size, void **vv)
|
||||
{
|
||||
uint8_t **v = (uint8_t **)vv;
|
||||
uint8_t **v = (uint8_t**)vv;
|
||||
uint8_t *p;
|
||||
uint8_t *q;
|
||||
uint8_t *r;
|
||||
|
|
@ -1730,16 +1731,16 @@ void raid_gen6_ssse3ext(int nd, size_t size, void **vv)
|
|||
|
||||
l = nd - 1;
|
||||
p = v[nd];
|
||||
q = v[nd+1];
|
||||
r = v[nd+2];
|
||||
s = v[nd+3];
|
||||
t = v[nd+4];
|
||||
u = v[nd+5];
|
||||
q = v[nd + 1];
|
||||
r = v[nd + 2];
|
||||
s = v[nd + 3];
|
||||
t = v[nd + 4];
|
||||
u = v[nd + 5];
|
||||
|
||||
/* special case with only one data disk */
|
||||
if (l == 0) {
|
||||
for (i = 0; i < 6; ++i)
|
||||
memcpy(v[1+i], v[0], size);
|
||||
memcpy(v[1 + i], v[0], size);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -1786,7 +1787,7 @@ void raid_gen6_ssse3ext(int nd, size_t size, void **vv)
|
|||
asm volatile ("pxor %xmm13,%xmm5");
|
||||
|
||||
/* intermediate disks */
|
||||
for (d = l-1; d > 0; --d) {
|
||||
for (d = l - 1; d > 0; --d) {
|
||||
asm volatile ("movdqa %0,%%xmm10" : : "m" (v[d][i]));
|
||||
|
||||
asm volatile ("pxor %xmm11,%xmm11");
|
||||
|
|
@ -1870,7 +1871,7 @@ void raid_gen6_ssse3ext(int nd, size_t size, void **vv)
|
|||
*/
|
||||
void raid_gen6_avx2ext(int nd, size_t size, void **vv)
|
||||
{
|
||||
uint8_t **v = (uint8_t **)vv;
|
||||
uint8_t **v = (uint8_t**)vv;
|
||||
uint8_t *p;
|
||||
uint8_t *q;
|
||||
uint8_t *r;
|
||||
|
|
@ -1882,16 +1883,16 @@ void raid_gen6_avx2ext(int nd, size_t size, void **vv)
|
|||
|
||||
l = nd - 1;
|
||||
p = v[nd];
|
||||
q = v[nd+1];
|
||||
r = v[nd+2];
|
||||
s = v[nd+3];
|
||||
t = v[nd+4];
|
||||
u = v[nd+5];
|
||||
q = v[nd + 1];
|
||||
r = v[nd + 2];
|
||||
s = v[nd + 3];
|
||||
t = v[nd + 4];
|
||||
u = v[nd + 5];
|
||||
|
||||
/* special case with only one data disk */
|
||||
if (l == 0) {
|
||||
for (i = 0; i < 6; ++i)
|
||||
memcpy(v[1+i], v[0], size);
|
||||
memcpy(v[1 + i], v[0], size);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -1938,7 +1939,7 @@ void raid_gen6_avx2ext(int nd, size_t size, void **vv)
|
|||
asm volatile ("vpxor %ymm13,%ymm5,%ymm5");
|
||||
|
||||
/* intermediate disks */
|
||||
for (d = l-1; d > 0; --d) {
|
||||
for (d = l - 1; d > 0; --d) {
|
||||
asm volatile ("vmovdqa %0,%%ymm10" : : "m" (v[d][i]));
|
||||
|
||||
asm volatile ("vpcmpgtb %ymm1,%ymm8,%ymm11");
|
||||
|
|
@ -2017,7 +2018,7 @@ void raid_gen6_avx2ext(int nd, size_t size, void **vv)
|
|||
*/
|
||||
void raid_rec1_ssse3(int nr, int *id, int *ip, int nd, size_t size, void **vv)
|
||||
{
|
||||
uint8_t **v = (uint8_t **)vv;
|
||||
uint8_t **v = (uint8_t**)vv;
|
||||
uint8_t *p;
|
||||
uint8_t *pa;
|
||||
uint8_t G;
|
||||
|
|
@ -2041,7 +2042,7 @@ void raid_rec1_ssse3(int nr, int *id, int *ip, int nd, size_t size, void **vv)
|
|||
/* compute delta parity */
|
||||
raid_delta_gen(1, id, ip, nd, size, vv);
|
||||
|
||||
p = v[nd+ip[0]];
|
||||
p = v[nd + ip[0]];
|
||||
pa = v[id[0]];
|
||||
|
||||
raid_asm_begin();
|
||||
|
|
@ -2078,12 +2079,12 @@ void raid_rec1_ssse3(int nr, int *id, int *ip, int nd, size_t size, void **vv)
|
|||
*/
|
||||
void raid_rec2_ssse3(int nr, int *id, int *ip, int nd, size_t size, void **vv)
|
||||
{
|
||||
uint8_t **v = (uint8_t **)vv;
|
||||
uint8_t **v = (uint8_t**)vv;
|
||||
const int N = 2;
|
||||
uint8_t *p[N];
|
||||
uint8_t *pa[N];
|
||||
uint8_t G[N*N];
|
||||
uint8_t V[N*N];
|
||||
uint8_t G[N * N];
|
||||
uint8_t V[N * N];
|
||||
size_t i;
|
||||
int j, k;
|
||||
|
||||
|
|
@ -2092,7 +2093,7 @@ void raid_rec2_ssse3(int nr, int *id, int *ip, int nd, size_t size, void **vv)
|
|||
/* setup the coefficients matrix */
|
||||
for (j = 0; j < N; ++j)
|
||||
for (k = 0; k < N; ++k)
|
||||
G[j*N+k] = A(ip[j], id[k]);
|
||||
G[j * N + k] = A(ip[j], id[k]);
|
||||
|
||||
/* invert it to solve the system of linear equations */
|
||||
raid_invert(G, V, N);
|
||||
|
|
@ -2101,7 +2102,7 @@ void raid_rec2_ssse3(int nr, int *id, int *ip, int nd, size_t size, void **vv)
|
|||
raid_delta_gen(N, id, ip, nd, size, vv);
|
||||
|
||||
for (j = 0; j < N; ++j) {
|
||||
p[j] = v[nd+ip[j]];
|
||||
p[j] = v[nd + ip[j]];
|
||||
pa[j] = v[id[j]];
|
||||
}
|
||||
|
||||
|
|
@ -2186,19 +2187,19 @@ void raid_rec2_ssse3(int nr, int *id, int *ip, int nd, size_t size, void **vv)
|
|||
*/
|
||||
void raid_recX_ssse3(int nr, int *id, int *ip, int nd, size_t size, void **vv)
|
||||
{
|
||||
uint8_t **v = (uint8_t **)vv;
|
||||
uint8_t **v = (uint8_t**)vv;
|
||||
int N = nr;
|
||||
uint8_t *p[RAID_PARITY_MAX];
|
||||
uint8_t *pa[RAID_PARITY_MAX];
|
||||
uint8_t G[RAID_PARITY_MAX*RAID_PARITY_MAX];
|
||||
uint8_t V[RAID_PARITY_MAX*RAID_PARITY_MAX];
|
||||
uint8_t G[RAID_PARITY_MAX * RAID_PARITY_MAX];
|
||||
uint8_t V[RAID_PARITY_MAX * RAID_PARITY_MAX];
|
||||
size_t i;
|
||||
int j, k;
|
||||
|
||||
/* setup the coefficients matrix */
|
||||
for (j = 0; j < N; ++j)
|
||||
for (k = 0; k < N; ++k)
|
||||
G[j*N+k] = A(ip[j], id[k]);
|
||||
G[j * N + k] = A(ip[j], id[k]);
|
||||
|
||||
/* invert it to solve the system of linear equations */
|
||||
raid_invert(G, V, N);
|
||||
|
|
@ -2207,7 +2208,7 @@ void raid_recX_ssse3(int nr, int *id, int *ip, int nd, size_t size, void **vv)
|
|||
raid_delta_gen(N, id, ip, nd, size, vv);
|
||||
|
||||
for (j = 0; j < N; ++j) {
|
||||
p[j] = v[nd+ip[j]];
|
||||
p[j] = v[nd + ip[j]];
|
||||
pa[j] = v[id[j]];
|
||||
}
|
||||
|
||||
|
|
@ -2232,7 +2233,7 @@ void raid_recX_ssse3(int nr, int *id, int *ip, int nd, size_t size, void **vv)
|
|||
asm volatile ("pxor %xmm1,%xmm1");
|
||||
|
||||
for (k = 0; k < N; ++k) {
|
||||
uint8_t m = V[j*N+k];
|
||||
uint8_t m = V[j * N + k];
|
||||
|
||||
asm volatile ("movdqa %0,%%xmm2" : : "m" (gfmulpshufb[m][0][0]));
|
||||
asm volatile ("movdqa %0,%%xmm3" : : "m" (gfmulpshufb[m][1][0]));
|
||||
|
|
@ -2265,7 +2266,7 @@ void raid_recX_ssse3(int nr, int *id, int *ip, int nd, size_t size, void **vv)
|
|||
*/
|
||||
void raid_rec1_avx2(int nr, int *id, int *ip, int nd, size_t size, void **vv)
|
||||
{
|
||||
uint8_t **v = (uint8_t **)vv;
|
||||
uint8_t **v = (uint8_t**)vv;
|
||||
uint8_t *p;
|
||||
uint8_t *pa;
|
||||
uint8_t G;
|
||||
|
|
@ -2289,7 +2290,7 @@ void raid_rec1_avx2(int nr, int *id, int *ip, int nd, size_t size, void **vv)
|
|||
/* compute delta parity */
|
||||
raid_delta_gen(1, id, ip, nd, size, vv);
|
||||
|
||||
p = v[nd+ip[0]];
|
||||
p = v[nd + ip[0]];
|
||||
pa = v[id[0]];
|
||||
|
||||
raid_asm_begin();
|
||||
|
|
@ -2323,12 +2324,12 @@ void raid_rec1_avx2(int nr, int *id, int *ip, int nd, size_t size, void **vv)
|
|||
*/
|
||||
void raid_rec2_avx2(int nr, int *id, int *ip, int nd, size_t size, void **vv)
|
||||
{
|
||||
uint8_t **v = (uint8_t **)vv;
|
||||
uint8_t **v = (uint8_t**)vv;
|
||||
const int N = 2;
|
||||
uint8_t *p[N];
|
||||
uint8_t *pa[N];
|
||||
uint8_t G[N*N];
|
||||
uint8_t V[N*N];
|
||||
uint8_t G[N * N];
|
||||
uint8_t V[N * N];
|
||||
size_t i;
|
||||
int j, k;
|
||||
|
||||
|
|
@ -2337,7 +2338,7 @@ void raid_rec2_avx2(int nr, int *id, int *ip, int nd, size_t size, void **vv)
|
|||
/* setup the coefficients matrix */
|
||||
for (j = 0; j < N; ++j)
|
||||
for (k = 0; k < N; ++k)
|
||||
G[j*N+k] = A(ip[j], id[k]);
|
||||
G[j * N + k] = A(ip[j], id[k]);
|
||||
|
||||
/* invert it to solve the system of linear equations */
|
||||
raid_invert(G, V, N);
|
||||
|
|
@ -2346,7 +2347,7 @@ void raid_rec2_avx2(int nr, int *id, int *ip, int nd, size_t size, void **vv)
|
|||
raid_delta_gen(N, id, ip, nd, size, vv);
|
||||
|
||||
for (j = 0; j < N; ++j) {
|
||||
p[j] = v[nd+ip[j]];
|
||||
p[j] = v[nd + ip[j]];
|
||||
pa[j] = v[id[j]];
|
||||
}
|
||||
|
||||
|
|
@ -2423,19 +2424,19 @@ void raid_rec2_avx2(int nr, int *id, int *ip, int nd, size_t size, void **vv)
|
|||
*/
|
||||
void raid_recX_avx2(int nr, int *id, int *ip, int nd, size_t size, void **vv)
|
||||
{
|
||||
uint8_t **v = (uint8_t **)vv;
|
||||
uint8_t **v = (uint8_t**)vv;
|
||||
int N = nr;
|
||||
uint8_t *p[RAID_PARITY_MAX];
|
||||
uint8_t *pa[RAID_PARITY_MAX];
|
||||
uint8_t G[RAID_PARITY_MAX*RAID_PARITY_MAX];
|
||||
uint8_t V[RAID_PARITY_MAX*RAID_PARITY_MAX];
|
||||
uint8_t G[RAID_PARITY_MAX * RAID_PARITY_MAX];
|
||||
uint8_t V[RAID_PARITY_MAX * RAID_PARITY_MAX];
|
||||
size_t i;
|
||||
int j, k;
|
||||
|
||||
/* setup the coefficients matrix */
|
||||
for (j = 0; j < N; ++j)
|
||||
for (k = 0; k < N; ++k)
|
||||
G[j*N+k] = A(ip[j], id[k]);
|
||||
G[j * N + k] = A(ip[j], id[k]);
|
||||
|
||||
/* invert it to solve the system of linear equations */
|
||||
raid_invert(G, V, N);
|
||||
|
|
@ -2444,7 +2445,7 @@ void raid_recX_avx2(int nr, int *id, int *ip, int nd, size_t size, void **vv)
|
|||
raid_delta_gen(N, id, ip, nd, size, vv);
|
||||
|
||||
for (j = 0; j < N; ++j) {
|
||||
p[j] = v[nd+ip[j]];
|
||||
p[j] = v[nd + ip[j]];
|
||||
pa[j] = v[id[j]];
|
||||
}
|
||||
|
||||
|
|
@ -2469,7 +2470,7 @@ void raid_recX_avx2(int nr, int *id, int *ip, int nd, size_t size, void **vv)
|
|||
asm volatile ("vpxor %ymm1,%ymm1,%ymm1");
|
||||
|
||||
for (k = 0; k < N; ++k) {
|
||||
uint8_t m = V[j*N+k];
|
||||
uint8_t m = V[j * N + k];
|
||||
|
||||
asm volatile ("vbroadcasti128 %0,%%ymm2" : : "m" (gfmulpshufb[m][0][0]));
|
||||
asm volatile ("vbroadcasti128 %0,%%ymm3" : : "m" (gfmulpshufb[m][1][0]));
|
||||
|
|
|
|||
48
raid/x86z.c
48
raid/x86z.c
|
|
@ -19,7 +19,8 @@ static const struct gfzconst16 {
|
|||
uint8_t poly[16];
|
||||
uint8_t half[16];
|
||||
uint8_t low7[16];
|
||||
} gfzconst16 __aligned(64) = {
|
||||
} gfzconst16 __aligned(64) =
|
||||
{
|
||||
{
|
||||
0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d,
|
||||
0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d
|
||||
|
|
@ -41,7 +42,7 @@ static const struct gfzconst16 {
|
|||
*/
|
||||
void raid_genz_sse2(int nd, size_t size, void **vv)
|
||||
{
|
||||
uint8_t **v = (uint8_t **)vv;
|
||||
uint8_t **v = (uint8_t**)vv;
|
||||
uint8_t *p;
|
||||
uint8_t *q;
|
||||
uint8_t *r;
|
||||
|
|
@ -50,8 +51,8 @@ void raid_genz_sse2(int nd, size_t size, void **vv)
|
|||
|
||||
l = nd - 1;
|
||||
p = v[nd];
|
||||
q = v[nd+1];
|
||||
r = v[nd+2];
|
||||
q = v[nd + 1];
|
||||
r = v[nd + 2];
|
||||
|
||||
raid_asm_begin();
|
||||
|
||||
|
|
@ -63,7 +64,7 @@ void raid_genz_sse2(int nd, size_t size, void **vv)
|
|||
asm volatile ("movdqa %0,%%xmm0" : : "m" (v[l][i]));
|
||||
asm volatile ("movdqa %xmm0,%xmm1");
|
||||
asm volatile ("movdqa %xmm0,%xmm2");
|
||||
for (d = l-1; d >= 0; --d) {
|
||||
for (d = l - 1; d >= 0; --d) {
|
||||
asm volatile ("pxor %xmm4,%xmm4");
|
||||
asm volatile ("pcmpgtb %xmm1,%xmm4");
|
||||
asm volatile ("paddb %xmm1,%xmm1");
|
||||
|
|
@ -103,7 +104,7 @@ void raid_genz_sse2(int nd, size_t size, void **vv)
|
|||
*/
|
||||
void raid_genz_sse2ext(int nd, size_t size, void **vv)
|
||||
{
|
||||
uint8_t **v = (uint8_t **)vv;
|
||||
uint8_t **v = (uint8_t**)vv;
|
||||
uint8_t *p;
|
||||
uint8_t *q;
|
||||
uint8_t *r;
|
||||
|
|
@ -112,8 +113,8 @@ void raid_genz_sse2ext(int nd, size_t size, void **vv)
|
|||
|
||||
l = nd - 1;
|
||||
p = v[nd];
|
||||
q = v[nd+1];
|
||||
r = v[nd+2];
|
||||
q = v[nd + 1];
|
||||
r = v[nd + 2];
|
||||
|
||||
raid_asm_begin();
|
||||
|
||||
|
|
@ -123,12 +124,12 @@ void raid_genz_sse2ext(int nd, size_t size, void **vv)
|
|||
|
||||
for (i = 0; i < size; i += 32) {
|
||||
asm volatile ("movdqa %0,%%xmm0" : : "m" (v[l][i]));
|
||||
asm volatile ("movdqa %0,%%xmm8" : : "m" (v[l][i+16]));
|
||||
asm volatile ("movdqa %0,%%xmm8" : : "m" (v[l][i + 16]));
|
||||
asm volatile ("movdqa %xmm0,%xmm1");
|
||||
asm volatile ("movdqa %xmm8,%xmm9");
|
||||
asm volatile ("movdqa %xmm0,%xmm2");
|
||||
asm volatile ("movdqa %xmm8,%xmm10");
|
||||
for (d = l-1; d >= 0; --d) {
|
||||
for (d = l - 1; d >= 0; --d) {
|
||||
asm volatile ("movdqa %xmm2,%xmm6");
|
||||
asm volatile ("movdqa %xmm10,%xmm14");
|
||||
asm volatile ("pxor %xmm4,%xmm4");
|
||||
|
|
@ -157,7 +158,7 @@ void raid_genz_sse2ext(int nd, size_t size, void **vv)
|
|||
asm volatile ("pxor %xmm13,%xmm10");
|
||||
|
||||
asm volatile ("movdqa %0,%%xmm4" : : "m" (v[d][i]));
|
||||
asm volatile ("movdqa %0,%%xmm12" : : "m" (v[d][i+16]));
|
||||
asm volatile ("movdqa %0,%%xmm12" : : "m" (v[d][i + 16]));
|
||||
asm volatile ("pxor %xmm4,%xmm0");
|
||||
asm volatile ("pxor %xmm4,%xmm1");
|
||||
asm volatile ("pxor %xmm4,%xmm2");
|
||||
|
|
@ -166,11 +167,11 @@ void raid_genz_sse2ext(int nd, size_t size, void **vv)
|
|||
asm volatile ("pxor %xmm12,%xmm10");
|
||||
}
|
||||
asm volatile ("movntdq %%xmm0,%0" : "=m" (p[i]));
|
||||
asm volatile ("movntdq %%xmm8,%0" : "=m" (p[i+16]));
|
||||
asm volatile ("movntdq %%xmm8,%0" : "=m" (p[i + 16]));
|
||||
asm volatile ("movntdq %%xmm1,%0" : "=m" (q[i]));
|
||||
asm volatile ("movntdq %%xmm9,%0" : "=m" (q[i+16]));
|
||||
asm volatile ("movntdq %%xmm9,%0" : "=m" (q[i + 16]));
|
||||
asm volatile ("movntdq %%xmm2,%0" : "=m" (r[i]));
|
||||
asm volatile ("movntdq %%xmm10,%0" : "=m" (r[i+16]));
|
||||
asm volatile ("movntdq %%xmm10,%0" : "=m" (r[i + 16]));
|
||||
}
|
||||
|
||||
raid_asm_clobber_xmm16();
|
||||
|
|
@ -187,7 +188,7 @@ void raid_genz_sse2ext(int nd, size_t size, void **vv)
|
|||
*/
|
||||
void raid_genz_avx2ext(int nd, size_t size, void **vv)
|
||||
{
|
||||
uint8_t **v = (uint8_t **)vv;
|
||||
uint8_t **v = (uint8_t**)vv;
|
||||
uint8_t *p;
|
||||
uint8_t *q;
|
||||
uint8_t *r;
|
||||
|
|
@ -196,8 +197,8 @@ void raid_genz_avx2ext(int nd, size_t size, void **vv)
|
|||
|
||||
l = nd - 1;
|
||||
p = v[nd];
|
||||
q = v[nd+1];
|
||||
r = v[nd+2];
|
||||
q = v[nd + 1];
|
||||
r = v[nd + 2];
|
||||
|
||||
raid_asm_begin();
|
||||
|
||||
|
|
@ -208,12 +209,12 @@ void raid_genz_avx2ext(int nd, size_t size, void **vv)
|
|||
|
||||
for (i = 0; i < size; i += 64) {
|
||||
asm volatile ("vmovdqa %0,%%ymm0" : : "m" (v[l][i]));
|
||||
asm volatile ("vmovdqa %0,%%ymm8" : : "m" (v[l][i+32]));
|
||||
asm volatile ("vmovdqa %0,%%ymm8" : : "m" (v[l][i + 32]));
|
||||
asm volatile ("vmovdqa %ymm0,%ymm1");
|
||||
asm volatile ("vmovdqa %ymm8,%ymm9");
|
||||
asm volatile ("vmovdqa %ymm0,%ymm2");
|
||||
asm volatile ("vmovdqa %ymm8,%ymm10");
|
||||
for (d = l-1; d >= 0; --d) {
|
||||
for (d = l - 1; d >= 0; --d) {
|
||||
asm volatile ("vpsllw $7,%ymm2,%ymm6");
|
||||
asm volatile ("vpsllw $7,%ymm10,%ymm14");
|
||||
asm volatile ("vpsrlw $1,%ymm2,%ymm2");
|
||||
|
|
@ -236,7 +237,7 @@ void raid_genz_avx2ext(int nd, size_t size, void **vv)
|
|||
asm volatile ("vpxor %ymm13,%ymm10,%ymm10");
|
||||
|
||||
asm volatile ("vmovdqa %0,%%ymm4" : : "m" (v[d][i]));
|
||||
asm volatile ("vmovdqa %0,%%ymm12" : : "m" (v[d][i+32]));
|
||||
asm volatile ("vmovdqa %0,%%ymm12" : : "m" (v[d][i + 32]));
|
||||
asm volatile ("vpxor %ymm4,%ymm0,%ymm0");
|
||||
asm volatile ("vpxor %ymm4,%ymm1,%ymm1");
|
||||
asm volatile ("vpxor %ymm4,%ymm2,%ymm2");
|
||||
|
|
@ -245,11 +246,11 @@ void raid_genz_avx2ext(int nd, size_t size, void **vv)
|
|||
asm volatile ("vpxor %ymm12,%ymm10,%ymm10");
|
||||
}
|
||||
asm volatile ("vmovntdq %%ymm0,%0" : "=m" (p[i]));
|
||||
asm volatile ("vmovntdq %%ymm8,%0" : "=m" (p[i+32]));
|
||||
asm volatile ("vmovntdq %%ymm8,%0" : "=m" (p[i + 32]));
|
||||
asm volatile ("vmovntdq %%ymm1,%0" : "=m" (q[i]));
|
||||
asm volatile ("vmovntdq %%ymm9,%0" : "=m" (q[i+32]));
|
||||
asm volatile ("vmovntdq %%ymm9,%0" : "=m" (q[i + 32]));
|
||||
asm volatile ("vmovntdq %%ymm2,%0" : "=m" (r[i]));
|
||||
asm volatile ("vmovntdq %%ymm10,%0" : "=m" (r[i+32]));
|
||||
asm volatile ("vmovntdq %%ymm10,%0" : "=m" (r[i + 32]));
|
||||
}
|
||||
|
||||
raid_asm_clobber_ymm16();
|
||||
|
|
@ -258,4 +259,3 @@ void raid_genz_avx2ext(int nd, size_t size, void **vv)
|
|||
}
|
||||
#endif
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue