s390x: avoid variable-length arrays in struct for asm operands
... since it is not required and clang does not support that gcc extension. Instead, use a variable-length array directly for these operands. Note that, while the actual inline assembly code does not directly use these memory operands, they serve to inform the compiler that it cannot reorder reads or writes to/from the input and output data across the inline asm statements. Signed-off-by: Marius Hillenbrand <mhillen@linux.ibm.com>
This commit is contained in:
parent
b9b3265ec8
commit
87e5bbd887
|
@ -136,7 +136,7 @@ static FLOAT camax_kernel_32(BLASLONG n, FLOAT *x) {
|
|||
"wfmaxsb %%v0,%%v0,%%v16,0\n\t"
|
||||
"ler %[amax],%%f0"
|
||||
: [amax] "=f"(amax),[n] "+&r"(n)
|
||||
: "m"(*(const struct { FLOAT x[n * 2]; } *) x),[x] "a"(x)
|
||||
: "m"(*(const FLOAT (*)[n * 2]) x),[x] "a"(x)
|
||||
: "cc", "r1", "v0", "v1", "v2", "v16", "v17", "v18", "v19", "v20",
|
||||
"v21", "v22", "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30",
|
||||
"v31");
|
||||
|
|
|
@ -136,7 +136,7 @@ static FLOAT camin_kernel_32(BLASLONG n, FLOAT *x) {
|
|||
"wfminsb %%v0,%%v0,%%v16,0\n\t"
|
||||
"ler %[amin],%%f0"
|
||||
: [amin] "=f"(amin),[n] "+&r"(n)
|
||||
: "m"(*(const struct { FLOAT x[n * 2]; } *) x),[x] "a"(x)
|
||||
: "m"(*(const FLOAT (*)[n * 2]) x),[x] "a"(x)
|
||||
: "cc", "r1", "v0", "v1", "v2", "v16", "v17", "v18", "v19", "v20",
|
||||
"v21", "v22", "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30",
|
||||
"v31");
|
||||
|
|
|
@ -108,7 +108,7 @@ static FLOAT casum_kernel_32(BLASLONG n, FLOAT *x) {
|
|||
"vfasb %%v24,%%v24,%%v25\n\t"
|
||||
"vstef %%v24,%[asum],0"
|
||||
: [asum] "=Q"(asum),[n] "+&r"(n)
|
||||
: "m"(*(const struct { FLOAT x[n * 2]; } *) x),[x] "a"(x)
|
||||
: "m"(*(const FLOAT (*)[n * 2]) x),[x] "a"(x)
|
||||
: "cc", "r1", "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23",
|
||||
"v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31");
|
||||
|
||||
|
|
|
@ -99,9 +99,9 @@ static void caxpy_kernel_16(BLASLONG n, FLOAT *x, FLOAT *y, FLOAT *alpha) {
|
|||
"vst %%v19,112(%%r1,%[y])\n\t"
|
||||
"agfi %%r1,128\n\t"
|
||||
"brctg %[n],0b"
|
||||
: "+m"(*(struct { FLOAT x[n * 2]; } *) y),[n] "+&r"(n)
|
||||
: [y] "a"(y), "m"(*(const struct { FLOAT x[n * 2]; } *) x),[x] "a"(x),
|
||||
"m"(*(const struct { FLOAT x[2]; } *) alpha),[alpha] "a"(alpha)
|
||||
: "+m"(*(FLOAT (*)[n * 2]) y),[n] "+&r"(n)
|
||||
: [y] "a"(y), "m"(*(const FLOAT (*)[n * 2]) x),[x] "a"(x),
|
||||
"m"(*(const FLOAT (*)[2]) alpha),[alpha] "a"(alpha)
|
||||
: "cc", "r1", "v0", "v1", "v8", "v9", "v10", "v11", "v12", "v13",
|
||||
"v14", "v15", "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23",
|
||||
"v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31");
|
||||
|
|
|
@ -36,9 +36,9 @@ static void ccopy_kernel_32(BLASLONG n, FLOAT *x, FLOAT *y) {
|
|||
"la %[x],256(%[x])\n\t"
|
||||
"la %[y],256(%[y])\n\t"
|
||||
"brctg %[n],0b"
|
||||
: "=m"(*(struct { FLOAT x[n * 2]; } *) y),[x] "+&a"(x),[y] "+&a"(y),
|
||||
: "=m"(*(FLOAT (*)[n * 2]) y),[x] "+&a"(x),[y] "+&a"(y),
|
||||
[n] "+&r"(n)
|
||||
: "m"(*(const struct { FLOAT x[n * 2]; } *) x)
|
||||
: "m"(*(const FLOAT (*)[n * 2]) x)
|
||||
: "cc");
|
||||
}
|
||||
|
||||
|
|
|
@ -97,9 +97,9 @@ static void cdot_kernel_16(BLASLONG n, FLOAT *x, FLOAT *y, FLOAT *d) {
|
|||
"vstef %%v24,4(%[d]),1\n\t"
|
||||
"vstef %%v25,8(%[d]),1\n\t"
|
||||
"vstef %%v25,12(%[d]),0"
|
||||
: "=m"(*(struct { FLOAT x[4]; } *) d),[n] "+&r"(n)
|
||||
: [d] "a"(d), "m"(*(const struct { FLOAT x[n * 2]; } *) x),[x] "a"(x),
|
||||
"m"(*(const struct { FLOAT x[n * 2]; } *) y),[y] "a"(y)
|
||||
: "=m"(*(FLOAT (*)[4]) d),[n] "+&r"(n)
|
||||
: [d] "a"(d), "m"(*(const FLOAT (*)[n * 2]) x),[x] "a"(x),
|
||||
"m"(*(const FLOAT (*)[n * 2]) y),[y] "a"(y)
|
||||
: "cc", "r1", "v0", "v1", "v2", "v3", "v16", "v17", "v18", "v19", "v20",
|
||||
"v21", "v22", "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30",
|
||||
"v31");
|
||||
|
|
|
@ -146,12 +146,12 @@ static void cgemv_kernel_4x4(BLASLONG n, FLOAT **ap, FLOAT *x, FLOAT *y) {
|
|||
"vst %%v0,0(%%r1,%[y])\n\t"
|
||||
"agfi %%r1,16\n\t"
|
||||
"brctg %[n],0b\n\t"
|
||||
: "+m"(*(struct { FLOAT x[n * 2]; } *) y),[n] "+&r"(n)
|
||||
: [y] "a"(y), "m"(*(const struct { FLOAT x[n * 2]; } *) ap0),[ap0] "a"(ap0),
|
||||
"m"(*(const struct { FLOAT x[n * 2]; } *) ap1),[ap1] "a"(ap1),
|
||||
"m"(*(const struct { FLOAT x[n * 2]; } *) ap2),[ap2] "a"(ap2),
|
||||
"m"(*(const struct { FLOAT x[n * 2]; } *) ap3),[ap3] "a"(ap3),
|
||||
"m"(*(const struct { FLOAT x[8]; } *) x),[x] "a"(x)
|
||||
: "+m"(*(FLOAT (*)[n * 2]) y),[n] "+&r"(n)
|
||||
: [y] "a"(y), "m"(*(const FLOAT (*)[n * 2]) ap0),[ap0] "a"(ap0),
|
||||
"m"(*(const FLOAT (*)[n * 2]) ap1),[ap1] "a"(ap1),
|
||||
"m"(*(const FLOAT (*)[n * 2]) ap2),[ap2] "a"(ap2),
|
||||
"m"(*(const FLOAT (*)[n * 2]) ap3),[ap3] "a"(ap3),
|
||||
"m"(*(const FLOAT (*)[8]) x),[x] "a"(x)
|
||||
: "cc", "r1", "v0", "v1", "v2", "v16", "v17", "v18", "v19", "v20",
|
||||
"v21", "v22", "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30",
|
||||
"v31");
|
||||
|
@ -238,10 +238,10 @@ static void cgemv_kernel_4x2(BLASLONG n, FLOAT **ap, FLOAT *x, FLOAT *y) {
|
|||
"vst %%v0,0(%%r1,%[y])\n\t"
|
||||
"agfi %%r1,16\n\t"
|
||||
"brctg %[n],0b\n\t"
|
||||
: "+m"(*(struct { FLOAT x[n * 2]; } *) y),[n] "+&r"(n)
|
||||
: [y] "a"(y), "m"(*(const struct { FLOAT x[n * 2]; } *) ap0),[ap0] "a"(ap0),
|
||||
"m"(*(const struct { FLOAT x[n * 2]; } *) ap1),[ap1] "a"(ap1),
|
||||
"m"(*(const struct { FLOAT x[4]; } *) x),[x] "a"(x)
|
||||
: "+m"(*(FLOAT (*)[n * 2]) y),[n] "+&r"(n)
|
||||
: [y] "a"(y), "m"(*(const FLOAT (*)[n * 2]) ap0),[ap0] "a"(ap0),
|
||||
"m"(*(const FLOAT (*)[n * 2]) ap1),[ap1] "a"(ap1),
|
||||
"m"(*(const FLOAT (*)[4]) x),[x] "a"(x)
|
||||
: "cc", "r1", "v0", "v1", "v2", "v16", "v17", "v18", "v19", "v20",
|
||||
"v21", "v22", "v23");
|
||||
}
|
||||
|
@ -307,9 +307,9 @@ static void cgemv_kernel_4x1(BLASLONG n, FLOAT *ap, FLOAT *x, FLOAT *y) {
|
|||
"vst %%v0,0(%%r1,%[y])\n\t"
|
||||
"agfi %%r1,16\n\t"
|
||||
"brctg %[n],0b\n\t"
|
||||
: "+m"(*(struct { FLOAT x[n * 2]; } *) y),[n] "+&r"(n)
|
||||
: [y] "a"(y), "m"(*(const struct { FLOAT x[n * 2]; } *) ap),[ap] "a"(ap),
|
||||
"m"(*(const struct { FLOAT x[2]; } *) x),[x] "a"(x)
|
||||
: "+m"(*(FLOAT (*)[n * 2]) y),[n] "+&r"(n)
|
||||
: [y] "a"(y), "m"(*(const FLOAT (*)[n * 2]) ap),[ap] "a"(ap),
|
||||
"m"(*(const FLOAT (*)[2]) x),[x] "a"(x)
|
||||
: "cc", "r1", "v0", "v1", "v2", "v16", "v17", "v18", "v19");
|
||||
}
|
||||
|
||||
|
@ -350,8 +350,8 @@ static void add_y_4(BLASLONG n, FLOAT *src, FLOAT *dest, FLOAT alpha_r,
|
|||
"vst %%v23,16(%%r1,%[dest])\n\t"
|
||||
"agfi %%r1,32\n\t"
|
||||
"brctg %[n],0b"
|
||||
: "+m"(*(struct { FLOAT x[n * 2]; } *) dest),[n] "+&r"(n)
|
||||
: [dest] "a"(dest), "m"(*(const struct { FLOAT x[n * 2]; } *) src),
|
||||
: "+m"(*(FLOAT (*)[n * 2]) dest),[n] "+&r"(n)
|
||||
: [dest] "a"(dest), "m"(*(const FLOAT (*)[n * 2]) src),
|
||||
[src] "a"(src),[alpha_r] "Q"(alpha_r),[alpha_i] "Q"(alpha_i)
|
||||
: "cc", "r1", "v0", "v1", "v16", "v17", "v18", "v19", "v20", "v21",
|
||||
"v22", "v23");
|
||||
|
|
|
@ -159,13 +159,13 @@ static void cgemv_kernel_4x4(BLASLONG n, FLOAT **ap, FLOAT *x, FLOAT *y,
|
|||
"vfmasb %%v23,%%v19,%%v21,%%v23\n\t"
|
||||
"vst %%v22,0(%[y])\n\t"
|
||||
"vst %%v23,16(%[y])"
|
||||
: "+m"(*(struct { FLOAT x[8]; } *) y),[n] "+&r"(n)
|
||||
: [y] "a"(y), "m"(*(const struct { FLOAT x[n * 2]; } *) ap0),[ap0] "a"(ap0),
|
||||
"m"(*(const struct { FLOAT x[n * 2]; } *) ap1),[ap1] "a"(ap1),
|
||||
"m"(*(const struct { FLOAT x[n * 2]; } *) ap2),[ap2] "a"(ap2),
|
||||
"m"(*(const struct { FLOAT x[n * 2]; } *) ap3),[ap3] "a"(ap3),
|
||||
"m"(*(const struct { FLOAT x[n * 2]; } *) x),[x] "a"(x),
|
||||
"m"(*(const struct { FLOAT x[2]; } *) alpha),[alpha] "a"(alpha)
|
||||
: "+m"(*(FLOAT (*)[8]) y),[n] "+&r"(n)
|
||||
: [y] "a"(y), "m"(*(const FLOAT (*)[n * 2]) ap0),[ap0] "a"(ap0),
|
||||
"m"(*(const FLOAT (*)[n * 2]) ap1),[ap1] "a"(ap1),
|
||||
"m"(*(const FLOAT (*)[n * 2]) ap2),[ap2] "a"(ap2),
|
||||
"m"(*(const FLOAT (*)[n * 2]) ap3),[ap3] "a"(ap3),
|
||||
"m"(*(const FLOAT (*)[n * 2]) x),[x] "a"(x),
|
||||
"m"(*(const FLOAT (*)[2]) alpha),[alpha] "a"(alpha)
|
||||
: "cc", "r1", "v0", "v1", "v2", "v3", "v16", "v17", "v18", "v19", "v20",
|
||||
"v21", "v22", "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30",
|
||||
"v31");
|
||||
|
@ -271,11 +271,11 @@ static void cgemv_kernel_4x2(BLASLONG n, FLOAT **ap, FLOAT *x, FLOAT *y,
|
|||
"vfmasb %%v20,%%v16,%%v18,%%v20\n\t"
|
||||
"vfmasb %%v20,%%v17,%%v19,%%v20\n\t"
|
||||
"vst %%v20,0(%[y])"
|
||||
: "+m"(*(struct { FLOAT x[4]; } *) y),[n] "+&r"(n)
|
||||
: [y] "a"(y), "m"(*(const struct { FLOAT x[n * 2]; } *) ap0),[ap0] "a"(ap0),
|
||||
"m"(*(const struct { FLOAT x[n * 2]; } *) ap1),[ap1] "a"(ap1),
|
||||
"m"(*(const struct { FLOAT x[n * 2]; } *) x),[x] "a"(x),
|
||||
"m"(*(const struct { FLOAT x[2]; } *) alpha),[alpha] "a"(alpha)
|
||||
: "+m"(*(FLOAT (*)[4]) y),[n] "+&r"(n)
|
||||
: [y] "a"(y), "m"(*(const FLOAT (*)[n * 2]) ap0),[ap0] "a"(ap0),
|
||||
"m"(*(const FLOAT (*)[n * 2]) ap1),[ap1] "a"(ap1),
|
||||
"m"(*(const FLOAT (*)[n * 2]) x),[x] "a"(x),
|
||||
"m"(*(const FLOAT (*)[2]) alpha),[alpha] "a"(alpha)
|
||||
: "cc", "r1", "v0", "v1", "v2", "v3", "v16", "v17", "v18", "v19", "v20",
|
||||
"v21", "v22", "v23");
|
||||
}
|
||||
|
@ -361,10 +361,10 @@ static void cgemv_kernel_4x1(BLASLONG n, FLOAT *ap, FLOAT *x, FLOAT *y,
|
|||
"vfmasb %%v0,%%v16,%%v18,%%v0\n\t"
|
||||
"vfmasb %%v0,%%v17,%%v19,%%v0\n\t"
|
||||
"vsteg %%v0,0(%[y]),0"
|
||||
: "+m"(*(struct { FLOAT x[2]; } *) y),[n] "+&r"(n)
|
||||
: [y] "a"(y), "m"(*(const struct { FLOAT x[n * 2]; } *) ap),[ap] "a"(ap),
|
||||
"m"(*(const struct { FLOAT x[n * 2]; } *) x),[x] "a"(x),
|
||||
"m"(*(const struct { FLOAT x[2]; } *) alpha),[alpha] "a"(alpha)
|
||||
: "+m"(*(FLOAT (*)[2]) y),[n] "+&r"(n)
|
||||
: [y] "a"(y), "m"(*(const FLOAT (*)[n * 2]) ap),[ap] "a"(ap),
|
||||
"m"(*(const FLOAT (*)[n * 2]) x),[x] "a"(x),
|
||||
"m"(*(const FLOAT (*)[2]) alpha),[alpha] "a"(alpha)
|
||||
: "cc", "r1", "v0", "v1", "v2", "v3", "v16", "v17", "v18", "v19");
|
||||
}
|
||||
|
||||
|
|
|
@ -169,8 +169,8 @@ static void crot_kernel_32(BLASLONG n, FLOAT *x, FLOAT *y, FLOAT *c, FLOAT *s) {
|
|||
"vst %%v23, 240(%%r1,%[y])\n\t"
|
||||
"agfi %%r1,256\n\t"
|
||||
"brctg %[n],0b"
|
||||
: "+m"(*(struct { FLOAT x[n * 2]; } *) x),
|
||||
"+m"(*(struct { FLOAT x[n * 2]; } *) y),[n] "+&r"(n)
|
||||
: "+m"(*(FLOAT (*)[n * 2]) x),
|
||||
"+m"(*(FLOAT (*)[n * 2]) y),[n] "+&r"(n)
|
||||
: [x] "a"(x),[y] "a"(y),[c] "Q"(*c),[s] "Q"(*s)
|
||||
: "cc", "r1", "v0", "v1", "v16", "v17", "v18", "v19", "v20", "v21",
|
||||
"v22", "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30",
|
||||
|
|
|
@ -80,8 +80,8 @@ static void cscal_kernel_16(BLASLONG n, FLOAT *alpha, FLOAT *x) {
|
|||
"vst %%v23,112(%%r1,%[x])\n\t"
|
||||
"agfi %%r1,128\n\t"
|
||||
"brctg %[n],0b"
|
||||
: "+m"(*(struct { FLOAT x[n * 2]; } *) x),[n] "+&r"(n)
|
||||
: [x] "a"(x), "m"(*(const struct { FLOAT x[2]; } *) alpha),
|
||||
: "+m"(*(FLOAT (*)[n * 2]) x),[n] "+&r"(n)
|
||||
: [x] "a"(x), "m"(*(const FLOAT (*)[2]) alpha),
|
||||
[alpha] "a"(alpha)
|
||||
: "cc", "r1", "v0", "v1", "v16", "v17", "v18", "v19", "v20", "v21",
|
||||
"v22", "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30",
|
||||
|
@ -132,8 +132,8 @@ static void cscal_kernel_16_zero_r(BLASLONG n, FLOAT *alpha, FLOAT *x) {
|
|||
"vst %%v23,112(%%r1,%[x])\n\t"
|
||||
"agfi %%r1,128\n\t"
|
||||
"brctg %[n],0b"
|
||||
: "+m"(*(struct { FLOAT x[n * 2]; } *) x),[n] "+&r"(n)
|
||||
: [x] "a"(x), "m"(*(const struct { FLOAT x[2]; } *) alpha),
|
||||
: "+m"(*(FLOAT (*)[n * 2]) x),[n] "+&r"(n)
|
||||
: [x] "a"(x), "m"(*(const FLOAT (*)[2]) alpha),
|
||||
[alpha] "a"(alpha)
|
||||
: "cc", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21", "v22",
|
||||
"v23");
|
||||
|
@ -171,8 +171,8 @@ static void cscal_kernel_16_zero_i(BLASLONG n, FLOAT *alpha, FLOAT *x) {
|
|||
"vst %%v23,112(%%r1,%[x])\n\t"
|
||||
"agfi %%r1,128\n\t"
|
||||
"brctg %[n],0b"
|
||||
: "+m"(*(struct { FLOAT x[n * 2]; } *) x),[n] "+&r"(n)
|
||||
: [x] "a"(x), "m"(*(const struct { FLOAT x[2]; } *) alpha),
|
||||
: "+m"(*(FLOAT (*)[n * 2]) x),[n] "+&r"(n)
|
||||
: [x] "a"(x), "m"(*(const FLOAT (*)[2]) alpha),
|
||||
[alpha] "a"(alpha)
|
||||
: "cc", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21", "v22",
|
||||
"v23");
|
||||
|
@ -194,7 +194,7 @@ static void cscal_kernel_16_zero(BLASLONG n, FLOAT *x) {
|
|||
"vst %%v0,112(%%r1,%[x])\n\t"
|
||||
"agfi %%r1,128\n\t"
|
||||
"brctg %[n],0b"
|
||||
: "=m"(*(struct { FLOAT x[n * 2]; } *) x),[n] "+&r"(n)
|
||||
: "=m"(*(FLOAT (*)[n * 2]) x),[n] "+&r"(n)
|
||||
: [x] "a"(x)
|
||||
: "cc", "r1", "v0");
|
||||
}
|
||||
|
|
|
@ -90,7 +90,7 @@ static FLOAT csum_kernel_32(BLASLONG n, FLOAT *x) {
|
|||
"vfasb %%v24,%%v24,%%v25\n\t"
|
||||
"vstef %%v24,%[sum],0"
|
||||
: [sum] "=Q"(sum),[n] "+&r"(n)
|
||||
: "m"(*(const struct { FLOAT x[n * 2]; } *) x),[x] "a"(x)
|
||||
: "m"(*(const FLOAT (*)[n * 2]) x),[x] "a"(x)
|
||||
: "cc", "r1", "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23",
|
||||
"v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31");
|
||||
|
||||
|
|
|
@ -99,8 +99,8 @@ static void cswap_kernel_32(BLASLONG n, FLOAT *x, FLOAT *y) {
|
|||
"vst %%v31, 240(%%r1,%[y])\n\t"
|
||||
"agfi %%r1,256\n\t"
|
||||
"brctg %[n],0b"
|
||||
: "+m"(*(struct { FLOAT x[n * 2]; } *) x),
|
||||
"+m"(*(struct { FLOAT x[n * 2]; } *) y),[n] "+&r"(n)
|
||||
: "+m"(*(FLOAT (*)[n * 2]) x),
|
||||
"+m"(*(FLOAT (*)[n * 2]) y),[n] "+&r"(n)
|
||||
: [x] "a"(x),[y] "a"(y)
|
||||
: "cc", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v16",
|
||||
"v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25", "v26",
|
||||
|
|
|
@ -76,7 +76,7 @@ static FLOAT damax_kernel_32(BLASLONG n, FLOAT *x) {
|
|||
"wfmaxdb %%v0,%%v0,%%v16,8\n\t"
|
||||
"lpdr %[amax],%%f0"
|
||||
: [amax] "=f"(amax),[n] "+&r"(n)
|
||||
: "m"(*(const struct { FLOAT x[n]; } *) x),[x] "a"(x)
|
||||
: "m"(*(const FLOAT (*)[n]) x),[x] "a"(x)
|
||||
: "cc", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21", "v22",
|
||||
"v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31");
|
||||
|
||||
|
|
|
@ -110,7 +110,7 @@ static FLOAT damax_kernel_32(BLASLONG n, FLOAT *x) {
|
|||
"vsel %%v0,%%v0,%%v16,%%v17\n\t"
|
||||
"ldr %[amax],%%f0"
|
||||
: [amax] "=f"(amax),[n] "+&r"(n)
|
||||
: "m"(*(const struct { FLOAT x[n]; } *) x),[x] "a"(x)
|
||||
: "m"(*(const FLOAT (*)[n]) x),[x] "a"(x)
|
||||
: "cc", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21", "v22",
|
||||
"v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31");
|
||||
|
||||
|
|
|
@ -76,7 +76,7 @@ static FLOAT damin_kernel_32(BLASLONG n, FLOAT *x) {
|
|||
"wfmindb %%v0,%%v0,%%v16,8\n\t"
|
||||
"lpdr %[amin],%%f0"
|
||||
: [amin] "=f"(amin),[n] "+&r"(n)
|
||||
: "m"(*(const struct { FLOAT x[n]; } *) x),[x] "a"(x)
|
||||
: "m"(*(const FLOAT (*)[n]) x),[x] "a"(x)
|
||||
: "cc", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21", "v22",
|
||||
"v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31");
|
||||
|
||||
|
|
|
@ -110,7 +110,7 @@ static FLOAT damin_kernel_32(BLASLONG n, FLOAT *x) {
|
|||
"vsel %%v0,%%v0,%%v16,%%v17\n\t"
|
||||
"ldr %[amin],%%f0"
|
||||
: [amin] "=f"(amin),[n] "+&r"(n)
|
||||
: "m"(*(const struct { FLOAT x[n]; } *) x),[x] "a"(x)
|
||||
: "m"(*(const FLOAT (*)[n]) x),[x] "a"(x)
|
||||
: "cc", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21", "v22",
|
||||
"v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31");
|
||||
|
||||
|
|
|
@ -106,7 +106,7 @@ static FLOAT dasum_kernel_32(BLASLONG n, FLOAT *x) {
|
|||
"vfadb %%v24,%%v24,%%v25\n\t"
|
||||
"vsteg %%v24,%[asum],0"
|
||||
: [asum] "=Q"(asum),[n] "+&r"(n)
|
||||
: "m"(*(const struct { FLOAT x[n]; } *) x),[x] "a"(x)
|
||||
: "m"(*(const FLOAT (*)[n]) x),[x] "a"(x)
|
||||
: "cc", "r1", "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23",
|
||||
"v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31");
|
||||
|
||||
|
|
|
@ -100,8 +100,8 @@ static void daxpy_kernel_32(BLASLONG n, FLOAT *x, FLOAT *y, FLOAT *alpha) {
|
|||
"vst %%v27,240(%%r1,%[y])\n\t"
|
||||
"agfi %%r1,256\n\t"
|
||||
"brctg %[n],0b"
|
||||
: "+m"(*(struct { FLOAT x[n]; } *) y),[n] "+&r"(n)
|
||||
: [y] "a"(y), "m"(*(const struct { FLOAT x[n]; } *) x),[x] "a"(x),
|
||||
: "+m"(*(FLOAT (*)[n]) y),[n] "+&r"(n)
|
||||
: [y] "a"(y), "m"(*(const FLOAT (*)[n]) x),[x] "a"(x),
|
||||
[alpha] "Q"(*alpha)
|
||||
: "cc", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21", "v22",
|
||||
"v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31");
|
||||
|
|
|
@ -36,8 +36,8 @@ static void dcopy_kernel_32(BLASLONG n, FLOAT *x, FLOAT *y) {
|
|||
"la %[x],256(%[x])\n\t"
|
||||
"la %[y],256(%[y])\n\t"
|
||||
"brctg %[n],0b"
|
||||
: "=m"(*(struct { FLOAT x[n]; } *) y),[x] "+&a"(x),[y] "+&a"(y),[n] "+&r"(n)
|
||||
: "m"(*(const struct { FLOAT x[n]; } *) x)
|
||||
: "=m"(*(FLOAT (*)[n]) y),[x] "+&a"(x),[y] "+&a"(y),[n] "+&r"(n)
|
||||
: "m"(*(const FLOAT (*)[n]) x)
|
||||
: "cc");
|
||||
}
|
||||
|
||||
|
|
|
@ -80,8 +80,8 @@ static FLOAT ddot_kernel_16(BLASLONG n, FLOAT *x, FLOAT *y) {
|
|||
"adbr %%f0,%%f1\n\t"
|
||||
"ldr %[dot],%%f0"
|
||||
: [dot] "=f"(dot),[n] "+&r"(n)
|
||||
: "m"(*(const struct { FLOAT x[n]; } *) x),[x] "a"(x),
|
||||
"m"(*(const struct { FLOAT x[n]; } *) y),[y] "a"(y)
|
||||
: "m"(*(const FLOAT (*)[n]) x),[x] "a"(x),
|
||||
"m"(*(const FLOAT (*)[n]) y),[y] "a"(y)
|
||||
: "cc", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v16",
|
||||
"v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25", "v26",
|
||||
"v27", "v28", "v29", "v30", "v31");
|
||||
|
|
|
@ -170,12 +170,12 @@ static void dgemv_kernel_4x4(BLASLONG n, FLOAT **ap, FLOAT *x, FLOAT *y,
|
|||
"brctg %%r0,2b\n\t"
|
||||
"3:\n\t"
|
||||
"nop 0"
|
||||
: "+m"(*(struct { FLOAT x[n]; } *) y)
|
||||
: [y] "a"(y), "m"(*(const struct { FLOAT x[n]; } *) ap0),[ap0] "a"(ap0),
|
||||
"m"(*(const struct { FLOAT x[n]; } *) ap1),[ap1] "a"(ap1),
|
||||
"m"(*(const struct { FLOAT x[n]; } *) ap2),[ap2] "a"(ap2),
|
||||
"m"(*(const struct { FLOAT x[n]; } *) ap3),[ap3] "a"(ap3),
|
||||
"m"(*(const struct { FLOAT x[4]; } *) x),[x] "a"(x),[alpha] "Q"(*alpha),
|
||||
: "+m"(*(FLOAT (*)[n]) y)
|
||||
: [y] "a"(y), "m"(*(const FLOAT (*)[n]) ap0),[ap0] "a"(ap0),
|
||||
"m"(*(const FLOAT (*)[n]) ap1),[ap1] "a"(ap1),
|
||||
"m"(*(const FLOAT (*)[n]) ap2),[ap2] "a"(ap2),
|
||||
"m"(*(const FLOAT (*)[n]) ap3),[ap3] "a"(ap3),
|
||||
"m"(*(const FLOAT (*)[4]) x),[x] "a"(x),[alpha] "Q"(*alpha),
|
||||
[n] "r"(n)
|
||||
: "cc", "r0", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7",
|
||||
"v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25",
|
||||
|
@ -275,10 +275,10 @@ static void dgemv_kernel_4x2(BLASLONG n, FLOAT **ap, FLOAT *x, FLOAT *y,
|
|||
"brctg %%r0,2b\n\t"
|
||||
"3:\n\t"
|
||||
"nop 0"
|
||||
: "+m"(*(struct { FLOAT x[n]; } *) y)
|
||||
: [y] "a"(y), "m"(*(const struct { FLOAT x[n]; } *) ap0),[ap0] "a"(ap0),
|
||||
"m"(*(const struct { FLOAT x[n]; } *) ap1),[ap1] "a"(ap1),
|
||||
"m"(*(const struct { FLOAT x[2]; } *) x),[x] "a"(x),[alpha] "Q"(*alpha),
|
||||
: "+m"(*(FLOAT (*)[n]) y)
|
||||
: [y] "a"(y), "m"(*(const FLOAT (*)[n]) ap0),[ap0] "a"(ap0),
|
||||
"m"(*(const FLOAT (*)[n]) ap1),[ap1] "a"(ap1),
|
||||
"m"(*(const FLOAT (*)[2]) x),[x] "a"(x),[alpha] "Q"(*alpha),
|
||||
[n] "r"(n)
|
||||
: "cc", "r0", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7",
|
||||
"v8", "v9", "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23",
|
||||
|
@ -352,8 +352,8 @@ static void dgemv_kernel_4x1(BLASLONG n, FLOAT *a0, FLOAT *x, FLOAT *y,
|
|||
"brctg %%r0,2b\n\t"
|
||||
"3:\n\t"
|
||||
"nop 0"
|
||||
: "+m"(*(struct { FLOAT x[n]; } *) y)
|
||||
: [y] "a"(y), "m"(*(const struct { FLOAT x[n]; } *) a0),[a0] "a"(a0),
|
||||
: "+m"(*(FLOAT (*)[n]) y)
|
||||
: [y] "a"(y), "m"(*(const FLOAT (*)[n]) a0),[a0] "a"(a0),
|
||||
"m"(*(const FLOAT (*)[1]) x),[x] "a"(x),[alpha] "Q"(*alpha),
|
||||
[n] "r"(n)
|
||||
: "cc", "r0", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21",
|
||||
|
|
|
@ -173,12 +173,12 @@ static void dgemv_kernel_4x4(BLASLONG n, FLOAT **ap, FLOAT *x, FLOAT *y) {
|
|||
"vrepg %%v4,%%v3,1\n\t"
|
||||
"adbr %%f3,%%f4\n\t"
|
||||
"std %%f3,24(%[y])"
|
||||
: "=m"(*(struct { FLOAT x[4]; } *) y)
|
||||
: [y] "a"(y), "m"(*(const struct { FLOAT x[n]; } *) ap0),[ap0] "a"(ap0),
|
||||
"m"(*(const struct { FLOAT x[n]; } *) ap1),[ap1] "a"(ap1),
|
||||
"m"(*(const struct { FLOAT x[n]; } *) ap2),[ap2] "a"(ap2),
|
||||
"m"(*(const struct { FLOAT x[n]; } *) ap3),[ap3] "a"(ap3),
|
||||
"m"(*(const struct { FLOAT x[n]; } *) x),[x] "a"(x),[n] "r"(n)
|
||||
: "=m"(*(FLOAT (*)[4]) y)
|
||||
: [y] "a"(y), "m"(*(const FLOAT (*)[n]) ap0),[ap0] "a"(ap0),
|
||||
"m"(*(const FLOAT (*)[n]) ap1),[ap1] "a"(ap1),
|
||||
"m"(*(const FLOAT (*)[n]) ap2),[ap2] "a"(ap2),
|
||||
"m"(*(const FLOAT (*)[n]) ap3),[ap3] "a"(ap3),
|
||||
"m"(*(const FLOAT (*)[n]) x),[x] "a"(x),[n] "r"(n)
|
||||
: "cc", "r0", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7",
|
||||
"v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25",
|
||||
"v26", "v27", "v28", "v29", "v30", "v31");
|
||||
|
@ -280,10 +280,10 @@ static void dgemv_kernel_4x2(BLASLONG n, FLOAT **ap, FLOAT *x, FLOAT *y) {
|
|||
"vrepg %%v2,%%v1,1\n\t"
|
||||
"adbr %%f1,%%f2\n\t"
|
||||
"std %%f1,8(%[y])"
|
||||
: "=m"(*(struct { FLOAT x[2]; } *) y)
|
||||
: [y] "a"(y), "m"(*(const struct { FLOAT x[n]; } *) ap0),[ap0] "a"(ap0),
|
||||
"m"(*(const struct { FLOAT x[n]; } *) ap1),[ap1] "a"(ap1),
|
||||
"m"(*(const struct { FLOAT x[n]; } *) x),[x] "a"(x),[n] "r"(n)
|
||||
: "=m"(*(FLOAT (*)[2]) y)
|
||||
: [y] "a"(y), "m"(*(const FLOAT (*)[n]) ap0),[ap0] "a"(ap0),
|
||||
"m"(*(const FLOAT (*)[n]) ap1),[ap1] "a"(ap1),
|
||||
"m"(*(const FLOAT (*)[n]) x),[x] "a"(x),[n] "r"(n)
|
||||
: "cc", "r0", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7",
|
||||
"v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25",
|
||||
"v26", "v27", "v28", "v29", "v30", "v31");
|
||||
|
@ -360,8 +360,8 @@ static void dgemv_kernel_4x1(BLASLONG n, FLOAT *a0, FLOAT *x, FLOAT *y) {
|
|||
"adbr %%f0,%%f1\n\t"
|
||||
"std %%f0,0(%[y])"
|
||||
: "=m"(*(FLOAT (*)[1]) y)
|
||||
: [y] "a"(y), "m"(*(const struct { FLOAT x[n]; } *) a0),[a0] "a"(a0),
|
||||
"m"(*(const struct { FLOAT x[n]; } *) x),[x] "a"(x),[n] "r"(n)
|
||||
: [y] "a"(y), "m"(*(const FLOAT (*)[n]) a0),[a0] "a"(a0),
|
||||
"m"(*(const FLOAT (*)[n]) x),[x] "a"(x),[n] "r"(n)
|
||||
: "cc", "r0", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7",
|
||||
"v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25",
|
||||
"v26", "v27", "v28", "v29", "v30", "v31");
|
||||
|
@ -439,8 +439,8 @@ static void add_y_kernel_4(BLASLONG n, FLOAT da, FLOAT *src, FLOAT *dest) {
|
|||
"brctg %%r0,2b\n\t"
|
||||
"3:\n\t"
|
||||
"nop 0"
|
||||
: "+m"(*(struct { FLOAT x[n]; } *) dest)
|
||||
: [dest] "a"(dest),[da] "Q"(da), "m"(*(const struct { FLOAT x[n]; } *) src),
|
||||
: "+m"(*(FLOAT (*)[n]) dest)
|
||||
: [dest] "a"(dest),[da] "Q"(da), "m"(*(const FLOAT (*)[n]) src),
|
||||
[src] "a"(src),[n] "r"(n)
|
||||
: "cc", "r0", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21",
|
||||
"v22", "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30",
|
||||
|
|
|
@ -73,7 +73,7 @@ static FLOAT dmax_kernel_32(BLASLONG n, FLOAT *x) {
|
|||
"wfmaxdb %%v0,%%v0,%%v16,0\n\t"
|
||||
"ldr %[max],%%f0"
|
||||
: [max] "=f"(max),[n] "+&r"(n)
|
||||
: "m"(*(const struct { FLOAT x[n]; } *) x),[x] "a"(x)
|
||||
: "m"(*(const FLOAT (*)[n]) x),[x] "a"(x)
|
||||
: "cc", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21", "v22",
|
||||
"v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31");
|
||||
|
||||
|
|
|
@ -90,7 +90,7 @@ static FLOAT dmax_kernel_32(BLASLONG n, FLOAT *x) {
|
|||
"vsel %%v0,%%v0,%%v16,%%v17\n\t"
|
||||
"ldr %[max],%%f0"
|
||||
: [max] "=f"(max),[n] "+&r"(n)
|
||||
: "m"(*(const struct { FLOAT x[n]; } *) x),[x] "a"(x)
|
||||
: "m"(*(const FLOAT (*)[n]) x),[x] "a"(x)
|
||||
: "cc", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21", "v22",
|
||||
"v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31");
|
||||
|
||||
|
|
|
@ -73,7 +73,7 @@ static FLOAT dmin_kernel_32(BLASLONG n, FLOAT *x) {
|
|||
"wfmindb %%v0,%%v0,%%v16,0\n\t"
|
||||
"ldr %[min],%%f0"
|
||||
: [min] "=f"(min),[n] "+&r"(n)
|
||||
: "m"(*(const struct { FLOAT x[n]; } *) x),[x] "a"(x)
|
||||
: "m"(*(const FLOAT (*)[n]) x),[x] "a"(x)
|
||||
: "cc", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21", "v22",
|
||||
"v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31");
|
||||
|
||||
|
|
|
@ -90,7 +90,7 @@ static FLOAT dmin_kernel_32(BLASLONG n, FLOAT *x) {
|
|||
"vsel %%v0,%%v0,%%v16,%%v17\n\t"
|
||||
"ldr %[min],%%f0"
|
||||
: [min] "=f"(min),[n] "+&r"(n)
|
||||
: "m"(*(const struct { FLOAT x[n]; } *) x),[x] "a"(x)
|
||||
: "m"(*(const FLOAT (*)[n]) x),[x] "a"(x)
|
||||
: "cc", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21", "v22",
|
||||
"v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31");
|
||||
|
||||
|
|
|
@ -169,7 +169,7 @@ static void drot_kernel_32(BLASLONG n, FLOAT *x, FLOAT *y, FLOAT *c, FLOAT *s) {
|
|||
"vst %%v23, 240(%%r1,%[y])\n\t"
|
||||
"agfi %%r1,256\n\t"
|
||||
"brctg %[n],0b"
|
||||
: "+m"(*(struct { FLOAT x[n]; } *) x), "+m"(*(struct { FLOAT x[n]; } *) y),
|
||||
: "+m"(*(FLOAT (*)[n]) x), "+m"(*(FLOAT (*)[n]) y),
|
||||
[n] "+&r"(n)
|
||||
: [x] "a"(x),[y] "a"(y),[c] "Q"(*c),[s] "Q"(*s)
|
||||
: "cc", "r1", "v0", "v1", "v16", "v17", "v18", "v19", "v20", "v21",
|
||||
|
|
|
@ -59,7 +59,7 @@ static void dscal_kernel_16(BLASLONG n, FLOAT da, FLOAT *x) {
|
|||
"vst %%v31,112(%%r1,%[x])\n\t"
|
||||
"agfi %%r1,128\n\t"
|
||||
"brctg %[n],0b"
|
||||
: "+m"(*(struct { FLOAT x[n]; } *) x),[n] "+&r"(n)
|
||||
: "+m"(*(FLOAT (*)[n]) x),[n] "+&r"(n)
|
||||
: [x] "a"(x),[da] "Q"(da)
|
||||
: "cc", "r1", "v0", "v24", "v25", "v26", "v27", "v28", "v29", "v30",
|
||||
"v31");
|
||||
|
@ -81,7 +81,7 @@ static void dscal_kernel_16_zero(BLASLONG n, FLOAT *x) {
|
|||
"vst %%v0,112(%%r1,%[x])\n\t"
|
||||
"agfi %%r1,128\n\t"
|
||||
"brctg %[n],0b"
|
||||
: "=m"(*(struct { FLOAT x[n]; } *) x),[n] "+&r"(n)
|
||||
: "=m"(*(FLOAT (*)[n]) x),[n] "+&r"(n)
|
||||
: [x] "a"(x)
|
||||
: "cc", "r1", "v0");
|
||||
}
|
||||
|
|
|
@ -112,8 +112,8 @@ static double dsdot_kernel_16(BLASLONG n, FLOAT *x, FLOAT *y) {
|
|||
"adbr %%f0,%%f1\n\t"
|
||||
"ldr %[dot],%%f0"
|
||||
: [dot] "=f"(dot),[n] "+&r"(n)
|
||||
: "m"(*(const struct { FLOAT x[n]; } *) x),[x] "a"(x),
|
||||
"m"(*(const struct { FLOAT x[n]; } *) y),[y] "a"(y)
|
||||
: "m"(*(const FLOAT (*)[n]) x),[x] "a"(x),
|
||||
"m"(*(const FLOAT (*)[n]) y),[y] "a"(y)
|
||||
: "cc", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v16",
|
||||
"v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25", "v26",
|
||||
"v27", "v28", "v29", "v30", "v31");
|
||||
|
|
|
@ -88,7 +88,7 @@ static FLOAT dsum_kernel_32(BLASLONG n, FLOAT *x) {
|
|||
"vfadb %%v24,%%v24,%%v25\n\t"
|
||||
"vsteg %%v24,%[sum],0"
|
||||
: [sum] "=Q"(sum),[n] "+&r"(n)
|
||||
: "m"(*(const struct { FLOAT x[n]; } *) x),[x] "a"(x)
|
||||
: "m"(*(const FLOAT (*)[n]) x),[x] "a"(x)
|
||||
: "cc", "r1", "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23",
|
||||
"v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31");
|
||||
|
||||
|
|
|
@ -99,7 +99,7 @@ static void dswap_kernel_32(BLASLONG n, FLOAT *x, FLOAT *y) {
|
|||
"vst %%v31, 240(%%r1,%[y])\n\t"
|
||||
"agfi %%r1,256\n\t"
|
||||
"brctg %[n],0b"
|
||||
: "+m"(*(struct { FLOAT x[n]; } *) x), "+m"(*(struct { FLOAT x[n]; } *) y),
|
||||
: "+m"(*(FLOAT (*)[n]) x), "+m"(*(FLOAT (*)[n]) y),
|
||||
[n] "+&r"(n)
|
||||
: [x] "a"(x),[y] "a"(y)
|
||||
: "cc", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v16",
|
||||
|
|
|
@ -215,7 +215,7 @@ static BLASLONG icamax_kernel_32(BLASLONG n, FLOAT *x, FLOAT *amax) {
|
|||
"2:\n\t"
|
||||
"nop 0"
|
||||
: [iamax] "=r"(iamax),[amax] "=Q"(*amax),[n] "+&r"(n)
|
||||
: "m"(*(const struct { FLOAT x[n * 2]; } *) x),[x] "a"(x)
|
||||
: "m"(*(const FLOAT (*)[n * 2]) x),[x] "a"(x)
|
||||
: "cc", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v8",
|
||||
"v9", "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24",
|
||||
"v25", "v26", "v27", "v28", "v29", "v30", "v31");
|
||||
|
|
|
@ -215,7 +215,7 @@ static BLASLONG icamin_kernel_32(BLASLONG n, FLOAT *x, FLOAT *amin) {
|
|||
"2:\n\t"
|
||||
"nop 0"
|
||||
: [iamin] "=r"(iamin),[amin] "=Q"(*amin),[n] "+&r"(n)
|
||||
: "m"(*(const struct { FLOAT x[n * 2]; } *) x),[x] "a"(x)
|
||||
: "m"(*(const FLOAT (*)[n * 2]) x),[x] "a"(x)
|
||||
: "cc", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v8",
|
||||
"v9", "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24",
|
||||
"v25", "v26", "v27", "v28", "v29", "v30", "v31");
|
||||
|
|
|
@ -162,7 +162,7 @@ static BLASLONG idamax_kernel_32(BLASLONG n, FLOAT *x, FLOAT *amax) {
|
|||
"2:\n\t"
|
||||
"nop 0"
|
||||
: [iamax] "=r"(iamax),[amax] "=Q"(*amax),[n] "+&r"(n)
|
||||
: "m"(*(const struct { FLOAT x[n]; } *) x),[x] "a"(x)
|
||||
: "m"(*(const FLOAT (*)[n]) x),[x] "a"(x)
|
||||
: "cc", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v16",
|
||||
"v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25", "v26",
|
||||
"v27", "v28", "v29", "v30", "v31");
|
||||
|
|
|
@ -162,7 +162,7 @@ static BLASLONG idamin_kernel_32(BLASLONG n, FLOAT *x, FLOAT *amin) {
|
|||
"2:\n\t"
|
||||
"nop 0"
|
||||
: [iamin] "=r"(iamin),[amin] "=Q"(*amin),[n] "+&r"(n)
|
||||
: "m"(*(const struct { FLOAT x[n]; } *) x),[x] "a"(x)
|
||||
: "m"(*(const FLOAT (*)[n]) x),[x] "a"(x)
|
||||
: "cc", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v16",
|
||||
"v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25", "v26",
|
||||
"v27", "v28", "v29", "v30", "v31");
|
||||
|
|
|
@ -142,7 +142,7 @@ static BLASLONG idmax_kernel_32(BLASLONG n, FLOAT *x, FLOAT *max) {
|
|||
"2:\n\t"
|
||||
"nop 0"
|
||||
: [imax] "=r"(imax),[max] "=Q"(*max),[n] "+&r"(n)
|
||||
: "m"(*(const struct { FLOAT x[n]; } *) x),[x] "a"(x)
|
||||
: "m"(*(const FLOAT (*)[n]) x),[x] "a"(x)
|
||||
: "cc", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v16",
|
||||
"v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25", "v26",
|
||||
"v27", "v28", "v29", "v30", "v31");
|
||||
|
|
|
@ -142,7 +142,7 @@ static BLASLONG idmin_kernel_32(BLASLONG n, FLOAT *x, FLOAT *min) {
|
|||
"2:\n\t"
|
||||
"nop 0"
|
||||
: [imin] "=r"(imin),[min] "=Q"(*min),[n] "+&r"(n)
|
||||
: "m"(*(const struct { FLOAT x[n]; } *) x),[x] "a"(x)
|
||||
: "m"(*(const FLOAT (*)[n]) x),[x] "a"(x)
|
||||
: "cc", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v16",
|
||||
"v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25", "v26",
|
||||
"v27", "v28", "v29", "v30", "v31");
|
||||
|
|
|
@ -206,7 +206,7 @@ static BLASLONG isamax_kernel_64(BLASLONG n, FLOAT *x, FLOAT *amax) {
|
|||
"2:\n\t"
|
||||
"nop 0"
|
||||
: [iamax] "=r"(iamax),[amax] "=Q"(*amax),[n] "+&r"(n)
|
||||
: "m"(*(const struct { FLOAT x[n]; } *) x),[x] "a"(x)
|
||||
: "m"(*(const FLOAT(*)[n]) x),[x] "a"(x)
|
||||
: "cc", "r1", "v0", "v1", "v2", "v4", "v5", "v6", "v7", "v8", "v16",
|
||||
"v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25", "v26",
|
||||
"v27", "v28", "v29", "v30", "v31");
|
||||
|
|
|
@ -206,7 +206,7 @@ static BLASLONG isamin_kernel_64(BLASLONG n, FLOAT *x, FLOAT *amin) {
|
|||
"2:\n\t"
|
||||
"nop 0"
|
||||
: [iamin] "=r"(iamin),[amin] "=Q"(*amin),[n] "+&r"(n)
|
||||
: "m"(*(const struct { FLOAT x[n]; } *) x),[x] "a"(x)
|
||||
: "m"(*(const FLOAT (*)[n]) x),[x] "a"(x)
|
||||
: "cc", "r1", "v0", "v1", "v2", "v4", "v5", "v6", "v7", "v8", "v16",
|
||||
"v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25", "v26",
|
||||
"v27", "v28", "v29", "v30", "v31");
|
||||
|
|
|
@ -186,7 +186,7 @@ static BLASLONG ismax_kernel_64(BLASLONG n, FLOAT *x, FLOAT *max) {
|
|||
"2:\n\t"
|
||||
"nop 0"
|
||||
: [imax] "=r"(imax),[max] "=Q"(*max),[n] "+&r"(n)
|
||||
: "m"(*(const struct { FLOAT x[n]; } *) x),[x] "a"(x)
|
||||
: "m"(*(const FLOAT (*)[n]) x),[x] "a"(x)
|
||||
: "cc", "r1", "v0", "v1", "v2", "v4", "v5", "v6", "v7", "v8", "v16",
|
||||
"v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25", "v26",
|
||||
"v27", "v28", "v29", "v30", "v31");
|
||||
|
|
|
@ -186,7 +186,7 @@ static BLASLONG ismin_kernel_64(BLASLONG n, FLOAT *x, FLOAT *min) {
|
|||
"2:\n\t"
|
||||
"nop 0"
|
||||
: [imin] "=r"(imin),[min] "=Q"(*min),[n] "+&r"(n)
|
||||
: "m"(*(const struct { FLOAT x[n]; } *) x),[x] "a"(x)
|
||||
: "m"(*(const FLOAT (*)[n]) x),[x] "a"(x)
|
||||
: "cc", "r1", "v0", "v1", "v2", "v4", "v5", "v6", "v7", "v8", "v16",
|
||||
"v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25", "v26",
|
||||
"v27", "v28", "v29", "v30", "v31");
|
||||
|
|
|
@ -159,7 +159,7 @@ static BLASLONG izamax_kernel_16(BLASLONG n, FLOAT *x, FLOAT *amax) {
|
|||
"2:\n\t"
|
||||
"nop 0"
|
||||
: [iamax] "=r"(iamax),[amax] "=Q"(*amax),[n] "+&r"(n)
|
||||
: "m"(*(const struct { FLOAT x[n * 2]; } *) x),[x] "a"(x)
|
||||
: "m"(*(const FLOAT (*)[n * 2]) x),[x] "a"(x)
|
||||
: "cc", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v16", "v17", "v18",
|
||||
"v19", "v20", "v21", "v22", "v23", "v24", "v25", "v26", "v27");
|
||||
|
||||
|
|
|
@ -159,7 +159,7 @@ static BLASLONG izamin_kernel_16(BLASLONG n, FLOAT *x, FLOAT *amin) {
|
|||
"2:\n\t"
|
||||
"nop 0"
|
||||
: [iamin] "=r"(iamin),[amin] "=Q"(*amin),[n] "+&r"(n)
|
||||
: "m"(*(const struct { FLOAT x[n * 2]; } *) x),[x] "a"(x)
|
||||
: "m"(*(const FLOAT (*)[n * 2]) x),[x] "a"(x)
|
||||
: "cc", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v16", "v17", "v18",
|
||||
"v19", "v20", "v21", "v22", "v23", "v24", "v25", "v26", "v27");
|
||||
|
||||
|
|
|
@ -78,7 +78,7 @@ static FLOAT samax_kernel_64(BLASLONG n, FLOAT *x) {
|
|||
"wfmaxsb %%v0,%%v0,%%v16,8\n\t"
|
||||
"lper %[amax],%%f0"
|
||||
: [amax] "=f"(amax),[n] "+&r"(n)
|
||||
: "m"(*(const struct { FLOAT x[n]; } *) x),[x] "a"(x)
|
||||
: "m"(*(const FLOAT (*)[n]) x),[x] "a"(x)
|
||||
: "cc", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21", "v22",
|
||||
"v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31");
|
||||
|
||||
|
|
|
@ -78,7 +78,7 @@ static FLOAT samin_kernel_64(BLASLONG n, FLOAT *x) {
|
|||
"wfminsb %%v0,%%v0,%%v16,8\n\t"
|
||||
"lper %[amin],%%f0"
|
||||
: [amin] "=f"(amin),[n] "+&r"(n)
|
||||
: "m"(*(const struct { FLOAT x[n]; } *) x),[x] "a"(x)
|
||||
: "m"(*(const FLOAT (*)[n]) x),[x] "a"(x)
|
||||
: "cc", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21", "v22",
|
||||
"v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31");
|
||||
|
||||
|
|
|
@ -108,7 +108,7 @@ static FLOAT sasum_kernel_64(BLASLONG n, FLOAT *x) {
|
|||
"vfasb %%v24,%%v24,%%v25\n\t"
|
||||
"vstef %%v24,%[asum],0"
|
||||
: [asum] "=Q"(asum),[n] "+&r"(n)
|
||||
: "m"(*(const struct { FLOAT x[n]; } *) x),[x] "a"(x)
|
||||
: "m"(*(const FLOAT (*)[n]) x),[x] "a"(x)
|
||||
: "cc", "r1", "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23",
|
||||
"v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31");
|
||||
|
||||
|
|
|
@ -100,8 +100,8 @@ static void saxpy_kernel_64(BLASLONG n, FLOAT *x, FLOAT *y, FLOAT *alpha) {
|
|||
"vst %%v27,240(%%r1,%[y])\n\t"
|
||||
"agfi %%r1,256\n\t"
|
||||
"brctg %[n],0b"
|
||||
: "+m"(*(struct { FLOAT x[n]; } *) y),[n] "+&r"(n)
|
||||
: [y] "a"(y), "m"(*(const struct { FLOAT x[n]; } *) x),[x] "a"(x),
|
||||
: "+m"(*(FLOAT (*)[n]) y),[n] "+&r"(n)
|
||||
: [y] "a"(y), "m"(*(const FLOAT (*)[n]) x),[x] "a"(x),
|
||||
[alpha] "Q"(*alpha)
|
||||
: "cc", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21", "v22",
|
||||
"v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31");
|
||||
|
|
|
@ -36,8 +36,8 @@ static void scopy_kernel_64(BLASLONG n, FLOAT *x, FLOAT *y) {
|
|||
"la %[x],256(%[x])\n\t"
|
||||
"la %[y],256(%[y])\n\t"
|
||||
"brctg %[n],0b"
|
||||
: "=m"(*(struct { FLOAT x[n]; } *) y),[x] "+&a"(x),[y] "+&a"(y),[n] "+&r"(n)
|
||||
: "m"(*(const struct { FLOAT x[n]; } *) x)
|
||||
: "=m"(*(FLOAT (*)[n]) y),[x] "+&a"(x),[y] "+&a"(y),[n] "+&r"(n)
|
||||
: "m"(*(const FLOAT (*)[n]) x)
|
||||
: "cc");
|
||||
}
|
||||
|
||||
|
|
|
@ -84,8 +84,8 @@ static FLOAT sdot_kernel_32(BLASLONG n, FLOAT *x, FLOAT *y) {
|
|||
"aebr %%f0,%%f3\n\t"
|
||||
"ler %[dot],%%f0"
|
||||
: [dot] "=f"(dot),[n] "+&r"(n)
|
||||
: "m"(*(const struct { FLOAT x[n]; } *) x),[x] "a"(x),
|
||||
"m"(*(const struct { FLOAT x[n]; } *) y),[y] "a"(y)
|
||||
: "m"(*(const FLOAT (*)[n]) x),[x] "a"(x),
|
||||
"m"(*(const FLOAT (*)[n]) y),[y] "a"(y)
|
||||
: "cc", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v16",
|
||||
"v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25", "v26",
|
||||
"v27", "v28", "v29", "v30", "v31");
|
||||
|
|
|
@ -160,12 +160,12 @@ static void sgemv_kernel_4x4(BLASLONG n, FLOAT **ap, FLOAT *x, FLOAT *y,
|
|||
"brctg %%r0,2b\n\t"
|
||||
"3:\n\t"
|
||||
"nop 0"
|
||||
: "+m"(*(struct { FLOAT x[n]; } *) y)
|
||||
: [y] "a"(y), "m"(*(const struct { FLOAT x[n]; } *) ap0),[ap0] "a"(ap0),
|
||||
"m"(*(const struct { FLOAT x[n]; } *) ap1),[ap1] "a"(ap1),
|
||||
"m"(*(const struct { FLOAT x[n]; } *) ap2),[ap2] "a"(ap2),
|
||||
"m"(*(const struct { FLOAT x[n]; } *) ap3),[ap3] "a"(ap3),
|
||||
"m"(*(const struct { FLOAT x[4]; } *) x),[x] "a"(x),[alpha] "Q"(*alpha),
|
||||
: "+m"(*(FLOAT (*)[n]) y)
|
||||
: [y] "a"(y), "m"(*(const FLOAT (*)[n]) ap0),[ap0] "a"(ap0),
|
||||
"m"(*(const FLOAT (*)[n]) ap1),[ap1] "a"(ap1),
|
||||
"m"(*(const FLOAT (*)[n]) ap2),[ap2] "a"(ap2),
|
||||
"m"(*(const FLOAT (*)[n]) ap3),[ap3] "a"(ap3),
|
||||
"m"(*(const FLOAT (*)[4]) x),[x] "a"(x),[alpha] "Q"(*alpha),
|
||||
[n] "r"(n)
|
||||
: "cc", "r0", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7",
|
||||
"v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25",
|
||||
|
@ -259,10 +259,10 @@ static void sgemv_kernel_4x2(BLASLONG n, FLOAT **ap, FLOAT *x, FLOAT *y,
|
|||
"brctg %%r0,2b\n\t"
|
||||
"3:\n\t"
|
||||
"nop 0"
|
||||
: "+m"(*(struct { FLOAT x[n]; } *) y)
|
||||
: [y] "a"(y), "m"(*(const struct { FLOAT x[n]; } *) ap0),[ap0] "a"(ap0),
|
||||
"m"(*(const struct { FLOAT x[n]; } *) ap1),[ap1] "a"(ap1),
|
||||
"m"(*(const struct { FLOAT x[2]; } *) x),[x] "a"(x),[alpha] "Q"(*alpha),
|
||||
: "+m"(*(FLOAT (*)[n]) y)
|
||||
: [y] "a"(y), "m"(*(const FLOAT (*)[n]) ap0),[ap0] "a"(ap0),
|
||||
"m"(*(const FLOAT (*)[n]) ap1),[ap1] "a"(ap1),
|
||||
"m"(*(const FLOAT (*)[2]) x),[x] "a"(x),[alpha] "Q"(*alpha),
|
||||
[n] "r"(n)
|
||||
: "cc", "r0", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7",
|
||||
"v8", "v9", "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23",
|
||||
|
@ -332,8 +332,8 @@ static void sgemv_kernel_4x1(BLASLONG n, FLOAT *a0, FLOAT *x, FLOAT *y,
|
|||
"brctg %%r0,2b\n\t"
|
||||
"3:\n\t"
|
||||
"nop 0"
|
||||
: "+m"(*(struct { FLOAT x[n]; } *) y)
|
||||
: [y] "a"(y), "m"(*(const struct { FLOAT x[n]; } *) a0),[a0] "a"(a0),
|
||||
: "+m"(*(FLOAT (*)[n]) y)
|
||||
: [y] "a"(y), "m"(*(const FLOAT (*)[n]) a0),[a0] "a"(a0),
|
||||
"m"(*(const FLOAT (*)[1]) x),[x] "a"(x),[alpha] "Q"(*alpha),
|
||||
[n] "r"(n)
|
||||
: "cc", "r0", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21",
|
||||
|
|
|
@ -172,12 +172,12 @@ static void sgemv_kernel_4x4(BLASLONG n, FLOAT **ap, FLOAT *x, FLOAT *y) {
|
|||
"vrepg %%v4,%%v3,1\n\t"
|
||||
"aebr %%f3,%%f4\n\t"
|
||||
"ste %%f3,12(%[y])"
|
||||
: "=m"(*(struct { FLOAT x[4]; } *) y)
|
||||
: [y] "a"(y), "m"(*(const struct { FLOAT x[n]; } *) ap0),[ap0] "a"(ap0),
|
||||
"m"(*(const struct { FLOAT x[n]; } *) ap1),[ap1] "a"(ap1),
|
||||
"m"(*(const struct { FLOAT x[n]; } *) ap2),[ap2] "a"(ap2),
|
||||
"m"(*(const struct { FLOAT x[n]; } *) ap3),[ap3] "a"(ap3),
|
||||
"m"(*(const struct { FLOAT x[n]; } *) x),[x] "a"(x),[n] "r"(n)
|
||||
: "=m"(*(FLOAT (*)[4]) y)
|
||||
: [y] "a"(y), "m"(*(const FLOAT (*)[n]) ap0),[ap0] "a"(ap0),
|
||||
"m"(*(const FLOAT (*)[n]) ap1),[ap1] "a"(ap1),
|
||||
"m"(*(const FLOAT (*)[n]) ap2),[ap2] "a"(ap2),
|
||||
"m"(*(const FLOAT (*)[n]) ap3),[ap3] "a"(ap3),
|
||||
"m"(*(const FLOAT (*)[n]) x),[x] "a"(x),[n] "r"(n)
|
||||
: "cc", "r0", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7",
|
||||
"v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25",
|
||||
"v26", "v27", "v28", "v29", "v30", "v31");
|
||||
|
@ -278,10 +278,10 @@ static void sgemv_kernel_4x2(BLASLONG n, FLOAT **ap, FLOAT *x, FLOAT *y) {
|
|||
"vrepg %%v2,%%v1,1\n\t"
|
||||
"aebr %%f1,%%f2\n\t"
|
||||
"ste %%f1,4(%[y])"
|
||||
: "=m"(*(struct { FLOAT x[2]; } *) y)
|
||||
: [y] "a"(y), "m"(*(const struct { FLOAT x[n]; } *) ap0),[ap0] "a"(ap0),
|
||||
"m"(*(const struct { FLOAT x[n]; } *) ap1),[ap1] "a"(ap1),
|
||||
"m"(*(const struct { FLOAT x[n]; } *) x),[x] "a"(x),[n] "r"(n)
|
||||
: "=m"(*(FLOAT (*)[2]) y)
|
||||
: [y] "a"(y), "m"(*(const FLOAT (*)[n]) ap0),[ap0] "a"(ap0),
|
||||
"m"(*(const FLOAT (*)[n]) ap1),[ap1] "a"(ap1),
|
||||
"m"(*(const FLOAT (*)[n]) x),[x] "a"(x),[n] "r"(n)
|
||||
: "cc", "r0", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7",
|
||||
"v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25",
|
||||
"v26", "v27", "v28", "v29", "v30", "v31");
|
||||
|
@ -357,8 +357,8 @@ static void sgemv_kernel_4x1(BLASLONG n, FLOAT *a0, FLOAT *x, FLOAT *y) {
|
|||
"aebr %%f0,%%f1\n\t"
|
||||
"ste %%f0,0(%[y])"
|
||||
: "=m"(*(FLOAT (*)[1]) y)
|
||||
: [y] "a"(y), "m"(*(const struct { FLOAT x[n]; } *) a0),[a0] "a"(a0),
|
||||
"m"(*(const struct { FLOAT x[n]; } *) x),[x] "a"(x),[n] "r"(n)
|
||||
: [y] "a"(y), "m"(*(const FLOAT (*)[n]) a0),[a0] "a"(a0),
|
||||
"m"(*(const FLOAT (*)[n]) x),[x] "a"(x),[n] "r"(n)
|
||||
: "cc", "r0", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7",
|
||||
"v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25",
|
||||
"v26", "v27", "v28", "v29", "v30", "v31");
|
||||
|
@ -432,8 +432,8 @@ static void add_y_kernel_4(BLASLONG n, FLOAT da, FLOAT *src, FLOAT *dest) {
|
|||
"brctg %%r0,2b\n\t"
|
||||
"3:\n\t"
|
||||
"nop 0"
|
||||
: "+m"(*(struct { FLOAT x[n]; } *) dest)
|
||||
: [dest] "a"(dest),[da] "Q"(da), "m"(*(const struct { FLOAT x[n]; } *) src),
|
||||
: "+m"(*(FLOAT (*)[n]) dest)
|
||||
: [dest] "a"(dest),[da] "Q"(da), "m"(*(const FLOAT (*)[n]) src),
|
||||
[src] "a"(src),[n] "r"(n)
|
||||
: "cc", "r0", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21",
|
||||
"v22", "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30",
|
||||
|
|
|
@ -75,7 +75,7 @@ static FLOAT smax_kernel_64(BLASLONG n, FLOAT *x) {
|
|||
"wfmaxsb %%v0,%%v0,%%v16,0\n\t"
|
||||
"ler %[max],%%f0"
|
||||
: [max] "=f"(max),[n] "+&r"(n)
|
||||
: "m"(*(const struct { FLOAT x[n]; } *) x),[x] "a"(x)
|
||||
: "m"(*(const FLOAT(*)[n]) x),[x] "a"(x)
|
||||
: "cc", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21", "v22",
|
||||
"v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31");
|
||||
|
||||
|
|
|
@ -75,7 +75,7 @@ static FLOAT smin_kernel_64(BLASLONG n, FLOAT *x) {
|
|||
"wfminsb %%v0,%%v0,%%v16,0\n\t"
|
||||
"ler %[min],%%f0"
|
||||
: [min] "=f"(min),[n] "+&r"(n)
|
||||
: "m"(*(const struct { FLOAT x[n]; } *) x),[x] "a"(x)
|
||||
: "m"(*(const FLOAT (*)[n]) x),[x] "a"(x)
|
||||
: "cc", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21", "v22",
|
||||
"v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31");
|
||||
|
||||
|
|
|
@ -169,7 +169,7 @@ static void srot_kernel_64(BLASLONG n, FLOAT *x, FLOAT *y, FLOAT *c, FLOAT *s) {
|
|||
"vst %%v23, 240(%%r1,%[y])\n\t"
|
||||
"agfi %%r1,256\n\t"
|
||||
"brctg %[n],0b"
|
||||
: "+m"(*(struct { FLOAT x[n]; } *) x), "+m"(*(struct { FLOAT x[n]; } *) y),
|
||||
: "+m"(*(FLOAT (*)[n]) x), "+m"(*(FLOAT (*)[n]) y),
|
||||
[n] "+&r"(n)
|
||||
: [x] "a"(x),[y] "a"(y),[c] "Q"(*c),[s] "Q"(*s)
|
||||
: "cc", "r1", "v0", "v1", "v16", "v17", "v18", "v19", "v20", "v21",
|
||||
|
|
|
@ -59,7 +59,7 @@ static void sscal_kernel_32(BLASLONG n, FLOAT da, FLOAT *x) {
|
|||
"vst %%v31,112(%%r1,%[x])\n\t"
|
||||
"agfi %%r1,128\n\t"
|
||||
"brctg %[n],0b"
|
||||
: "+m"(*(struct { FLOAT x[n]; } *) x),[n] "+&r"(n)
|
||||
: "+m"(*(FLOAT (*)[n]) x),[n] "+&r"(n)
|
||||
: [x] "a"(x),[da] "Q"(da)
|
||||
: "cc", "r1", "v0", "v24", "v25", "v26", "v27", "v28", "v29", "v30",
|
||||
"v31");
|
||||
|
@ -81,7 +81,7 @@ static void sscal_kernel_32_zero(BLASLONG n, FLOAT *x) {
|
|||
"vst %%v0,112(%%r1,%[x])\n\t"
|
||||
"agfi %%r1,128\n\t"
|
||||
"brctg %[n],0b"
|
||||
: "=m"(*(struct { FLOAT x[n]; } *) x),[n] "+&r"(n)
|
||||
: "=m"(*(FLOAT (*)[n]) x),[n] "+&r"(n)
|
||||
: [x] "a"(x)
|
||||
: "cc", "r1", "v0");
|
||||
}
|
||||
|
|
|
@ -91,7 +91,7 @@ static FLOAT ssum_kernel_64(BLASLONG n, FLOAT *x) {
|
|||
"vfasb %%v24,%%v24,%%v25\n\t"
|
||||
"vstef %%v24,%[sum],0"
|
||||
: [sum] "=Q"(sum),[n] "+&r"(n)
|
||||
: "m"(*(const struct { FLOAT x[n]; } *) x),[x] "a"(x)
|
||||
: "m"(*(const FLOAT (*)[n]) x),[x] "a"(x)
|
||||
: "cc", "r1", "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23",
|
||||
"v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31");
|
||||
|
||||
|
|
|
@ -99,7 +99,7 @@ static void sswap_kernel_64(BLASLONG n, FLOAT *x, FLOAT *y) {
|
|||
"vst %%v31, 240(%%r1,%[y])\n\t"
|
||||
"agfi %%r1,256\n\t"
|
||||
"brctg %[n],0b"
|
||||
: "+m"(*(struct { FLOAT x[n]; } *) x), "+m"(*(struct { FLOAT x[n]; } *) y),
|
||||
: "+m"(*(FLOAT (*)[n]) x), "+m"(*(FLOAT (*)[n]) y),
|
||||
[n] "+&r"(n)
|
||||
: [x] "a"(x),[y] "a"(y)
|
||||
: "cc", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v16",
|
||||
|
|
|
@ -114,7 +114,7 @@ static FLOAT zamax_kernel_16(BLASLONG n, FLOAT *x) {
|
|||
"wfmaxdb %%v0,%%v0,%%v16,0\n\t"
|
||||
"ldr %[amax],%%f0"
|
||||
: [amax] "=f"(amax),[n] "+&r"(n)
|
||||
: "m"(*(const struct { FLOAT x[n * 2]; } *) x),[x] "a"(x)
|
||||
: "m"(*(const FLOAT (*)[n * 2]) x),[x] "a"(x)
|
||||
: "cc", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21", "v22",
|
||||
"v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31");
|
||||
|
||||
|
|
|
@ -123,7 +123,7 @@ static FLOAT zamax_kernel_16(BLASLONG n, FLOAT *x) {
|
|||
"vsel %%v0,%%v0,%%v16,%%v17\n\t"
|
||||
"ldr %[amax],%%f0"
|
||||
: [amax] "=f"(amax),[n] "+&r"(n)
|
||||
: "m"(*(const struct { FLOAT x[n * 2]; } *) x),[x] "a"(x)
|
||||
: "m"(*(const FLOAT (*)[n * 2]) x),[x] "a"(x)
|
||||
: "cc", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21", "v22",
|
||||
"v23", "v24", "v25", "v26", "v27");
|
||||
|
||||
|
|
|
@ -114,7 +114,7 @@ static FLOAT zamin_kernel_16(BLASLONG n, FLOAT *x) {
|
|||
"wfmindb %%v0,%%v0,%%v16,0\n\t"
|
||||
"ldr %[amin],%%f0"
|
||||
: [amin] "=f"(amin),[n] "+&r"(n)
|
||||
: "m"(*(const struct { FLOAT x[n * 2]; } *) x),[x] "a"(x)
|
||||
: "m"(*(const FLOAT (*)[n * 2]) x),[x] "a"(x)
|
||||
: "cc", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21", "v22",
|
||||
"v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31");
|
||||
|
||||
|
|
|
@ -123,7 +123,7 @@ static FLOAT zamin_kernel_16(BLASLONG n, FLOAT *x) {
|
|||
"vsel %%v0,%%v0,%%v16,%%v17\n\t"
|
||||
"ldr %[amin],%%f0"
|
||||
: [amin] "=f"(amin),[n] "+&r"(n)
|
||||
: "m"(*(const struct { FLOAT x[n * 2]; } *) x),[x] "a"(x)
|
||||
: "m"(*(const FLOAT (*)[n * 2]) x),[x] "a"(x)
|
||||
: "cc", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21", "v22",
|
||||
"v23", "v24", "v25", "v26", "v27");
|
||||
|
||||
|
|
|
@ -106,7 +106,7 @@ static FLOAT zasum_kernel_16(BLASLONG n, FLOAT *x) {
|
|||
"vfadb %%v24,%%v24,%%v25\n\t"
|
||||
"vsteg %%v24,%[asum],0"
|
||||
: [asum] "=Q"(asum),[n] "+&r"(n)
|
||||
: "m"(*(const struct { FLOAT x[n * 2]; } *) x),[x] "a"(x)
|
||||
: "m"(*(const FLOAT (*)[n * 2]) x),[x] "a"(x)
|
||||
: "cc", "r1", "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23",
|
||||
"v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31");
|
||||
|
||||
|
|
|
@ -95,9 +95,9 @@ static void zaxpy_kernel_8(BLASLONG n, FLOAT *x, FLOAT *y, FLOAT *alpha) {
|
|||
"vst %%v19,112(%%r1,%[y])\n\t"
|
||||
"agfi %%r1,128\n\t"
|
||||
"brctg %[n],0b"
|
||||
: "+m"(*(struct { FLOAT x[n * 2]; } *) y),[n] "+&r"(n)
|
||||
: [y] "a"(y), "m"(*(const struct { FLOAT x[n * 2]; } *) x),[x] "a"(x),
|
||||
"m"(*(const struct { FLOAT x[2]; } *) alpha),[alpha] "a"(alpha)
|
||||
: "+m"(*(FLOAT (*)[n * 2]) y),[n] "+&r"(n)
|
||||
: [y] "a"(y), "m"(*(const FLOAT (*)[n * 2]) x),[x] "a"(x),
|
||||
"m"(*(const FLOAT (*)[2]) alpha),[alpha] "a"(alpha)
|
||||
: "cc", "r1", "v0", "v1", "v8", "v9", "v10", "v11", "v12", "v13",
|
||||
"v14", "v15", "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23",
|
||||
"v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31");
|
||||
|
|
|
@ -36,9 +36,9 @@ static void zcopy_kernel_16(BLASLONG n, FLOAT *x, FLOAT *y) {
|
|||
"la %[x],256(%[x])\n\t"
|
||||
"la %[y],256(%[y])\n\t"
|
||||
"brctg %[n],0b"
|
||||
: "=m"(*(struct { FLOAT x[n * 2]; } *) y),[x] "+&a"(x),[y] "+&a"(y),
|
||||
: "=m"(*(FLOAT (*)[n * 2]) y),[x] "+&a"(x),[y] "+&a"(y),
|
||||
[n] "+&r"(n)
|
||||
: "m"(*(const struct { FLOAT x[n * 2]; } *) x)
|
||||
: "m"(*(const FLOAT (*)[n * 2]) x)
|
||||
: "cc");
|
||||
}
|
||||
|
||||
|
|
|
@ -93,9 +93,9 @@ static void zdot_kernel_8(BLASLONG n, FLOAT *x, FLOAT *y, FLOAT *d) {
|
|||
"vsteg %%v24,8(%[d]),1\n\t"
|
||||
"vsteg %%v25,16(%[d]),1\n\t"
|
||||
"vsteg %%v25,24(%[d]),0"
|
||||
: "=m"(*(struct { FLOAT x[4]; } *) d),[n] "+&r"(n)
|
||||
: [d] "a"(d), "m"(*(const struct { FLOAT x[n * 2]; } *) x),[x] "a"(x),
|
||||
"m"(*(const struct { FLOAT x[n * 2]; } *) y),[y] "a"(y)
|
||||
: "=m"(*(FLOAT (*)[4]) d),[n] "+&r"(n)
|
||||
: [d] "a"(d), "m"(*(const FLOAT (*)[n * 2]) x),[x] "a"(x),
|
||||
"m"(*(const FLOAT (*)[n * 2]) y),[y] "a"(y)
|
||||
: "cc", "r1", "v0", "v1", "v2", "v3", "v16", "v17", "v18", "v19", "v20",
|
||||
"v21", "v22", "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30",
|
||||
"v31");
|
||||
|
|
|
@ -112,12 +112,12 @@ static void zgemv_kernel_4x4(BLASLONG n, FLOAT **ap, FLOAT *x, FLOAT *y) {
|
|||
"vst %%v1,16(%%r1,%[y])\n\t"
|
||||
"agfi %%r1,32\n\t"
|
||||
"brctg %[n],0b"
|
||||
: "+m"(*(struct { FLOAT x[n * 2]; } *) y),[n] "+&r"(n)
|
||||
: [y] "a"(y), "m"(*(const struct { FLOAT x[n * 2]; } *) ap0),[ap0] "a"(ap0),
|
||||
"m"(*(const struct { FLOAT x[n * 2]; } *) ap1),[ap1] "a"(ap1),
|
||||
"m"(*(const struct { FLOAT x[n * 2]; } *) ap2),[ap2] "a"(ap2),
|
||||
"m"(*(const struct { FLOAT x[n * 2]; } *) ap3),[ap3] "a"(ap3),
|
||||
"m"(*(const struct { FLOAT x[8]; } *) x),[x] "a"(x)
|
||||
: "+m"(*(FLOAT (*)[n * 2]) y),[n] "+&r"(n)
|
||||
: [y] "a"(y), "m"(*(const FLOAT (*)[n * 2]) ap0),[ap0] "a"(ap0),
|
||||
"m"(*(const FLOAT (*)[n * 2]) ap1),[ap1] "a"(ap1),
|
||||
"m"(*(const FLOAT (*)[n * 2]) ap2),[ap2] "a"(ap2),
|
||||
"m"(*(const FLOAT (*)[n * 2]) ap3),[ap3] "a"(ap3),
|
||||
"m"(*(const FLOAT (*)[8]) x),[x] "a"(x)
|
||||
: "cc", "r1", "v0", "v1", "v16", "v17", "v18", "v19", "v20", "v21",
|
||||
"v22", "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30",
|
||||
"v31");
|
||||
|
@ -172,10 +172,10 @@ static void zgemv_kernel_4x2(BLASLONG n, FLOAT **ap, FLOAT *x, FLOAT *y) {
|
|||
"vst %%v1,16(%%r1,%[y])\n\t"
|
||||
"agfi %%r1,32\n\t"
|
||||
"brctg %[n],0b"
|
||||
: "+m"(*(struct { FLOAT x[n * 2]; } *) y),[n] "+&r"(n)
|
||||
: [y] "a"(y), "m"(*(const struct { FLOAT x[n * 2]; } *) ap0),[ap0] "a"(ap0),
|
||||
"m"(*(const struct { FLOAT x[n * 2]; } *) ap1),[ap1] "a"(ap1),
|
||||
"m"(*(const struct { FLOAT x[4]; } *) x),[x] "a"(x)
|
||||
: "+m"(*(FLOAT (*)[n * 2]) y),[n] "+&r"(n)
|
||||
: [y] "a"(y), "m"(*(const FLOAT (*)[n * 2]) ap0),[ap0] "a"(ap0),
|
||||
"m"(*(const FLOAT (*)[n * 2]) ap1),[ap1] "a"(ap1),
|
||||
"m"(*(const FLOAT (*)[4]) x),[x] "a"(x)
|
||||
: "cc", "r1", "v0", "v1", "v16", "v17", "v18", "v19", "v20", "v21",
|
||||
"v22", "v23", "v24", "v25", "v26", "v27");
|
||||
}
|
||||
|
@ -210,9 +210,9 @@ static void zgemv_kernel_4x1(BLASLONG n, FLOAT *ap, FLOAT *x, FLOAT *y) {
|
|||
"vst %%v1,16(%%r1,%[y])\n\t"
|
||||
"agfi %%r1,32\n\t"
|
||||
"brctg %[n],0b"
|
||||
: "+m"(*(struct { FLOAT x[n * 2]; } *) y),[n] "+&r"(n)
|
||||
: [y] "a"(y), "m"(*(const struct { FLOAT x[n * 2]; } *) ap),[ap] "a"(ap),
|
||||
"m"(*(const struct { FLOAT x[2]; } *) x),[x] "a"(x)
|
||||
: "+m"(*(FLOAT (*)[n * 2]) y),[n] "+&r"(n)
|
||||
: [y] "a"(y), "m"(*(const FLOAT (*)[n * 2]) ap),[ap] "a"(ap),
|
||||
"m"(*(const FLOAT (*)[2]) x),[x] "a"(x)
|
||||
: "cc", "r1", "v0", "v1", "v16", "v17", "v18", "v19", "v20", "v21");
|
||||
}
|
||||
|
||||
|
@ -261,8 +261,8 @@ static void add_y_4(BLASLONG n, FLOAT *src, FLOAT *dest, FLOAT alpha_r,
|
|||
"vst %%v31,48(%%r1,%[dest])\n\t"
|
||||
"agfi %%r1,64\n\t"
|
||||
"brctg %[n],0b"
|
||||
: "+m"(*(struct { FLOAT x[n * 2]; } *) dest),[n] "+&r"(n)
|
||||
: [dest] "a"(dest), "m"(*(const struct { FLOAT x[n * 2]; } *) src),
|
||||
: "+m"(*(FLOAT (*)[n * 2]) dest),[n] "+&r"(n)
|
||||
: [dest] "a"(dest), "m"(*(const FLOAT (*)[n * 2]) src),
|
||||
[src] "a"(src),[alpha_r] "Q"(alpha_r),[alpha_i] "Q"(alpha_i)
|
||||
: "cc", "r1", "v0", "v1", "v16", "v17", "v18", "v19", "v20", "v21",
|
||||
"v22", "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30",
|
||||
|
|
|
@ -141,13 +141,13 @@ static void zgemv_kernel_4x4(BLASLONG n, FLOAT **ap, FLOAT *x, FLOAT *y,
|
|||
"vst %%v27,16(%[y])\n\t"
|
||||
"vst %%v28,32(%[y])\n\t"
|
||||
"vst %%v29,48(%[y])"
|
||||
: "+m"(*(struct { FLOAT x[8]; } *) y),[n] "+&r"(n)
|
||||
: [y] "a"(y), "m"(*(const struct { FLOAT x[n * 2]; } *) ap0),[ap0] "a"(ap0),
|
||||
"m"(*(const struct { FLOAT x[n * 2]; } *) ap1),[ap1] "a"(ap1),
|
||||
"m"(*(const struct { FLOAT x[n * 2]; } *) ap2),[ap2] "a"(ap2),
|
||||
"m"(*(const struct { FLOAT x[n * 2]; } *) ap3),[ap3] "a"(ap3),
|
||||
"m"(*(const struct { FLOAT x[n * 2]; } *) x),[x] "a"(x),
|
||||
"m"(*(const struct { FLOAT x[2]; } *) alpha),[alpha] "a"(alpha)
|
||||
: "+m"(*(FLOAT (*)[8]) y),[n] "+&r"(n)
|
||||
: [y] "a"(y), "m"(*(const FLOAT (*)[n * 2]) ap0),[ap0] "a"(ap0),
|
||||
"m"(*(const FLOAT (*)[n * 2]) ap1),[ap1] "a"(ap1),
|
||||
"m"(*(const FLOAT (*)[n * 2]) ap2),[ap2] "a"(ap2),
|
||||
"m"(*(const FLOAT (*)[n * 2]) ap3),[ap3] "a"(ap3),
|
||||
"m"(*(const FLOAT (*)[n * 2]) x),[x] "a"(x),
|
||||
"m"(*(const FLOAT (*)[2]) alpha),[alpha] "a"(alpha)
|
||||
: "cc", "r1", "v0", "v1", "v16", "v17", "v18", "v19", "v20", "v21",
|
||||
"v22", "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30",
|
||||
"v31");
|
||||
|
@ -229,11 +229,11 @@ static void zgemv_kernel_4x2(BLASLONG n, FLOAT **ap, FLOAT *x, FLOAT *y,
|
|||
"vfmadb %%v23,%%v19,%%v21,%%v23\n\t"
|
||||
"vst %%v22,0(%[y])\n\t"
|
||||
"vst %%v23,16(%[y])\n\t"
|
||||
: "+m"(*(struct { FLOAT x[4]; } *) y),[n] "+&r"(n)
|
||||
: [y] "a"(y), "m"(*(const struct { FLOAT x[n * 2]; } *) ap0),[ap0] "a"(ap0),
|
||||
"m"(*(const struct { FLOAT x[n * 2]; } *) ap1),[ap1] "a"(ap1),
|
||||
"m"(*(const struct { FLOAT x[n * 2]; } *) x),[x] "a"(x),
|
||||
"m"(*(const struct { FLOAT x[2]; } *) alpha),[alpha] "a"(alpha)
|
||||
: "+m"(*(FLOAT (*)[4]) y),[n] "+&r"(n)
|
||||
: [y] "a"(y), "m"(*(const FLOAT (*)[n * 2]) ap0),[ap0] "a"(ap0),
|
||||
"m"(*(const FLOAT (*)[n * 2]) ap1),[ap1] "a"(ap1),
|
||||
"m"(*(const FLOAT (*)[n * 2]) x),[x] "a"(x),
|
||||
"m"(*(const FLOAT (*)[2]) alpha),[alpha] "a"(alpha)
|
||||
: "cc", "r1", "v0", "v1", "v16", "v17", "v18", "v19", "v20", "v21",
|
||||
"v22", "v23");
|
||||
}
|
||||
|
@ -294,10 +294,10 @@ static void zgemv_kernel_4x1(BLASLONG n, FLOAT *ap, FLOAT *x, FLOAT *y,
|
|||
"vfmadb %%v0,%%v16,%%v18,%%v0\n\t"
|
||||
"vfmadb %%v0,%%v17,%%v19,%%v0\n\t"
|
||||
"vst %%v0,0(%[y])\n\t"
|
||||
: "+m"(*(struct { FLOAT x[2]; } *) y),[n] "+&r"(n)
|
||||
: [y] "a"(y), "m"(*(const struct { FLOAT x[n * 2]; } *) ap),[ap] "a"(ap),
|
||||
"m"(*(const struct { FLOAT x[n * 2]; } *) x),[x] "a"(x),
|
||||
"m"(*(const struct { FLOAT x[2]; } *) alpha),[alpha] "a"(alpha)
|
||||
: "+m"(*(FLOAT (*)[2]) y),[n] "+&r"(n)
|
||||
: [y] "a"(y), "m"(*(const FLOAT (*)[n * 2]) ap),[ap] "a"(ap),
|
||||
"m"(*(const FLOAT (*)[n * 2]) x),[x] "a"(x),
|
||||
"m"(*(const FLOAT (*)[2]) alpha),[alpha] "a"(alpha)
|
||||
: "cc", "r1", "v0", "v1", "v16", "v17", "v18", "v19");
|
||||
}
|
||||
|
||||
|
|
|
@ -169,8 +169,8 @@ static void zrot_kernel_16(BLASLONG n, FLOAT *x, FLOAT *y, FLOAT *c, FLOAT *s) {
|
|||
"vst %%v23, 240(%%r1,%[y])\n\t"
|
||||
"agfi %%r1,256\n\t"
|
||||
"brctg %[n],0b"
|
||||
: "+m"(*(struct { FLOAT x[n * 2]; } *) x),
|
||||
"+m"(*(struct { FLOAT x[n * 2]; } *) y),[n] "+&r"(n)
|
||||
: "+m"(*(FLOAT (*)[n * 2]) x),
|
||||
"+m"(*(FLOAT (*)[n * 2]) y),[n] "+&r"(n)
|
||||
: [x] "a"(x),[y] "a"(y),[c] "Q"(*c),[s] "Q"(*s)
|
||||
: "cc", "r1", "v0", "v1", "v16", "v17", "v18", "v19", "v20", "v21",
|
||||
"v22", "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30",
|
||||
|
|
|
@ -78,8 +78,8 @@ static void zscal_kernel_8(BLASLONG n, FLOAT *alpha, FLOAT *x) {
|
|||
"vst %%v23,112(%%r1,%[x])\n\t"
|
||||
"agfi %%r1,128\n\t"
|
||||
"brctg %[n],0b"
|
||||
: "+m"(*(struct { FLOAT x[n * 2]; } *) x),[n] "+&r"(n)
|
||||
: [x] "a"(x), "m"(*(const struct { FLOAT x[2]; } *) alpha),
|
||||
: "+m"(*(FLOAT (*)[n * 2]) x),[n] "+&r"(n)
|
||||
: [x] "a"(x), "m"(*(const FLOAT (*)[2]) alpha),
|
||||
[alpha] "a"(alpha)
|
||||
: "cc", "r1", "v0", "v1", "v16", "v17", "v18", "v19", "v20", "v21",
|
||||
"v22", "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30",
|
||||
|
@ -128,8 +128,8 @@ static void zscal_kernel_8_zero_r(BLASLONG n, FLOAT *alpha, FLOAT *x) {
|
|||
"vst %%v23,112(%%r1,%[x])\n\t"
|
||||
"agfi %%r1,128\n\t"
|
||||
"brctg %[n],0b"
|
||||
: "+m"(*(struct { FLOAT x[n * 2]; } *) x),[n] "+&r"(n)
|
||||
: [x] "a"(x), "m"(*(const struct { FLOAT x[2]; } *) alpha),
|
||||
: "+m"(*(FLOAT (*)[n * 2]) x),[n] "+&r"(n)
|
||||
: [x] "a"(x), "m"(*(const FLOAT (*)[2]) alpha),
|
||||
[alpha] "a"(alpha)
|
||||
: "cc", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21", "v22",
|
||||
"v23");
|
||||
|
@ -167,8 +167,8 @@ static void zscal_kernel_8_zero_i(BLASLONG n, FLOAT *alpha, FLOAT *x) {
|
|||
"vst %%v23,112(%%r1,%[x])\n\t"
|
||||
"agfi %%r1,128\n\t"
|
||||
"brctg %[n],0b"
|
||||
: "+m"(*(struct { FLOAT x[n * 2]; } *) x),[n] "+&r"(n)
|
||||
: [x] "a"(x), "m"(*(const struct { FLOAT x[2]; } *) alpha),
|
||||
: "+m"(*(FLOAT (*)[n * 2]) x),[n] "+&r"(n)
|
||||
: [x] "a"(x), "m"(*(const FLOAT (*)[2]) alpha),
|
||||
[alpha] "a"(alpha)
|
||||
: "cc", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21", "v22",
|
||||
"v23");
|
||||
|
@ -190,7 +190,7 @@ static void zscal_kernel_8_zero(BLASLONG n, FLOAT *x) {
|
|||
"vst %%v0,112(%%r1,%[x])\n\t"
|
||||
"agfi %%r1,128\n\t"
|
||||
"brctg %[n],0b"
|
||||
: "=m"(*(struct { FLOAT x[n * 2]; } *) x),[n] "+&r"(n)
|
||||
: "=m"(*(FLOAT (*)[n * 2]) x),[n] "+&r"(n)
|
||||
: [x] "a"(x)
|
||||
: "cc", "r1", "v0");
|
||||
}
|
||||
|
|
|
@ -89,7 +89,7 @@ static FLOAT zsum_kernel_16(BLASLONG n, FLOAT *x) {
|
|||
"vfadb %%v24,%%v24,%%v25\n\t"
|
||||
"vsteg %%v24,%[sum],0"
|
||||
: [sum] "=Q"(sum),[n] "+&r"(n)
|
||||
: "m"(*(const struct { FLOAT x[n * 2]; } *) x),[x] "a"(x)
|
||||
: "m"(*(const FLOAT (*)[n * 2]) x),[x] "a"(x)
|
||||
: "cc", "r1", "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23",
|
||||
"v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31");
|
||||
|
||||
|
|
|
@ -99,8 +99,8 @@ static void zswap_kernel_16(BLASLONG n, FLOAT *x, FLOAT *y) {
|
|||
"vst %%v31, 240(%%r1,%[y])\n\t"
|
||||
"agfi %%r1,256\n\t"
|
||||
"brctg %[n],0b"
|
||||
: "+m"(*(struct { FLOAT x[n * 2]; } *) x),
|
||||
"+m"(*(struct { FLOAT x[n * 2]; } *) y),[n] "+&r"(n)
|
||||
: "+m"(*(FLOAT (*)[n * 2]) x),
|
||||
"+m"(*(FLOAT (*)[n * 2]) y),[n] "+&r"(n)
|
||||
: [x] "a"(x),[y] "a"(y)
|
||||
: "cc", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v16",
|
||||
"v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25", "v26",
|
||||
|
|
Loading…
Reference in New Issue