[ZARCH] Fix constraints and source code formatting

This commit is contained in:
maamountki 2019-02-11 16:01:13 +02:00 committed by GitHub
parent 7039770165
commit 77fe70019f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
67 changed files with 7439 additions and 7354 deletions

View File

@ -136,7 +136,7 @@ static FLOAT camax_kernel_32(BLASLONG n, FLOAT *x) {
"wfmaxsb %%v0,%%v0,%%v16,0\n\t" "wfmaxsb %%v0,%%v0,%%v16,0\n\t"
"ler %[amax],%%f0" "ler %[amax],%%f0"
: [amax] "=f"(amax),[n] "+&r"(n) : [amax] "=f"(amax),[n] "+&r"(n)
: "m"(*(const FLOAT (*)[n * 2]) x),[x] "a"(x) : "m"(*(const struct { FLOAT x[n * 2]; } *) x),[x] "a"(x)
: "cc", "r1", "v0", "v1", "v2", "v16", "v17", "v18", "v19", "v20", : "cc", "r1", "v0", "v1", "v2", "v16", "v17", "v18", "v19", "v20",
"v21", "v22", "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v21", "v22", "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30",
"v31"); "v31");

View File

@ -136,7 +136,7 @@ static FLOAT camin_kernel_32(BLASLONG n, FLOAT *x) {
"wfminsb %%v0,%%v0,%%v16,0\n\t" "wfminsb %%v0,%%v0,%%v16,0\n\t"
"ler %[amin],%%f0" "ler %[amin],%%f0"
: [amin] "=f"(amin),[n] "+&r"(n) : [amin] "=f"(amin),[n] "+&r"(n)
: "m"(*(const FLOAT (*)[n * 2]) x),[x] "a"(x) : "m"(*(const struct { FLOAT x[n * 2]; } *) x),[x] "a"(x)
: "cc", "r1", "v0", "v1", "v2", "v16", "v17", "v18", "v19", "v20", : "cc", "r1", "v0", "v1", "v2", "v16", "v17", "v18", "v19", "v20",
"v21", "v22", "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v21", "v22", "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30",
"v31"); "v31");

View File

@ -107,8 +107,8 @@ static FLOAT casum_kernel_32(BLASLONG n, FLOAT *x) {
"vrepf %%v25,%%v24,2\n\t" "vrepf %%v25,%%v24,2\n\t"
"vfasb %%v24,%%v24,%%v25\n\t" "vfasb %%v24,%%v24,%%v25\n\t"
"vstef %%v24,%[asum],0" "vstef %%v24,%[asum],0"
: [asum] "=m"(asum),[n] "+&r"(n) : [asum] "=Q"(asum),[n] "+&r"(n)
: "m"(*(const FLOAT (*)[n * 2]) x),[x] "a"(x) : "m"(*(const struct { FLOAT x[n * 2]; } *) x),[x] "a"(x)
: "cc", "r1", "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", : "cc", "r1", "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23",
"v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31"); "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31");

View File

@ -91,9 +91,9 @@ static void caxpy_kernel_16(BLASLONG n, FLOAT *x, FLOAT *y, FLOAT *alpha) {
"vst %%v19,112(%%r1,%[y])\n\t" "vst %%v19,112(%%r1,%[y])\n\t"
"agfi %%r1,128\n\t" "agfi %%r1,128\n\t"
"brctg %[n],0b" "brctg %[n],0b"
: "+m"(*(FLOAT (*)[n * 2]) y),[n] "+&r"(n) : "+m"(*(struct { FLOAT x[n * 2]; } *) y),[n] "+&r"(n)
: [y] "a"(y), "m"(*(const FLOAT (*)[n * 2]) x),[x] "a"(x), : [y] "a"(y), "m"(*(const struct { FLOAT x[n * 2]; } *) x),[x] "a"(x),
"m"(*(const FLOAT (*)[2]) alpha),[alpha] "a"(alpha) "m"(*(const struct { FLOAT x[2]; } *) alpha),[alpha] "a"(alpha)
: "cc", "r1", "v0", "v1", "v8", "v9", "v10", "v11", "v12", "v13", : "cc", "r1", "v0", "v1", "v8", "v9", "v10", "v11", "v12", "v13",
"v14", "v15", "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", "v14", "v15", "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23",
"v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31"); "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31");

View File

@ -36,8 +36,9 @@ static void ccopy_kernel_32(BLASLONG n, FLOAT *x, FLOAT *y) {
"la %[x],256(%[x])\n\t" "la %[x],256(%[x])\n\t"
"la %[y],256(%[y])\n\t" "la %[y],256(%[y])\n\t"
"brctg %[n],0b" "brctg %[n],0b"
: "=m"(*(FLOAT (*)[n * 2]) y),[x] "+&a"(x),[y] "+&a"(y),[n] "+&r"(n) : "=m"(*(struct { FLOAT x[n * 2]; } *) y),[x] "+&a"(x),[y] "+&a"(y),
: "m"(*(const FLOAT (*)[n * 2]) x) [n] "+&r"(n)
: "m"(*(const struct { FLOAT x[n * 2]; } *) x)
: "cc"); : "cc");
} }

View File

@ -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 %%v24,4(%[d]),1\n\t"
"vstef %%v25,8(%[d]),1\n\t" "vstef %%v25,8(%[d]),1\n\t"
"vstef %%v25,12(%[d]),0" "vstef %%v25,12(%[d]),0"
: "=m"(*(FLOAT (*)[4]) d),[n] "+&r"(n) : "=m"(*(struct { FLOAT x[4]; } *) d),[n] "+&r"(n)
: [d] "a"(d), "m"(*(const FLOAT (*)[n * 2]) x),[x] "a"(x), : [d] "a"(d), "m"(*(const struct { FLOAT x[n * 2]; } *) x),[x] "a"(x),
"m"(*(const FLOAT (*)[n * 2]) y),[y] "a"(y) "m"(*(const struct { FLOAT x[n * 2]; } *) y),[y] "a"(y)
: "cc", "r1", "v0", "v1", "v2", "v3", "v16", "v17", "v18", "v19", "v20", : "cc", "r1", "v0", "v1", "v2", "v3", "v16", "v17", "v18", "v19", "v20",
"v21", "v22", "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v21", "v22", "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30",
"v31"); "v31");

View File

@ -30,6 +30,11 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#define NBMAX 2048 #define NBMAX 2048
static void cgemv_kernel_4x4(BLASLONG n, FLOAT **ap, FLOAT *x, FLOAT *y) { static void cgemv_kernel_4x4(BLASLONG n, FLOAT **ap, FLOAT *x, FLOAT *y) {
register FLOAT *ap0 = ap[0];
register FLOAT *ap1 = ap[1];
register FLOAT *ap2 = ap[2];
register FLOAT *ap3 = ap[3];
__asm__("vlrepg %%v16,0(%[x])\n\t" __asm__("vlrepg %%v16,0(%[x])\n\t"
"vlrepg %%v17,8(%[x])\n\t" "vlrepg %%v17,8(%[x])\n\t"
"vlrepg %%v18,16(%[x])\n\t" "vlrepg %%v18,16(%[x])\n\t"
@ -141,18 +146,21 @@ static void cgemv_kernel_4x4(BLASLONG n, FLOAT **ap, FLOAT *x, FLOAT *y) {
"vst %%v0,0(%%r1,%[y])\n\t" "vst %%v0,0(%%r1,%[y])\n\t"
"agfi %%r1,16\n\t" "agfi %%r1,16\n\t"
"brctg %[n],0b\n\t" "brctg %[n],0b\n\t"
: "+m"(*(FLOAT (*)[n * 2]) y),[n] "+&r"(n) : "+m"(*(struct { FLOAT x[n * 2]; } *) y),[n] "+&r"(n)
: [y] "a"(y), "m"(*(const FLOAT (*)[n * 2]) ap[0]),[ap0] "a"(ap[0]), : [y] "a"(y), "m"(*(const struct { FLOAT x[n * 2]; } *) ap0),[ap0] "a"(ap0),
"m"(*(const FLOAT (*)[n * 2]) ap[1]),[ap1] "a"(ap[1]), "m"(*(const struct { FLOAT x[n * 2]; } *) ap1),[ap1] "a"(ap1),
"m"(*(const FLOAT (*)[n * 2]) ap[2]),[ap2] "a"(ap[2]), "m"(*(const struct { FLOAT x[n * 2]; } *) ap2),[ap2] "a"(ap2),
"m"(*(const FLOAT (*)[n * 2]) ap[3]),[ap3] "a"(ap[3]), "m"(*(const struct { FLOAT x[n * 2]; } *) ap3),[ap3] "a"(ap3),
"m"(*(const FLOAT (*)[8]) x),[x] "a"(x) "m"(*(const struct { FLOAT x[8]; } *) x),[x] "a"(x)
: "cc", "r1", "v0", "v1", "v2", "v16", "v17", "v18", "v19", "v20", : "cc", "r1", "v0", "v1", "v2", "v16", "v17", "v18", "v19", "v20",
"v21", "v22", "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v21", "v22", "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30",
"v31"); "v31");
} }
static void cgemv_kernel_4x2(BLASLONG n, FLOAT **ap, FLOAT *x, FLOAT *y) { static void cgemv_kernel_4x2(BLASLONG n, FLOAT **ap, FLOAT *x, FLOAT *y) {
register FLOAT *ap0 = ap[0];
register FLOAT *ap1 = ap[1];
__asm__("vlrepg %%v16,0(%[x])\n\t" __asm__("vlrepg %%v16,0(%[x])\n\t"
"vlrepg %%v17,8(%[x])\n\t" "vlrepg %%v17,8(%[x])\n\t"
#if ( !defined(CONJ) && !defined(XCONJ) ) || ( defined(CONJ) && defined(XCONJ) ) #if ( !defined(CONJ) && !defined(XCONJ) ) || ( defined(CONJ) && defined(XCONJ) )
@ -230,10 +238,10 @@ static void cgemv_kernel_4x2(BLASLONG n, FLOAT **ap, FLOAT *x, FLOAT *y) {
"vst %%v0,0(%%r1,%[y])\n\t" "vst %%v0,0(%%r1,%[y])\n\t"
"agfi %%r1,16\n\t" "agfi %%r1,16\n\t"
"brctg %[n],0b\n\t" "brctg %[n],0b\n\t"
: "+m"(*(FLOAT (*)[n * 2]) y),[n] "+&r"(n) : "+m"(*(struct { FLOAT x[n * 2]; } *) y),[n] "+&r"(n)
: [y] "a"(y), "m"(*(const FLOAT (*)[n * 2]) ap[0]),[ap0] "a"(ap[0]), : [y] "a"(y), "m"(*(const struct { FLOAT x[n * 2]; } *) ap0),[ap0] "a"(ap0),
"m"(*(const FLOAT (*)[n * 2]) ap[1]),[ap1] "a"(ap[1]), "m"(*(const struct { FLOAT x[n * 2]; } *) ap1),[ap1] "a"(ap1),
"m"(*(const FLOAT (*)[4]) x),[x] "a"(x) "m"(*(const struct { FLOAT x[4]; } *) x),[x] "a"(x)
: "cc", "r1", "v0", "v1", "v2", "v16", "v17", "v18", "v19", "v20", : "cc", "r1", "v0", "v1", "v2", "v16", "v17", "v18", "v19", "v20",
"v21", "v22", "v23"); "v21", "v22", "v23");
} }
@ -299,9 +307,9 @@ static void cgemv_kernel_4x1(BLASLONG n, FLOAT *ap, FLOAT *x, FLOAT *y) {
"vst %%v0,0(%%r1,%[y])\n\t" "vst %%v0,0(%%r1,%[y])\n\t"
"agfi %%r1,16\n\t" "agfi %%r1,16\n\t"
"brctg %[n],0b\n\t" "brctg %[n],0b\n\t"
: "+m"(*(FLOAT (*)[n * 2]) y),[n] "+&r"(n) : "+m"(*(struct { FLOAT x[n * 2]; } *) y),[n] "+&r"(n)
: [y] "a"(y), "m"(*(const FLOAT (*)[n * 2]) ap),[ap] "a"(ap), : [y] "a"(y), "m"(*(const struct { FLOAT x[n * 2]; } *) ap),[ap] "a"(ap),
"m"(*(const FLOAT (*)[2]) x),[x] "a"(x) "m"(*(const struct { FLOAT x[2]; } *) x),[x] "a"(x)
: "cc", "r1", "v0", "v1", "v2", "v16", "v17", "v18", "v19"); : "cc", "r1", "v0", "v1", "v2", "v16", "v17", "v18", "v19");
} }
@ -342,9 +350,9 @@ static void add_y_4(BLASLONG n, FLOAT *src, FLOAT *dest, FLOAT alpha_r,
"vst %%v23,16(%%r1,%[dest])\n\t" "vst %%v23,16(%%r1,%[dest])\n\t"
"agfi %%r1,32\n\t" "agfi %%r1,32\n\t"
"brctg %[n],0b" "brctg %[n],0b"
: "+m"(*(FLOAT (*)[n * 2]) dest),[n] "+&r"(n) : "+m"(*(struct { FLOAT x[n * 2]; } *) dest),[n] "+&r"(n)
: [dest] "a"(dest), "m"(*(const FLOAT (*)[n * 2]) src),[src] "a"(src), : [dest] "a"(dest), "m"(*(const struct { FLOAT x[n * 2]; } *) src),
[alpha_r] "m"(alpha_r),[alpha_i] "m"(alpha_i) [src] "a"(src),[alpha_r] "m"(alpha_r),[alpha_i] "m"(alpha_i)
: "cc", "r1", "v0", "v1", "v16", "v17", "v18", "v19", "v20", "v21", : "cc", "r1", "v0", "v1", "v16", "v17", "v18", "v19", "v20", "v21",
"v22", "v23"); "v22", "v23");
} }

View File

@ -31,6 +31,11 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
static void cgemv_kernel_4x4(BLASLONG n, FLOAT **ap, FLOAT *x, FLOAT *y, static void cgemv_kernel_4x4(BLASLONG n, FLOAT **ap, FLOAT *x, FLOAT *y,
FLOAT *alpha) { FLOAT *alpha) {
register FLOAT *ap0 = ap[0];
register FLOAT *ap1 = ap[1];
register FLOAT *ap2 = ap[2];
register FLOAT *ap3 = ap[3];
__asm__("vzero %%v16\n\t" __asm__("vzero %%v16\n\t"
"vzero %%v17\n\t" "vzero %%v17\n\t"
"vzero %%v18\n\t" "vzero %%v18\n\t"
@ -154,13 +159,13 @@ static void cgemv_kernel_4x4(BLASLONG n, FLOAT **ap, FLOAT *x, FLOAT *y,
"vfmasb %%v23,%%v19,%%v21,%%v23\n\t" "vfmasb %%v23,%%v19,%%v21,%%v23\n\t"
"vst %%v22,0(%[y])\n\t" "vst %%v22,0(%[y])\n\t"
"vst %%v23,16(%[y])" "vst %%v23,16(%[y])"
: "+m"(*(FLOAT (*)[8]) y),[n] "+&r"(n) : "+m"(*(struct { FLOAT x[8]; } *) y),[n] "+&r"(n)
: [y] "a"(y), "m"(*(const FLOAT (*)[n * 2]) ap[0]),[ap0] "a"(ap[0]), : [y] "a"(y), "m"(*(const struct { FLOAT x[n * 2]; } *) ap0),[ap0] "a"(ap0),
"m"(*(const FLOAT (*)[n * 2]) ap[1]),[ap1] "a"(ap[1]), "m"(*(const struct { FLOAT x[n * 2]; } *) ap1),[ap1] "a"(ap1),
"m"(*(const FLOAT (*)[n * 2]) ap[2]),[ap2] "a"(ap[2]), "m"(*(const struct { FLOAT x[n * 2]; } *) ap2),[ap2] "a"(ap2),
"m"(*(const FLOAT (*)[n * 2]) ap[3]),[ap3] "a"(ap[3]), "m"(*(const struct { FLOAT x[n * 2]; } *) ap3),[ap3] "a"(ap3),
"m"(*(const FLOAT (*)[n * 2]) x),[x] "a"(x), "m"(*(const struct { FLOAT x[n * 2]; } *) x),[x] "a"(x),
"m"(*(const FLOAT (*)[2]) alpha),[alpha] "a"(alpha) "m"(*(const struct { FLOAT x[2]; } *) alpha),[alpha] "a"(alpha)
: "cc", "r1", "v0", "v1", "v2", "v3", "v16", "v17", "v18", "v19", "v20", : "cc", "r1", "v0", "v1", "v2", "v3", "v16", "v17", "v18", "v19", "v20",
"v21", "v22", "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v21", "v22", "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30",
"v31"); "v31");
@ -168,6 +173,9 @@ static void cgemv_kernel_4x4(BLASLONG n, FLOAT **ap, FLOAT *x, FLOAT *y,
static void cgemv_kernel_4x2(BLASLONG n, FLOAT **ap, FLOAT *x, FLOAT *y, static void cgemv_kernel_4x2(BLASLONG n, FLOAT **ap, FLOAT *x, FLOAT *y,
FLOAT *alpha) { FLOAT *alpha) {
register FLOAT *ap0 = ap[0];
register FLOAT *ap1 = ap[1];
__asm__("vzero %%v16\n\t" __asm__("vzero %%v16\n\t"
"vzero %%v17\n\t" "vzero %%v17\n\t"
"vzero %%v18\n\t" "vzero %%v18\n\t"
@ -263,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,%%v16,%%v18,%%v20\n\t"
"vfmasb %%v20,%%v17,%%v19,%%v20\n\t" "vfmasb %%v20,%%v17,%%v19,%%v20\n\t"
"vst %%v20,0(%[y])" "vst %%v20,0(%[y])"
: "+m"(*(FLOAT (*)[4]) y),[n] "+&r"(n) : "+m"(*(struct { FLOAT x[4]; } *) y),[n] "+&r"(n)
: [y] "a"(y), "m"(*(const FLOAT (*)[n * 2]) ap[0]),[ap0] "a"(ap[0]), : [y] "a"(y), "m"(*(const struct { FLOAT x[n * 2]; } *) ap0),[ap0] "a"(ap0),
"m"(*(const FLOAT (*)[n * 2]) ap[1]),[ap1] "a"(ap[1]), "m"(*(const struct { FLOAT x[n * 2]; } *) ap1),[ap1] "a"(ap1),
"m"(*(const FLOAT (*)[n * 2]) x),[x] "a"(x), "m"(*(const struct { FLOAT x[n * 2]; } *) x),[x] "a"(x),
"m"(*(const FLOAT (*)[2]) alpha),[alpha] "a"(alpha) "m"(*(const struct { FLOAT x[2]; } *) alpha),[alpha] "a"(alpha)
: "cc", "r1", "v0", "v1", "v2", "v3", "v16", "v17", "v18", "v19", "v20", : "cc", "r1", "v0", "v1", "v2", "v3", "v16", "v17", "v18", "v19", "v20",
"v21", "v22", "v23"); "v21", "v22", "v23");
} }
@ -353,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,%%v16,%%v18,%%v0\n\t"
"vfmasb %%v0,%%v17,%%v19,%%v0\n\t" "vfmasb %%v0,%%v17,%%v19,%%v0\n\t"
"vsteg %%v0,0(%[y]),0" "vsteg %%v0,0(%[y]),0"
: "+m"(*(FLOAT (*)[2]) y),[n] "+&r"(n) : "+m"(*(struct { FLOAT x[2]; } *) y),[n] "+&r"(n)
: [y] "a"(y), "m"(*(const FLOAT (*)[n * 2]) ap),[ap] "a"(ap), : [y] "a"(y), "m"(*(const struct { FLOAT x[n * 2]; } *) ap),[ap] "a"(ap),
"m"(*(const FLOAT (*)[n * 2]) x),[x] "a"(x), "m"(*(const struct { FLOAT x[n * 2]; } *) x),[x] "a"(x),
"m"(*(const FLOAT (*)[2]) alpha),[alpha] "a"(alpha) "m"(*(const struct { FLOAT x[2]; } *) alpha),[alpha] "a"(alpha)
: "cc", "r1", "v0", "v1", "v2", "v3", "v16", "v17", "v18", "v19"); : "cc", "r1", "v0", "v1", "v2", "v3", "v16", "v17", "v18", "v19");
} }

View File

@ -169,8 +169,9 @@ static void crot_kernel_32(BLASLONG n, FLOAT *x, FLOAT *y, FLOAT *c, FLOAT *s) {
"vst %%v23, 240(%%r1,%[y])\n\t" "vst %%v23, 240(%%r1,%[y])\n\t"
"agfi %%r1,256\n\t" "agfi %%r1,256\n\t"
"brctg %[n],0b" "brctg %[n],0b"
: "+m"(*(FLOAT (*)[n * 2]) x), "+m"(*(FLOAT (*)[n * 2]) y),[n] "+&r"(n) : "+m"(*(struct { FLOAT x[n * 2]; } *) x),
: [x] "a"(x),[y] "a"(y),[c] "m"(*c),[s] "m"(*s) "+m"(*(struct { FLOAT x[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", : "cc", "r1", "v0", "v1", "v16", "v17", "v18", "v19", "v20", "v21",
"v22", "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v22", "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30",
"v31"); "v31");

View File

@ -80,8 +80,9 @@ static void cscal_kernel_16(BLASLONG n, FLOAT *alpha, FLOAT *x) {
"vst %%v23,112(%%r1,%[x])\n\t" "vst %%v23,112(%%r1,%[x])\n\t"
"agfi %%r1,128\n\t" "agfi %%r1,128\n\t"
"brctg %[n],0b" "brctg %[n],0b"
: "+m"(*(FLOAT (*)[n * 2]) x),[n] "+&r"(n) : "+m"(*(struct { FLOAT x[n * 2]; } *) x),[n] "+&r"(n)
: [x] "a"(x), "m"(*(const FLOAT (*)[2]) alpha),[alpha] "a"(alpha) : [x] "a"(x), "m"(*(const struct { FLOAT x[2]; } *) alpha),
[alpha] "a"(alpha)
: "cc", "r1", "v0", "v1", "v16", "v17", "v18", "v19", "v20", "v21", : "cc", "r1", "v0", "v1", "v16", "v17", "v18", "v19", "v20", "v21",
"v22", "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v22", "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30",
"v31"); "v31");
@ -131,8 +132,9 @@ static void cscal_kernel_16_zero_r(BLASLONG n, FLOAT *alpha, FLOAT *x) {
"vst %%v23,112(%%r1,%[x])\n\t" "vst %%v23,112(%%r1,%[x])\n\t"
"agfi %%r1,128\n\t" "agfi %%r1,128\n\t"
"brctg %[n],0b" "brctg %[n],0b"
: "+m"(*(FLOAT (*)[n * 2]) x),[n] "+&r"(n) : "+m"(*(struct { FLOAT x[n * 2]; } *) x),[n] "+&r"(n)
: [x] "a"(x), "m"(*(const FLOAT (*)[2]) alpha),[alpha] "a"(alpha) : [x] "a"(x), "m"(*(const struct { FLOAT x[2]; } *) alpha),
[alpha] "a"(alpha)
: "cc", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21", "v22", : "cc", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21", "v22",
"v23"); "v23");
} }
@ -169,8 +171,9 @@ static void cscal_kernel_16_zero_i(BLASLONG n, FLOAT *alpha, FLOAT *x) {
"vst %%v23,112(%%r1,%[x])\n\t" "vst %%v23,112(%%r1,%[x])\n\t"
"agfi %%r1,128\n\t" "agfi %%r1,128\n\t"
"brctg %[n],0b" "brctg %[n],0b"
: "+m"(*(FLOAT (*)[n * 2]) x),[n] "+&r"(n) : "+m"(*(struct { FLOAT x[n * 2]; } *) x),[n] "+&r"(n)
: [x] "a"(x), "m"(*(const FLOAT (*)[2]) alpha),[alpha] "a"(alpha) : [x] "a"(x), "m"(*(const struct { FLOAT x[2]; } *) alpha),
[alpha] "a"(alpha)
: "cc", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21", "v22", : "cc", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21", "v22",
"v23"); "v23");
} }
@ -191,7 +194,7 @@ static void cscal_kernel_16_zero(BLASLONG n, FLOAT *x) {
"vst %%v0,112(%%r1,%[x])\n\t" "vst %%v0,112(%%r1,%[x])\n\t"
"agfi %%r1,128\n\t" "agfi %%r1,128\n\t"
"brctg %[n],0b" "brctg %[n],0b"
: "=m"(*(FLOAT (*)[n * 2]) x),[n] "+&r"(n) : "=m"(*(struct { FLOAT x[n * 2]; } *) x),[n] "+&r"(n)
: [x] "a"(x) : [x] "a"(x)
: "cc", "r1", "v0"); : "cc", "r1", "v0");
} }

View File

@ -99,7 +99,8 @@ static void cswap_kernel_32(BLASLONG n, FLOAT *x, FLOAT *y) {
"vst %%v31, 240(%%r1,%[y])\n\t" "vst %%v31, 240(%%r1,%[y])\n\t"
"agfi %%r1,256\n\t" "agfi %%r1,256\n\t"
"brctg %[n],0b" "brctg %[n],0b"
: "+m"(*(FLOAT (*)[n * 2]) x), "+m"(*(FLOAT (*)[n * 2]) y),[n] "+&r"(n) : "+m"(*(struct { FLOAT x[n * 2]; } *) x),
"+m"(*(struct { FLOAT x[n * 2]; } *) y),[n] "+&r"(n)
: [x] "a"(x),[y] "a"(y) : [x] "a"(x),[y] "a"(y)
: "cc", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v16", : "cc", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v16",
"v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25", "v26", "v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25", "v26",

View File

@ -76,7 +76,7 @@ static FLOAT damax_kernel_32(BLASLONG n, FLOAT *x) {
"wfmaxdb %%v0,%%v0,%%v16,8\n\t" "wfmaxdb %%v0,%%v0,%%v16,8\n\t"
"lpdr %[amax],%%f0" "lpdr %[amax],%%f0"
: [amax] "=f"(amax),[n] "+&r"(n) : [amax] "=f"(amax),[n] "+&r"(n)
: "m"(*(const FLOAT (*)[n]) x),[x] "a"(x) : "m"(*(const struct { FLOAT x[n]; } *) x),[x] "a"(x)
: "cc", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21", "v22", : "cc", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21", "v22",
"v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31"); "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31");

View File

@ -110,7 +110,7 @@ static FLOAT damax_kernel_32(BLASLONG n, FLOAT *x) {
"vsel %%v0,%%v0,%%v16,%%v17\n\t" "vsel %%v0,%%v0,%%v16,%%v17\n\t"
"ldr %[amax],%%f0" "ldr %[amax],%%f0"
: [amax] "=f"(amax),[n] "+&r"(n) : [amax] "=f"(amax),[n] "+&r"(n)
: "m"(*(const FLOAT (*)[n]) x),[x] "a"(x) : "m"(*(const struct { FLOAT x[n]; } *) x),[x] "a"(x)
: "cc", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21", "v22", : "cc", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21", "v22",
"v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31"); "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31");

View File

@ -76,7 +76,7 @@ static FLOAT damin_kernel_32(BLASLONG n, FLOAT *x) {
"wfmindb %%v0,%%v0,%%v16,8\n\t" "wfmindb %%v0,%%v0,%%v16,8\n\t"
"lpdr %[amin],%%f0" "lpdr %[amin],%%f0"
: [amin] "=f"(amin),[n] "+&r"(n) : [amin] "=f"(amin),[n] "+&r"(n)
: "m"(*(const FLOAT (*)[n]) x),[x] "a"(x) : "m"(*(const struct { FLOAT x[n]; } *) x),[x] "a"(x)
: "cc", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21", "v22", : "cc", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21", "v22",
"v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31"); "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31");

View File

@ -110,7 +110,7 @@ static FLOAT damin_kernel_32(BLASLONG n, FLOAT *x) {
"vsel %%v0,%%v0,%%v16,%%v17\n\t" "vsel %%v0,%%v0,%%v16,%%v17\n\t"
"ldr %[amin],%%f0" "ldr %[amin],%%f0"
: [amin] "=f"(amin),[n] "+&r"(n) : [amin] "=f"(amin),[n] "+&r"(n)
: "m"(*(const FLOAT (*)[n]) x),[x] "a"(x) : "m"(*(const struct { FLOAT x[n]; } *) x),[x] "a"(x)
: "cc", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21", "v22", : "cc", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21", "v22",
"v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31"); "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31");

View File

@ -105,8 +105,8 @@ static FLOAT dasum_kernel_32(BLASLONG n, FLOAT *x) {
"vrepg %%v25,%%v24,1\n\t" "vrepg %%v25,%%v24,1\n\t"
"vfadb %%v24,%%v24,%%v25\n\t" "vfadb %%v24,%%v24,%%v25\n\t"
"vsteg %%v24,%[asum],0" "vsteg %%v24,%[asum],0"
: [asum] "=m"(asum),[n] "+&r"(n) : [asum] "=Q"(asum),[n] "+&r"(n)
: "m"(*(const FLOAT (*)[n]) x),[x] "a"(x) : "m"(*(const struct { FLOAT x[n]; } *) x),[x] "a"(x)
: "cc", "r1", "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", : "cc", "r1", "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23",
"v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31"); "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31");

View File

@ -100,9 +100,9 @@ static void daxpy_kernel_32(BLASLONG n, FLOAT *x, FLOAT *y, FLOAT *alpha) {
"vst %%v27,240(%%r1,%[y])\n\t" "vst %%v27,240(%%r1,%[y])\n\t"
"agfi %%r1,256\n\t" "agfi %%r1,256\n\t"
"brctg %[n],0b" "brctg %[n],0b"
: "+m"(*(FLOAT (*)[n]) y),[n] "+&r"(n) : "+m"(*(struct { FLOAT x[n]; } *) y),[n] "+&r"(n)
: [y] "a"(y), "m"(*(const FLOAT (*)[n]) x),[x] "a"(x), : [y] "a"(y), "m"(*(const struct { FLOAT x[n]; } *) x),[x] "a"(x),
[alpha] "m"(*alpha) [alpha] "Q"(*alpha)
: "cc", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21", "v22", : "cc", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21", "v22",
"v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31"); "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31");
} }

View File

@ -36,8 +36,8 @@ static void dcopy_kernel_32(BLASLONG n, FLOAT *x, FLOAT *y) {
"la %[x],256(%[x])\n\t" "la %[x],256(%[x])\n\t"
"la %[y],256(%[y])\n\t" "la %[y],256(%[y])\n\t"
"brctg %[n],0b" "brctg %[n],0b"
: "=m"(*(FLOAT (*)[n]) y),[x] "+&a"(x),[y] "+&a"(y),[n] "+&r"(n) : "=m"(*(struct { FLOAT x[n]; } *) y),[x] "+&a"(x),[y] "+&a"(y),[n] "+&r"(n)
: "m"(*(const FLOAT (*)[n]) x) : "m"(*(const struct { FLOAT x[n]; } *) x)
: "cc"); : "cc");
} }

View File

@ -80,8 +80,8 @@ static FLOAT ddot_kernel_16(BLASLONG n, FLOAT *x, FLOAT *y) {
"adbr %%f0,%%f1\n\t" "adbr %%f0,%%f1\n\t"
"ldr %[dot],%%f0" "ldr %[dot],%%f0"
: [dot] "=f"(dot),[n] "+&r"(n) : [dot] "=f"(dot),[n] "+&r"(n)
: "m"(*(const FLOAT (*)[n]) x),[x] "a"(x), "m"(*(const FLOAT (*)[n]) y), : "m"(*(const struct { FLOAT x[n]; } *) x),[x] "a"(x),
[y] "a"(y) "m"(*(const struct { FLOAT x[n]; } *) y),[y] "a"(y)
: "cc", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v16", : "cc", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v16",
"v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25", "v26", "v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25", "v26",
"v27", "v28", "v29", "v30", "v31"); "v27", "v28", "v29", "v30", "v31");

View File

@ -31,6 +31,11 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
static void dgemv_kernel_4x4(BLASLONG n, FLOAT **ap, FLOAT *x, FLOAT *y, static void dgemv_kernel_4x4(BLASLONG n, FLOAT **ap, FLOAT *x, FLOAT *y,
FLOAT *alpha) { FLOAT *alpha) {
register FLOAT *ap0 = ap[0];
register FLOAT *ap1 = ap[1];
register FLOAT *ap2 = ap[2];
register FLOAT *ap3 = ap[3];
__asm__("vlrepg %%v0,0(%[x])\n\t" __asm__("vlrepg %%v0,0(%[x])\n\t"
"vlrepg %%v1,8(%[x])\n\t" "vlrepg %%v1,8(%[x])\n\t"
"vlrepg %%v2,16(%[x])\n\t" "vlrepg %%v2,16(%[x])\n\t"
@ -165,12 +170,13 @@ static void dgemv_kernel_4x4(BLASLONG n, FLOAT **ap, FLOAT *x, FLOAT *y,
"brctg %%r0,2b\n\t" "brctg %%r0,2b\n\t"
"3:\n\t" "3:\n\t"
"nop" "nop"
: "+m"(*(FLOAT (*)[n]) y) : "+m"(*(struct { FLOAT x[n]; } *) y)
: [y] "a"(y), "m"(*(const FLOAT (*)[n]) ap[0]),[ap0] "a"(ap[0]), : [y] "a"(y), "m"(*(const struct { FLOAT x[n]; } *) ap0),[ap0] "a"(ap0),
"m"(*(const FLOAT (*)[n]) ap[1]),[ap1] "a"(ap[1]), "m"(*(const struct { FLOAT x[n]; } *) ap1),[ap1] "a"(ap1),
"m"(*(const FLOAT (*)[n]) ap[2]),[ap2] "a"(ap[2]), "m"(*(const struct { FLOAT x[n]; } *) ap2),[ap2] "a"(ap2),
"m"(*(const FLOAT (*)[n]) ap[3]),[ap3] "a"(ap[3]), "m"(*(const struct { FLOAT x[n]; } *) ap3),[ap3] "a"(ap3),
"m"(*(const FLOAT (*)[4]) x),[x] "a"(x),[alpha] "m"(*alpha),[n] "r"(n) "m"(*(const struct { FLOAT x[4]; } *) x),[x] "a"(x),[alpha] "Q"(*alpha),
[n] "r"(n)
: "cc", "r0", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", : "cc", "r0", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7",
"v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25", "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25",
"v26", "v27", "v28", "v29", "v30", "v31"); "v26", "v27", "v28", "v29", "v30", "v31");
@ -178,6 +184,9 @@ static void dgemv_kernel_4x4(BLASLONG n, FLOAT **ap, FLOAT *x, FLOAT *y,
static void dgemv_kernel_4x2(BLASLONG n, FLOAT **ap, FLOAT *x, FLOAT *y, static void dgemv_kernel_4x2(BLASLONG n, FLOAT **ap, FLOAT *x, FLOAT *y,
FLOAT *alpha) { FLOAT *alpha) {
register FLOAT *ap0 = ap[0];
register FLOAT *ap1 = ap[1];
__asm__("vlrepg %%v0,0(%[x])\n\t" __asm__("vlrepg %%v0,0(%[x])\n\t"
"vlrepg %%v1,8(%[x])\n\t" "vlrepg %%v1,8(%[x])\n\t"
"vlrepg %%v2,%[alpha]\n\t" "vlrepg %%v2,%[alpha]\n\t"
@ -266,10 +275,11 @@ static void dgemv_kernel_4x2(BLASLONG n, FLOAT **ap, FLOAT *x, FLOAT *y,
"brctg %%r0,2b\n\t" "brctg %%r0,2b\n\t"
"3:\n\t" "3:\n\t"
"nop" "nop"
: "+m"(*(FLOAT (*)[n]) y) : "+m"(*(struct { FLOAT x[n]; } *) y)
: [y] "a"(y), "m"(*(const FLOAT (*)[n]) ap[0]),[ap0] "a"(ap[0]), : [y] "a"(y), "m"(*(const struct { FLOAT x[n]; } *) ap0),[ap0] "a"(ap0),
"m"(*(const FLOAT (*)[n]) ap[1]),[ap1] "a"(ap[1]), "m"(*(const struct { FLOAT x[n]; } *) ap1),[ap1] "a"(ap1),
"m"(*(const FLOAT (*)[2]) x),[x] "a"(x),[alpha] "m"(*alpha),[n] "r"(n) "m"(*(const struct { FLOAT x[2]; } *) x),[x] "a"(x),[alpha] "Q"(*alpha),
[n] "r"(n)
: "cc", "r0", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", : "cc", "r0", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7",
"v8", "v9", "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", "v8", "v9", "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23",
"v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31"); "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31");
@ -342,9 +352,9 @@ static void dgemv_kernel_4x1(BLASLONG n, FLOAT *a0, FLOAT *x, FLOAT *y,
"brctg %%r0,2b\n\t" "brctg %%r0,2b\n\t"
"3:\n\t" "3:\n\t"
"nop" "nop"
: "+m"(*(FLOAT (*)[n]) y) : "+m"(*(struct { FLOAT x[n]; } *) y)
: [y] "a"(y), "m"(*(const FLOAT (*)[n]) a0),[a0] "a"(a0), : [y] "a"(y), "m"(*(const struct { FLOAT x[n]; } *) a0),[a0] "a"(a0),
"m"(*(const FLOAT (*)[1]) x),[x] "a"(x),[alpha] "m"(*alpha), "m"(*(const FLOAT (*)[1]) x),[x] "a"(x),[alpha] "Q"(*alpha),
[n] "r"(n) [n] "r"(n)
: "cc", "r0", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21", : "cc", "r0", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21",
"v22", "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v22", "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30",

View File

@ -30,6 +30,11 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#define NBMAX 2048 #define NBMAX 2048
static void dgemv_kernel_4x4(BLASLONG n, FLOAT **ap, FLOAT *x, FLOAT *y) { static void dgemv_kernel_4x4(BLASLONG n, FLOAT **ap, FLOAT *x, FLOAT *y) {
register FLOAT *ap0 = ap[0];
register FLOAT *ap1 = ap[1];
register FLOAT *ap2 = ap[2];
register FLOAT *ap3 = ap[3];
__asm__("vzero %%v0\n\t" __asm__("vzero %%v0\n\t"
"vzero %%v1\n\t" "vzero %%v1\n\t"
"vzero %%v2\n\t" "vzero %%v2\n\t"
@ -168,18 +173,21 @@ static void dgemv_kernel_4x4(BLASLONG n, FLOAT **ap, FLOAT *x, FLOAT *y) {
"vrepg %%v4,%%v3,1\n\t" "vrepg %%v4,%%v3,1\n\t"
"adbr %%f3,%%f4\n\t" "adbr %%f3,%%f4\n\t"
"std %%f3,24(%[y])" "std %%f3,24(%[y])"
: "=m"(*(FLOAT (*)[4]) y) : "=m"(*(struct { FLOAT x[4]; } *) y)
: [y] "a"(y), "m"(*(const FLOAT (*)[n]) ap[0]),[ap0] "a"(ap[0]), : [y] "a"(y), "m"(*(const struct { FLOAT x[n]; } *) ap0),[ap0] "a"(ap0),
"m"(*(const FLOAT (*)[n]) ap[1]),[ap1] "a"(ap[1]), "m"(*(const struct { FLOAT x[n]; } *) ap1),[ap1] "a"(ap1),
"m"(*(const FLOAT (*)[n]) ap[2]),[ap2] "a"(ap[2]), "m"(*(const struct { FLOAT x[n]; } *) ap2),[ap2] "a"(ap2),
"m"(*(const FLOAT (*)[n]) ap[3]),[ap3] "a"(ap[3]), "m"(*(const struct { FLOAT x[n]; } *) ap3),[ap3] "a"(ap3),
"m"(*(const FLOAT (*)[n]) x),[x] "a"(x),[n] "r"(n) "m"(*(const struct { FLOAT x[n]; } *) x),[x] "a"(x),[n] "r"(n)
: "cc", "r0", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", : "cc", "r0", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7",
"v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25", "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25",
"v26", "v27", "v28", "v29", "v30", "v31"); "v26", "v27", "v28", "v29", "v30", "v31");
} }
static void dgemv_kernel_4x2(BLASLONG n, FLOAT **ap, FLOAT *x, FLOAT *y) { static void dgemv_kernel_4x2(BLASLONG n, FLOAT **ap, FLOAT *x, FLOAT *y) {
register FLOAT *ap0 = ap[0];
register FLOAT *ap1 = ap[1];
__asm__("vzero %%v0\n\t" __asm__("vzero %%v0\n\t"
"vzero %%v1\n\t" "vzero %%v1\n\t"
"vzero %%v2\n\t" "vzero %%v2\n\t"
@ -272,10 +280,10 @@ static void dgemv_kernel_4x2(BLASLONG n, FLOAT **ap, FLOAT *x, FLOAT *y) {
"vrepg %%v2,%%v1,1\n\t" "vrepg %%v2,%%v1,1\n\t"
"adbr %%f1,%%f2\n\t" "adbr %%f1,%%f2\n\t"
"std %%f1,8(%[y])" "std %%f1,8(%[y])"
: "=m"(*(FLOAT (*)[2]) y) : "=m"(*(struct { FLOAT x[2]; } *) y)
: [y] "a"(y), "m"(*(const FLOAT (*)[n]) ap[0]),[ap0] "a"(ap[0]), : [y] "a"(y), "m"(*(const struct { FLOAT x[n]; } *) ap0),[ap0] "a"(ap0),
"m"(*(const FLOAT (*)[n]) ap[1]),[ap1] "a"(ap[1]), "m"(*(const struct { FLOAT x[n]; } *) ap1),[ap1] "a"(ap1),
"m"(*(const FLOAT (*)[n]) x),[x] "a"(x),[n] "r"(n) "m"(*(const struct { FLOAT x[n]; } *) x),[x] "a"(x),[n] "r"(n)
: "cc", "r0", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", : "cc", "r0", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7",
"v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25", "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25",
"v26", "v27", "v28", "v29", "v30", "v31"); "v26", "v27", "v28", "v29", "v30", "v31");
@ -352,8 +360,8 @@ static void dgemv_kernel_4x1(BLASLONG n, FLOAT *a0, FLOAT *x, FLOAT *y) {
"adbr %%f0,%%f1\n\t" "adbr %%f0,%%f1\n\t"
"std %%f0,0(%[y])" "std %%f0,0(%[y])"
: "=m"(*(FLOAT (*)[1]) y) : "=m"(*(FLOAT (*)[1]) y)
: [y] "a"(y), "m"(*(const FLOAT (*)[n]) a0),[a0] "a"(a0), : [y] "a"(y), "m"(*(const struct { FLOAT x[n]; } *) a0),[a0] "a"(a0),
"m"(*(const FLOAT (*)[n]) x),[x] "a"(x),[n] "r"(n) "m"(*(const struct { FLOAT x[n]; } *) x),[x] "a"(x),[n] "r"(n)
: "cc", "r0", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", : "cc", "r0", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7",
"v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25", "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25",
"v26", "v27", "v28", "v29", "v30", "v31"); "v26", "v27", "v28", "v29", "v30", "v31");
@ -431,8 +439,8 @@ static void add_y_kernel_4(BLASLONG n, FLOAT da, FLOAT *src, FLOAT *dest) {
"brctg %%r0,2b\n\t" "brctg %%r0,2b\n\t"
"3:\n\t" "3:\n\t"
"nop" "nop"
: "+m"(*(FLOAT (*)[n]) dest) : "+m"(*(struct { FLOAT x[n]; } *) dest)
: [dest] "a"(dest),[da] "m"(da), "m"(*(const FLOAT (*)[n]) src), : [dest] "a"(dest),[da] "Q"(da), "m"(*(const struct { FLOAT x[n]; } *) src),
[src] "a"(src),[n] "r"(n) [src] "a"(src),[n] "r"(n)
: "cc", "r0", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21", : "cc", "r0", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21",
"v22", "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v22", "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30",

View File

@ -73,7 +73,7 @@ static FLOAT dmax_kernel_32(BLASLONG n, FLOAT *x) {
"wfmaxdb %%v0,%%v0,%%v16,0\n\t" "wfmaxdb %%v0,%%v0,%%v16,0\n\t"
"ldr %[max],%%f0" "ldr %[max],%%f0"
: [max] "=f"(max),[n] "+&r"(n) : [max] "=f"(max),[n] "+&r"(n)
: "m"(*(const FLOAT (*)[n]) x),[x] "a"(x) : "m"(*(const struct { FLOAT x[n]; } *) x),[x] "a"(x)
: "cc", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21", "v22", : "cc", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21", "v22",
"v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31"); "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31");

View File

@ -90,7 +90,7 @@ static FLOAT dmax_kernel_32(BLASLONG n, FLOAT *x) {
"vsel %%v0,%%v0,%%v16,%%v17\n\t" "vsel %%v0,%%v0,%%v16,%%v17\n\t"
"ldr %[max],%%f0" "ldr %[max],%%f0"
: [max] "=f"(max),[n] "+&r"(n) : [max] "=f"(max),[n] "+&r"(n)
: "m"(*(const FLOAT (*)[n]) x),[x] "a"(x) : "m"(*(const struct { FLOAT x[n]; } *) x),[x] "a"(x)
: "cc", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21", "v22", : "cc", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21", "v22",
"v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31"); "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31");

View File

@ -73,7 +73,7 @@ static FLOAT dmin_kernel_32(BLASLONG n, FLOAT *x) {
"wfmindb %%v0,%%v0,%%v16,0\n\t" "wfmindb %%v0,%%v0,%%v16,0\n\t"
"ldr %[min],%%f0" "ldr %[min],%%f0"
: [min] "=f"(min),[n] "+&r"(n) : [min] "=f"(min),[n] "+&r"(n)
: "m"(*(const FLOAT (*)[n]) x),[x] "a"(x) : "m"(*(const struct { FLOAT x[n]; } *) x),[x] "a"(x)
: "cc", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21", "v22", : "cc", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21", "v22",
"v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31"); "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31");

View File

@ -90,7 +90,7 @@ static FLOAT dmin_kernel_32(BLASLONG n, FLOAT *x) {
"vsel %%v0,%%v0,%%v16,%%v17\n\t" "vsel %%v0,%%v0,%%v16,%%v17\n\t"
"ldr %[min],%%f0" "ldr %[min],%%f0"
: [min] "=f"(min),[n] "+&r"(n) : [min] "=f"(min),[n] "+&r"(n)
: "m"(*(const FLOAT (*)[n]) x),[x] "a"(x) : "m"(*(const struct { FLOAT x[n]; } *) x),[x] "a"(x)
: "cc", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21", "v22", : "cc", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21", "v22",
"v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31"); "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31");

View File

@ -169,8 +169,9 @@ static void drot_kernel_32(BLASLONG n, FLOAT *x, FLOAT *y, FLOAT *c, FLOAT *s) {
"vst %%v23, 240(%%r1,%[y])\n\t" "vst %%v23, 240(%%r1,%[y])\n\t"
"agfi %%r1,256\n\t" "agfi %%r1,256\n\t"
"brctg %[n],0b" "brctg %[n],0b"
: "+m"(*(FLOAT (*)[n]) x), "+m"(*(FLOAT (*)[n]) y),[n] "+&r"(n) : "+m"(*(struct { FLOAT x[n]; } *) x), "+m"(*(struct { FLOAT x[n]; } *) y),
: [x] "a"(x),[y] "a"(y),[c] "m"(*c),[s] "m"(*s) [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", : "cc", "r1", "v0", "v1", "v16", "v17", "v18", "v19", "v20", "v21",
"v22", "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v22", "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30",
"v31"); "v31");

View File

@ -59,8 +59,8 @@ static void dscal_kernel_16(BLASLONG n, FLOAT da, FLOAT *x) {
"vst %%v31,112(%%r1,%[x])\n\t" "vst %%v31,112(%%r1,%[x])\n\t"
"agfi %%r1,128\n\t" "agfi %%r1,128\n\t"
"brctg %[n],0b" "brctg %[n],0b"
: "+m"(*(FLOAT (*)[n]) x),[n] "+&r"(n) : "+m"(*(struct { FLOAT x[n]; } *) x),[n] "+&r"(n)
: [x] "a"(x),[da] "m"(da) : [x] "a"(x),[da] "Q"(da)
: "cc", "r1", "v0", "v24", "v25", "v26", "v27", "v28", "v29", "v30", : "cc", "r1", "v0", "v24", "v25", "v26", "v27", "v28", "v29", "v30",
"v31"); "v31");
} }
@ -81,7 +81,7 @@ static void dscal_kernel_16_zero(BLASLONG n, FLOAT *x) {
"vst %%v0,112(%%r1,%[x])\n\t" "vst %%v0,112(%%r1,%[x])\n\t"
"agfi %%r1,128\n\t" "agfi %%r1,128\n\t"
"brctg %[n],0b" "brctg %[n],0b"
: "=m"(*(FLOAT (*)[n]) x),[n] "+&r"(n) : "=m"(*(struct { FLOAT x[n]; } *) x),[n] "+&r"(n)
: [x] "a"(x) : [x] "a"(x)
: "cc", "r1", "v0"); : "cc", "r1", "v0");
} }

View File

@ -112,7 +112,8 @@ static double dsdot_kernel_16(BLASLONG n, FLOAT *x, FLOAT *y) {
"adbr %%f0,%%f1\n\t" "adbr %%f0,%%f1\n\t"
"ldr %[dot],%%f0" "ldr %[dot],%%f0"
: [dot] "=f"(dot),[n] "+&r"(n) : [dot] "=f"(dot),[n] "+&r"(n)
: "m"(*(const FLOAT (*)[n]) x),[x] "a"(x), "m"(*(const FLOAT (*)[n]) y),[y] "a"(y) : "m"(*(const struct { FLOAT x[n]; } *) x),[x] "a"(x),
"m"(*(const struct { FLOAT x[n]; } *) y),[y] "a"(y)
: "cc", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v16", : "cc", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v16",
"v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25", "v26", "v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25", "v26",
"v27", "v28", "v29", "v30", "v31"); "v27", "v28", "v29", "v30", "v31");

View File

@ -99,7 +99,8 @@ static void dswap_kernel_32(BLASLONG n, FLOAT *x, FLOAT *y) {
"vst %%v31, 240(%%r1,%[y])\n\t" "vst %%v31, 240(%%r1,%[y])\n\t"
"agfi %%r1,256\n\t" "agfi %%r1,256\n\t"
"brctg %[n],0b" "brctg %[n],0b"
: "+m"(*(FLOAT (*)[n]) x), "+m"(*(FLOAT (*)[n]) y),[n] "+&r"(n) : "+m"(*(struct { FLOAT x[n]; } *) x), "+m"(*(struct { FLOAT x[n]; } *) y),
[n] "+&r"(n)
: [x] "a"(x),[y] "a"(y) : [x] "a"(x),[y] "a"(y)
: "cc", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v16", : "cc", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v16",
"v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25", "v26", "v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25", "v26",

View File

@ -214,8 +214,8 @@ static BLASLONG icamax_kernel_32(BLASLONG n, FLOAT *x, FLOAT *amax) {
"vlgvg %[iamax],%%v1,0\n\t" "vlgvg %[iamax],%%v1,0\n\t"
"2:\n\t" "2:\n\t"
"nop" "nop"
: [iamax] "=r"(iamax),[amax] "=m"(*amax),[n] "+&r"(n) : [iamax] "=r"(iamax),[amax] "=Q"(*amax),[n] "+&r"(n)
: "m"(*(const FLOAT (*)[n * 2]) x),[x] "a"(x) : "m"(*(const struct { FLOAT x[n * 2]; } *) x),[x] "a"(x)
: "cc", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v8", : "cc", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v8",
"v9", "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v9", "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24",
"v25", "v26", "v27", "v28", "v29", "v30", "v31"); "v25", "v26", "v27", "v28", "v29", "v30", "v31");

View File

@ -214,8 +214,8 @@ static BLASLONG icamin_kernel_32(BLASLONG n, FLOAT *x, FLOAT *amin) {
"vlgvg %[iamin],%%v1,0\n\t" "vlgvg %[iamin],%%v1,0\n\t"
"2:\n\t" "2:\n\t"
"nop" "nop"
: [iamin] "=r"(iamin),[amin] "=m"(*amin),[n] "+&r"(n) : [iamin] "=r"(iamin),[amin] "=Q"(*amin),[n] "+&r"(n)
: "m"(*(const FLOAT (*)[n * 2]) x),[x] "a"(x) : "m"(*(const struct { FLOAT x[n * 2]; } *) x),[x] "a"(x)
: "cc", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v8", : "cc", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v8",
"v9", "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v9", "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24",
"v25", "v26", "v27", "v28", "v29", "v30", "v31"); "v25", "v26", "v27", "v28", "v29", "v30", "v31");

View File

@ -161,8 +161,8 @@ static BLASLONG idamax_kernel_32(BLASLONG n, FLOAT *x, FLOAT *amax) {
"vlgvg %[iamax],%%v1,0\n\t" "vlgvg %[iamax],%%v1,0\n\t"
"2:\n\t" "2:\n\t"
"nop" "nop"
: [iamax] "=r"(iamax),[amax] "=m"(*amax),[n] "+&r"(n) : [iamax] "=r"(iamax),[amax] "=Q"(*amax),[n] "+&r"(n)
: "m"(*(const FLOAT (*)[n]) x),[x] "a"(x) : "m"(*(const struct { FLOAT x[n]; } *) x),[x] "a"(x)
: "cc", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v16", : "cc", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v16",
"v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25", "v26", "v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25", "v26",
"v27", "v28", "v29", "v30", "v31"); "v27", "v28", "v29", "v30", "v31");

View File

@ -161,8 +161,8 @@ static BLASLONG idamin_kernel_32(BLASLONG n, FLOAT *x, FLOAT *amin) {
"vlgvg %[iamin],%%v1,0\n\t" "vlgvg %[iamin],%%v1,0\n\t"
"2:\n\t" "2:\n\t"
"nop" "nop"
: [iamin] "=r"(iamin),[amin] "=m"(*amin),[n] "+&r"(n) : [iamin] "=r"(iamin),[amin] "=Q"(*amin),[n] "+&r"(n)
: "m"(*(const FLOAT (*)[n]) x),[x] "a"(x) : "m"(*(const struct { FLOAT x[n]; } *) x),[x] "a"(x)
: "cc", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v16", : "cc", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v16",
"v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25", "v26", "v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25", "v26",
"v27", "v28", "v29", "v30", "v31"); "v27", "v28", "v29", "v30", "v31");

View File

@ -141,8 +141,8 @@ static BLASLONG idmax_kernel_32(BLASLONG n, FLOAT *x, FLOAT *max) {
"vlgvg %[imax],%%v1,0\n\t" "vlgvg %[imax],%%v1,0\n\t"
"2:\n\t" "2:\n\t"
"nop" "nop"
: [imax] "=r"(imax),[max] "=m"(*max),[n] "+&r"(n) : [imax] "=r"(imax),[max] "=Q"(*max),[n] "+&r"(n)
: "m"(*(const FLOAT (*)[n]) x),[x] "a"(x) : "m"(*(const struct { FLOAT x[n]; } *) x),[x] "a"(x)
: "cc", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v16", : "cc", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v16",
"v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25", "v26", "v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25", "v26",
"v27", "v28", "v29", "v30", "v31"); "v27", "v28", "v29", "v30", "v31");

View File

@ -141,8 +141,8 @@ static BLASLONG idmin_kernel_32(BLASLONG n, FLOAT *x, FLOAT *min) {
"vlgvg %[imin],%%v1,0\n\t" "vlgvg %[imin],%%v1,0\n\t"
"2:\n\t" "2:\n\t"
"nop" "nop"
: [imin] "=r"(imin),[min] "=m"(*min),[n] "+&r"(n) : [imin] "=r"(imin),[min] "=Q"(*min),[n] "+&r"(n)
: "m"(*(const FLOAT (*)[n]) x),[x] "a"(x) : "m"(*(const struct { FLOAT x[n]; } *) x),[x] "a"(x)
: "cc", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v16", : "cc", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v16",
"v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25", "v26", "v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25", "v26",
"v27", "v28", "v29", "v30", "v31"); "v27", "v28", "v29", "v30", "v31");

View File

@ -205,8 +205,8 @@ static BLASLONG isamax_kernel_64(BLASLONG n, FLOAT *x, FLOAT *amax) {
"vlgvg %[iamax],%%v1,0\n\t" "vlgvg %[iamax],%%v1,0\n\t"
"2:\n\t" "2:\n\t"
"nop" "nop"
: [iamax] "=r"(iamax),[amax] "=m"(*amax),[n] "+&r"(n) : [iamax] "=r"(iamax),[amax] "=Q"(*amax),[n] "+&r"(n)
: "m"(*(const FLOAT (*)[n]) x),[x] "a"(x) : "m"(*(const struct { FLOAT x[n]; } *) x),[x] "a"(x)
: "cc", "r1", "v0", "v1", "v2", "v4", "v5", "v6", "v7", "v8", "v16", : "cc", "r1", "v0", "v1", "v2", "v4", "v5", "v6", "v7", "v8", "v16",
"v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25", "v26", "v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25", "v26",
"v27", "v28", "v29", "v30", "v31"); "v27", "v28", "v29", "v30", "v31");

View File

@ -205,8 +205,8 @@ static BLASLONG isamin_kernel_64(BLASLONG n, FLOAT *x, FLOAT *amin) {
"vlgvg %[iamin],%%v1,0\n\t" "vlgvg %[iamin],%%v1,0\n\t"
"2:\n\t" "2:\n\t"
"nop" "nop"
: [iamin] "=r"(iamin),[amin] "=m"(*amin),[n] "+&r"(n) : [iamin] "=r"(iamin),[amin] "=Q"(*amin),[n] "+&r"(n)
: "m"(*(const FLOAT (*)[n]) x),[x] "a"(x) : "m"(*(const struct { FLOAT x[n]; } *) x),[x] "a"(x)
: "cc", "r1", "v0", "v1", "v2", "v4", "v5", "v6", "v7", "v8", "v16", : "cc", "r1", "v0", "v1", "v2", "v4", "v5", "v6", "v7", "v8", "v16",
"v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25", "v26", "v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25", "v26",
"v27", "v28", "v29", "v30", "v31"); "v27", "v28", "v29", "v30", "v31");

View File

@ -185,8 +185,8 @@ static BLASLONG ismax_kernel_64(BLASLONG n, FLOAT *x, FLOAT *max) {
"vlgvg %[imax],%%v1,0\n\t" "vlgvg %[imax],%%v1,0\n\t"
"2:\n\t" "2:\n\t"
"nop" "nop"
: [imax] "=r"(imax),[max] "=m"(*max),[n] "+&r"(n) : [imax] "=r"(imax),[max] "=Q"(*max),[n] "+&r"(n)
: "m"(*(const FLOAT (*)[n]) x),[x] "a"(x) : "m"(*(const struct { FLOAT x[n]; } *) x),[x] "a"(x)
: "cc", "r1", "v0", "v1", "v2", "v4", "v5", "v6", "v7", "v8", "v16", : "cc", "r1", "v0", "v1", "v2", "v4", "v5", "v6", "v7", "v8", "v16",
"v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25", "v26", "v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25", "v26",
"v27", "v28", "v29", "v30", "v31"); "v27", "v28", "v29", "v30", "v31");

View File

@ -185,8 +185,8 @@ static BLASLONG ismin_kernel_64(BLASLONG n, FLOAT *x, FLOAT *min) {
"vlgvg %[imin],%%v1,0\n\t" "vlgvg %[imin],%%v1,0\n\t"
"2:\n\t" "2:\n\t"
"nop" "nop"
: [imin] "=r"(imin),[min] "=m"(*min),[n] "+&r"(n) : [imin] "=r"(imin),[min] "=Q"(*min),[n] "+&r"(n)
: "m"(*(const FLOAT (*)[n]) x),[x] "a"(x) : "m"(*(const struct { FLOAT x[n]; } *) x),[x] "a"(x)
: "cc", "r1", "v0", "v1", "v2", "v4", "v5", "v6", "v7", "v8", "v16", : "cc", "r1", "v0", "v1", "v2", "v4", "v5", "v6", "v7", "v8", "v16",
"v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25", "v26", "v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25", "v26",
"v27", "v28", "v29", "v30", "v31"); "v27", "v28", "v29", "v30", "v31");

View File

@ -158,8 +158,8 @@ static BLASLONG izamax_kernel_16(BLASLONG n, FLOAT *x, FLOAT *amax) {
"vlgvg %[iamax],%%v1,0\n\t" "vlgvg %[iamax],%%v1,0\n\t"
"2:\n\t" "2:\n\t"
"nop" "nop"
: [iamax] "=r"(iamax),[amax] "=m"(*amax),[n] "+&r"(n) : [iamax] "=r"(iamax),[amax] "=Q"(*amax),[n] "+&r"(n)
: "m"(*(const FLOAT (*)[n * 2]) x),[x] "a"(x) : "m"(*(const struct { FLOAT x[n * 2]; } *) x),[x] "a"(x)
: "cc", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v16", "v17", "v18", : "cc", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v16", "v17", "v18",
"v19", "v20", "v21", "v22", "v23", "v24", "v25", "v26", "v27"); "v19", "v20", "v21", "v22", "v23", "v24", "v25", "v26", "v27");

View File

@ -158,8 +158,8 @@ static BLASLONG izamin_kernel_16(BLASLONG n, FLOAT *x, FLOAT *amin) {
"vlgvg %[iamin],%%v1,0\n\t" "vlgvg %[iamin],%%v1,0\n\t"
"2:\n\t" "2:\n\t"
"nop" "nop"
: [iamin] "=r"(iamin),[amin] "=m"(*amin),[n] "+&r"(n) : [iamin] "=r"(iamin),[amin] "=Q"(*amin),[n] "+&r"(n)
: "m"(*(const FLOAT (*)[n * 2]) x),[x] "a"(x) : "m"(*(const struct { FLOAT x[n * 2]; } *) x),[x] "a"(x)
: "cc", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v16", "v17", "v18", : "cc", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v16", "v17", "v18",
"v19", "v20", "v21", "v22", "v23", "v24", "v25", "v26", "v27"); "v19", "v20", "v21", "v22", "v23", "v24", "v25", "v26", "v27");

View File

@ -78,7 +78,7 @@ static FLOAT samax_kernel_64(BLASLONG n, FLOAT *x) {
"wfmaxsb %%v0,%%v0,%%v16,8\n\t" "wfmaxsb %%v0,%%v0,%%v16,8\n\t"
"lper %[amax],%%f0" "lper %[amax],%%f0"
: [amax] "=f"(amax),[n] "+&r"(n) : [amax] "=f"(amax),[n] "+&r"(n)
: "m"(*(const FLOAT (*)[n]) x),[x] "a"(x) : "m"(*(const struct { FLOAT x[n]; } *) x),[x] "a"(x)
: "cc", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21", "v22", : "cc", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21", "v22",
"v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31"); "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31");

View File

@ -78,7 +78,7 @@ static FLOAT samin_kernel_64(BLASLONG n, FLOAT *x) {
"wfminsb %%v0,%%v0,%%v16,8\n\t" "wfminsb %%v0,%%v0,%%v16,8\n\t"
"lper %[amin],%%f0" "lper %[amin],%%f0"
: [amin] "=f"(amin),[n] "+&r"(n) : [amin] "=f"(amin),[n] "+&r"(n)
: "m"(*(const FLOAT (*)[n]) x),[x] "a"(x) : "m"(*(const struct { FLOAT x[n]; } *) x),[x] "a"(x)
: "cc", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21", "v22", : "cc", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21", "v22",
"v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31"); "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31");

View File

@ -107,8 +107,8 @@ static FLOAT sasum_kernel_64(BLASLONG n, FLOAT *x) {
"vrepf %%v25,%%v24,2\n\t" "vrepf %%v25,%%v24,2\n\t"
"vfasb %%v24,%%v24,%%v25\n\t" "vfasb %%v24,%%v24,%%v25\n\t"
"vstef %%v24,%[asum],0" "vstef %%v24,%[asum],0"
: [asum] "=m"(asum),[n] "+&r"(n) : [asum] "=Q"(asum),[n] "+&r"(n)
: "m"(*(const FLOAT (*)[n]) x),[x] "a"(x) : "m"(*(const struct { FLOAT x[n]; } *) x),[x] "a"(x)
: "cc", "r1", "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", : "cc", "r1", "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23",
"v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31"); "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31");

View File

@ -100,9 +100,9 @@ static void saxpy_kernel_64(BLASLONG n, FLOAT *x, FLOAT *y, FLOAT *alpha) {
"vst %%v27,240(%%r1,%[y])\n\t" "vst %%v27,240(%%r1,%[y])\n\t"
"agfi %%r1,256\n\t" "agfi %%r1,256\n\t"
"brctg %[n],0b" "brctg %[n],0b"
: "+m"(*(FLOAT (*)[n]) y),[n] "+&r"(n) : "+m"(*(struct { FLOAT x[n]; } *) y),[n] "+&r"(n)
: [y] "a"(y), "m"(*(const FLOAT (*)[n]) x),[x] "a"(x), : [y] "a"(y), "m"(*(const struct { FLOAT x[n]; } *) x),[x] "a"(x),
[alpha] "m"(*alpha) [alpha] "Q"(*alpha)
: "cc", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21", "v22", : "cc", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21", "v22",
"v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31"); "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31");
} }

View File

@ -36,8 +36,8 @@ static void scopy_kernel_64(BLASLONG n, FLOAT *x, FLOAT *y) {
"la %[x],256(%[x])\n\t" "la %[x],256(%[x])\n\t"
"la %[y],256(%[y])\n\t" "la %[y],256(%[y])\n\t"
"brctg %[n],0b" "brctg %[n],0b"
: "=m"(*(FLOAT (*)[n]) y),[x] "+&a"(x),[y] "+&a"(y),[n] "+&r"(n) : "=m"(*(struct { FLOAT x[n]; } *) y),[x] "+&a"(x),[y] "+&a"(y),[n] "+&r"(n)
: "m"(*(const FLOAT (*)[n]) x) : "m"(*(const struct { FLOAT x[n]; } *) x)
: "cc"); : "cc");
} }

View File

@ -84,8 +84,8 @@ static FLOAT sdot_kernel_32(BLASLONG n, FLOAT *x, FLOAT *y) {
"aebr %%f0,%%f3\n\t" "aebr %%f0,%%f3\n\t"
"ler %[dot],%%f0" "ler %[dot],%%f0"
: [dot] "=f"(dot),[n] "+&r"(n) : [dot] "=f"(dot),[n] "+&r"(n)
: "m"(*(const FLOAT (*)[n]) x),[x] "a"(x), "m"(*(const FLOAT (*)[n]) y), : "m"(*(const struct { FLOAT x[n]; } *) x),[x] "a"(x),
[y] "a"(y) "m"(*(const struct { FLOAT x[n]; } *) y),[y] "a"(y)
: "cc", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v16", : "cc", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v16",
"v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25", "v26", "v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25", "v26",
"v27", "v28", "v29", "v30", "v31"); "v27", "v28", "v29", "v30", "v31");

View File

@ -31,6 +31,11 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
static void sgemv_kernel_4x4(BLASLONG n, FLOAT **ap, FLOAT *x, FLOAT *y, static void sgemv_kernel_4x4(BLASLONG n, FLOAT **ap, FLOAT *x, FLOAT *y,
FLOAT *alpha) { FLOAT *alpha) {
register FLOAT *ap0 = ap[0];
register FLOAT *ap1 = ap[1];
register FLOAT *ap2 = ap[2];
register FLOAT *ap3 = ap[3];
__asm__("vlrepf %%v0,0(%[x])\n\t" __asm__("vlrepf %%v0,0(%[x])\n\t"
"vlrepf %%v1,4(%[x])\n\t" "vlrepf %%v1,4(%[x])\n\t"
"vlrepf %%v2,8(%[x])\n\t" "vlrepf %%v2,8(%[x])\n\t"
@ -155,12 +160,13 @@ static void sgemv_kernel_4x4(BLASLONG n, FLOAT **ap, FLOAT *x, FLOAT *y,
"brctg %%r0,2b\n\t" "brctg %%r0,2b\n\t"
"3:\n\t" "3:\n\t"
"nop" "nop"
: "+m"(*(FLOAT (*)[n]) y) : "+m"(*(struct { FLOAT x[n]; } *) y)
: [y] "a"(y), "m"(*(const FLOAT (*)[n]) ap[0]),[ap0] "a"(ap[0]), : [y] "a"(y), "m"(*(const struct { FLOAT x[n]; } *) ap0),[ap0] "a"(ap0),
"m"(*(const FLOAT (*)[n]) ap[1]),[ap1] "a"(ap[1]), "m"(*(const struct { FLOAT x[n]; } *) ap1),[ap1] "a"(ap1),
"m"(*(const FLOAT (*)[n]) ap[2]),[ap2] "a"(ap[2]), "m"(*(const struct { FLOAT x[n]; } *) ap2),[ap2] "a"(ap2),
"m"(*(const FLOAT (*)[n]) ap[3]),[ap3] "a"(ap[3]), "m"(*(const struct { FLOAT x[n]; } *) ap3),[ap3] "a"(ap3),
"m"(*(const FLOAT (*)[4]) x),[x] "a"(x),[alpha] "m"(*alpha),[n] "r"(n) "m"(*(const struct { FLOAT x[4]; } *) x),[x] "a"(x),[alpha] "Q"(*alpha),
[n] "r"(n)
: "cc", "r0", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", : "cc", "r0", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7",
"v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25", "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25",
"v26", "v27", "v28", "v29", "v30", "v31"); "v26", "v27", "v28", "v29", "v30", "v31");
@ -168,6 +174,9 @@ static void sgemv_kernel_4x4(BLASLONG n, FLOAT **ap, FLOAT *x, FLOAT *y,
static void sgemv_kernel_4x2(BLASLONG n, FLOAT **ap, FLOAT *x, FLOAT *y, static void sgemv_kernel_4x2(BLASLONG n, FLOAT **ap, FLOAT *x, FLOAT *y,
FLOAT *alpha) { FLOAT *alpha) {
register FLOAT *ap0 = ap[0];
register FLOAT *ap1 = ap[1];
__asm__("vlrepf %%v0,0(%[x])\n\t" __asm__("vlrepf %%v0,0(%[x])\n\t"
"vlrepf %%v1,4(%[x])\n\t" "vlrepf %%v1,4(%[x])\n\t"
"vlrepf %%v2,%[alpha]\n\t" "vlrepf %%v2,%[alpha]\n\t"
@ -250,10 +259,11 @@ static void sgemv_kernel_4x2(BLASLONG n, FLOAT **ap, FLOAT *x, FLOAT *y,
"brctg %%r0,2b\n\t" "brctg %%r0,2b\n\t"
"3:\n\t" "3:\n\t"
"nop" "nop"
: "+m"(*(FLOAT (*)[n]) y) : "+m"(*(struct { FLOAT x[n]; } *) y)
: [y] "a"(y), "m"(*(const FLOAT (*)[n]) ap[0]),[ap0] "a"(ap[0]), : [y] "a"(y), "m"(*(const struct { FLOAT x[n]; } *) ap0),[ap0] "a"(ap0),
"m"(*(const FLOAT (*)[n]) ap[1]),[ap1] "a"(ap[1]), "m"(*(const struct { FLOAT x[n]; } *) ap1),[ap1] "a"(ap1),
"m"(*(const FLOAT (*)[2]) x),[x] "a"(x),[alpha] "m"(*alpha),[n] "r"(n) "m"(*(const struct { FLOAT x[2]; } *) x),[x] "a"(x),[alpha] "Q"(*alpha),
[n] "r"(n)
: "cc", "r0", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", : "cc", "r0", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7",
"v8", "v9", "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", "v8", "v9", "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23",
"v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31"); "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31");
@ -322,9 +332,9 @@ static void sgemv_kernel_4x1(BLASLONG n, FLOAT *a0, FLOAT *x, FLOAT *y,
"brctg %%r0,2b\n\t" "brctg %%r0,2b\n\t"
"3:\n\t" "3:\n\t"
"nop" "nop"
: "+m"(*(FLOAT (*)[n]) y) : "+m"(*(struct { FLOAT x[n]; } *) y)
: [y] "a"(y), "m"(*(const FLOAT (*)[n]) a0),[a0] "a"(a0), : [y] "a"(y), "m"(*(const struct { FLOAT x[n]; } *) a0),[a0] "a"(a0),
"m"(*(const FLOAT (*)[1]) x),[x] "a"(x),[alpha] "m"(*alpha), "m"(*(const FLOAT (*)[1]) x),[x] "a"(x),[alpha] "Q"(*alpha),
[n] "r"(n) [n] "r"(n)
: "cc", "r0", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21", : "cc", "r0", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21",
"v22", "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v22", "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30",

View File

@ -30,6 +30,11 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#define NBMAX 2048 #define NBMAX 2048
static void sgemv_kernel_4x4(BLASLONG n, FLOAT **ap, FLOAT *x, FLOAT *y) { static void sgemv_kernel_4x4(BLASLONG n, FLOAT **ap, FLOAT *x, FLOAT *y) {
register FLOAT *ap0 = ap[0];
register FLOAT *ap1 = ap[1];
register FLOAT *ap2 = ap[2];
register FLOAT *ap3 = ap[3];
__asm__("vzero %%v0\n\t" __asm__("vzero %%v0\n\t"
"vzero %%v1\n\t" "vzero %%v1\n\t"
"vzero %%v2\n\t" "vzero %%v2\n\t"
@ -167,18 +172,21 @@ static void sgemv_kernel_4x4(BLASLONG n, FLOAT **ap, FLOAT *x, FLOAT *y) {
"vrepg %%v4,%%v3,1\n\t" "vrepg %%v4,%%v3,1\n\t"
"aebr %%f3,%%f4\n\t" "aebr %%f3,%%f4\n\t"
"ste %%f3,12(%[y])" "ste %%f3,12(%[y])"
: "=m"(*(FLOAT (*)[4]) y) : "=m"(*(struct { FLOAT x[4]; } *) y)
: [y] "a"(y), "m"(*(const FLOAT (*)[n]) ap[0]),[ap0] "a"(ap[0]), : [y] "a"(y), "m"(*(const struct { FLOAT x[n]; } *) ap0),[ap0] "a"(ap0),
"m"(*(const FLOAT (*)[n]) ap[1]),[ap1] "a"(ap[1]), "m"(*(const struct { FLOAT x[n]; } *) ap1),[ap1] "a"(ap1),
"m"(*(const FLOAT (*)[n]) ap[2]),[ap2] "a"(ap[2]), "m"(*(const struct { FLOAT x[n]; } *) ap2),[ap2] "a"(ap2),
"m"(*(const FLOAT (*)[n]) ap[3]),[ap3] "a"(ap[3]), "m"(*(const struct { FLOAT x[n]; } *) ap3),[ap3] "a"(ap3),
"m"(*(const FLOAT (*)[n]) x),[x] "a"(x),[n] "r"(n) "m"(*(const struct { FLOAT x[n]; } *) x),[x] "a"(x),[n] "r"(n)
: "cc", "r0", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", : "cc", "r0", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7",
"v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25", "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25",
"v26", "v27", "v28", "v29", "v30", "v31"); "v26", "v27", "v28", "v29", "v30", "v31");
} }
static void sgemv_kernel_4x2(BLASLONG n, FLOAT **ap, FLOAT *x, FLOAT *y) { static void sgemv_kernel_4x2(BLASLONG n, FLOAT **ap, FLOAT *x, FLOAT *y) {
register FLOAT *ap0 = ap[0];
register FLOAT *ap1 = ap[1];
__asm__("vzero %%v0\n\t" __asm__("vzero %%v0\n\t"
"vzero %%v1\n\t" "vzero %%v1\n\t"
"vzero %%v2\n\t" "vzero %%v2\n\t"
@ -270,10 +278,10 @@ static void sgemv_kernel_4x2(BLASLONG n, FLOAT **ap, FLOAT *x, FLOAT *y) {
"vrepg %%v2,%%v1,1\n\t" "vrepg %%v2,%%v1,1\n\t"
"aebr %%f1,%%f2\n\t" "aebr %%f1,%%f2\n\t"
"ste %%f1,4(%[y])" "ste %%f1,4(%[y])"
: "=m"(*(FLOAT (*)[2]) y) : "=m"(*(struct { FLOAT x[2]; } *) y)
: [y] "a"(y), "m"(*(const FLOAT (*)[n]) ap[0]),[ap0] "a"(ap[0]), : [y] "a"(y), "m"(*(const struct { FLOAT x[n]; } *) ap0),[ap0] "a"(ap0),
"m"(*(const FLOAT (*)[n]) ap[1]),[ap1] "a"(ap[1]), "m"(*(const struct { FLOAT x[n]; } *) ap1),[ap1] "a"(ap1),
"m"(*(const FLOAT (*)[n]) x),[x] "a"(x),[n] "r"(n) "m"(*(const struct { FLOAT x[n]; } *) x),[x] "a"(x),[n] "r"(n)
: "cc", "r0", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", : "cc", "r0", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7",
"v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25", "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25",
"v26", "v27", "v28", "v29", "v30", "v31"); "v26", "v27", "v28", "v29", "v30", "v31");
@ -349,8 +357,8 @@ static void sgemv_kernel_4x1(BLASLONG n, FLOAT *a0, FLOAT *x, FLOAT *y) {
"aebr %%f0,%%f1\n\t" "aebr %%f0,%%f1\n\t"
"ste %%f0,0(%[y])" "ste %%f0,0(%[y])"
: "=m"(*(FLOAT (*)[1]) y) : "=m"(*(FLOAT (*)[1]) y)
: [y] "a"(y), "m"(*(const FLOAT (*)[n]) a0),[a0] "a"(a0), : [y] "a"(y), "m"(*(const struct { FLOAT x[n]; } *) a0),[a0] "a"(a0),
"m"(*(const FLOAT (*)[n]) x),[x] "a"(x),[n] "r"(n) "m"(*(const struct { FLOAT x[n]; } *) x),[x] "a"(x),[n] "r"(n)
: "cc", "r0", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", : "cc", "r0", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7",
"v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25", "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25",
"v26", "v27", "v28", "v29", "v30", "v31"); "v26", "v27", "v28", "v29", "v30", "v31");
@ -424,8 +432,8 @@ static void add_y_kernel_4(BLASLONG n, FLOAT da, FLOAT *src, FLOAT *dest) {
"brctg %%r0,2b\n\t" "brctg %%r0,2b\n\t"
"3:\n\t" "3:\n\t"
"nop" "nop"
: "+m"(*(FLOAT (*)[n]) dest) : "+m"(*(struct { FLOAT x[n]; } *) dest)
: [dest] "a"(dest),[da] "m"(da), "m"(*(const FLOAT (*)[n]) src), : [dest] "a"(dest),[da] "Q"(da), "m"(*(const struct { FLOAT x[n]; } *) src),
[src] "a"(src),[n] "r"(n) [src] "a"(src),[n] "r"(n)
: "cc", "r0", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21", : "cc", "r0", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21",
"v22", "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v22", "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30",

View File

@ -75,7 +75,7 @@ static FLOAT smax_kernel_64(BLASLONG n, FLOAT *x) {
"wfmaxsb %%v0,%%v0,%%v16,0\n\t" "wfmaxsb %%v0,%%v0,%%v16,0\n\t"
"ler %[max],%%f0" "ler %[max],%%f0"
: [max] "=f"(max),[n] "+&r"(n) : [max] "=f"(max),[n] "+&r"(n)
: "m"(*(const FLOAT (*)[n]) x),[x] "a"(x) : "m"(*(const struct { FLOAT x[n]; } *) x),[x] "a"(x)
: "cc", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21", "v22", : "cc", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21", "v22",
"v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31"); "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31");

View File

@ -75,7 +75,7 @@ static FLOAT smin_kernel_64(BLASLONG n, FLOAT *x) {
"wfminsb %%v0,%%v0,%%v16,0\n\t" "wfminsb %%v0,%%v0,%%v16,0\n\t"
"ler %[min],%%f0" "ler %[min],%%f0"
: [min] "=f"(min),[n] "+&r"(n) : [min] "=f"(min),[n] "+&r"(n)
: "m"(*(const FLOAT (*)[n]) x),[x] "a"(x) : "m"(*(const struct { FLOAT x[n]; } *) x),[x] "a"(x)
: "cc", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21", "v22", : "cc", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21", "v22",
"v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31"); "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31");

View File

@ -169,8 +169,9 @@ static void srot_kernel_64(BLASLONG n, FLOAT *x, FLOAT *y, FLOAT *c, FLOAT *s) {
"vst %%v23, 240(%%r1,%[y])\n\t" "vst %%v23, 240(%%r1,%[y])\n\t"
"agfi %%r1,256\n\t" "agfi %%r1,256\n\t"
"brctg %[n],0b" "brctg %[n],0b"
: "+m"(*(FLOAT (*)[n]) x), "+m"(*(FLOAT (*)[n]) y),[n] "+&r"(n) : "+m"(*(struct { FLOAT x[n]; } *) x), "+m"(*(struct { FLOAT x[n]; } *) y),
: [x] "a"(x),[y] "a"(y),[c] "m"(*c),[s] "m"(*s) [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", : "cc", "r1", "v0", "v1", "v16", "v17", "v18", "v19", "v20", "v21",
"v22", "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v22", "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30",
"v31"); "v31");

View File

@ -59,8 +59,8 @@ static void sscal_kernel_32(BLASLONG n, FLOAT da, FLOAT *x) {
"vst %%v31,112(%%r1,%[x])\n\t" "vst %%v31,112(%%r1,%[x])\n\t"
"agfi %%r1,128\n\t" "agfi %%r1,128\n\t"
"brctg %[n],0b" "brctg %[n],0b"
: "+m"(*(FLOAT (*)[n]) x),[n] "+&r"(n) : "+m"(*(struct { FLOAT x[n]; } *) x),[n] "+&r"(n)
: [x] "a"(x),[da] "m"(da) : [x] "a"(x),[da] "Q"(da)
: "cc", "r1", "v0", "v24", "v25", "v26", "v27", "v28", "v29", "v30", : "cc", "r1", "v0", "v24", "v25", "v26", "v27", "v28", "v29", "v30",
"v31"); "v31");
} }
@ -81,7 +81,7 @@ static void sscal_kernel_32_zero(BLASLONG n, FLOAT *x) {
"vst %%v0,112(%%r1,%[x])\n\t" "vst %%v0,112(%%r1,%[x])\n\t"
"agfi %%r1,128\n\t" "agfi %%r1,128\n\t"
"brctg %[n],0b" "brctg %[n],0b"
: "=m"(*(FLOAT (*)[n]) x),[n] "+&r"(n) : "=m"(*(struct { FLOAT x[n]; } *) x),[n] "+&r"(n)
: [x] "a"(x) : [x] "a"(x)
: "cc", "r1", "v0"); : "cc", "r1", "v0");
} }

View File

@ -99,7 +99,8 @@ static void sswap_kernel_64(BLASLONG n, FLOAT *x, FLOAT *y) {
"vst %%v31, 240(%%r1,%[y])\n\t" "vst %%v31, 240(%%r1,%[y])\n\t"
"agfi %%r1,256\n\t" "agfi %%r1,256\n\t"
"brctg %[n],0b" "brctg %[n],0b"
: "+m"(*(FLOAT (*)[n]) x), "+m"(*(FLOAT (*)[n]) y),[n] "+&r"(n) : "+m"(*(struct { FLOAT x[n]; } *) x), "+m"(*(struct { FLOAT x[n]; } *) y),
[n] "+&r"(n)
: [x] "a"(x),[y] "a"(y) : [x] "a"(x),[y] "a"(y)
: "cc", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v16", : "cc", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v16",
"v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25", "v26", "v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25", "v26",

View File

@ -114,7 +114,7 @@ static FLOAT zamax_kernel_16(BLASLONG n, FLOAT *x) {
"wfmaxdb %%v0,%%v0,%%v16,0\n\t" "wfmaxdb %%v0,%%v0,%%v16,0\n\t"
"ldr %[amax],%%f0" "ldr %[amax],%%f0"
: [amax] "=f"(amax),[n] "+&r"(n) : [amax] "=f"(amax),[n] "+&r"(n)
: "m"(*(const FLOAT (*)[n * 2]) x),[x] "a"(x) : "m"(*(const struct { FLOAT x[n * 2]; } *) x),[x] "a"(x)
: "cc", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21", "v22", : "cc", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21", "v22",
"v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31"); "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31");

View File

@ -123,7 +123,7 @@ static FLOAT zamax_kernel_16(BLASLONG n, FLOAT *x) {
"vsel %%v0,%%v0,%%v16,%%v17\n\t" "vsel %%v0,%%v0,%%v16,%%v17\n\t"
"ldr %[amax],%%f0" "ldr %[amax],%%f0"
: [amax] "=f"(amax),[n] "+&r"(n) : [amax] "=f"(amax),[n] "+&r"(n)
: "m"(*(const FLOAT (*)[n]) x),[x] "a"(x) : "m"(*(const struct { FLOAT x[n * 2]; } *) x),[x] "a"(x)
: "cc", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21", "v22", : "cc", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21", "v22",
"v23", "v24", "v25", "v26", "v27"); "v23", "v24", "v25", "v26", "v27");

View File

@ -114,7 +114,7 @@ static FLOAT zamin_kernel_16(BLASLONG n, FLOAT *x) {
"wfmindb %%v0,%%v0,%%v16,0\n\t" "wfmindb %%v0,%%v0,%%v16,0\n\t"
"ldr %[amin],%%f0" "ldr %[amin],%%f0"
: [amin] "=f"(amin),[n] "+&r"(n) : [amin] "=f"(amin),[n] "+&r"(n)
: "m"(*(const FLOAT (*)[n * 2]) x),[x] "a"(x) : "m"(*(const struct { FLOAT x[n * 2]; } *) x),[x] "a"(x)
: "cc", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21", "v22", : "cc", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21", "v22",
"v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31"); "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31");

View File

@ -123,7 +123,7 @@ static FLOAT zamin_kernel_16(BLASLONG n, FLOAT *x) {
"vsel %%v0,%%v0,%%v16,%%v17\n\t" "vsel %%v0,%%v0,%%v16,%%v17\n\t"
"ldr %[amin],%%f0" "ldr %[amin],%%f0"
: [amin] "=f"(amin),[n] "+&r"(n) : [amin] "=f"(amin),[n] "+&r"(n)
: "m"(*(const FLOAT (*)[n]) x),[x] "a"(x) : "m"(*(const struct { FLOAT x[n * 2]; } *) x),[x] "a"(x)
: "cc", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21", "v22", : "cc", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21", "v22",
"v23", "v24", "v25", "v26", "v27"); "v23", "v24", "v25", "v26", "v27");

View File

@ -105,8 +105,8 @@ static FLOAT zasum_kernel_16(BLASLONG n, FLOAT *x) {
"vrepg %%v25,%%v24,1\n\t" "vrepg %%v25,%%v24,1\n\t"
"vfadb %%v24,%%v24,%%v25\n\t" "vfadb %%v24,%%v24,%%v25\n\t"
"vsteg %%v24,%[asum],0" "vsteg %%v24,%[asum],0"
: [asum] "=m"(asum),[n] "+&r"(n) : [asum] "=Q"(asum),[n] "+&r"(n)
: "m"(*(const FLOAT (*)[n * 2]) x),[x] "a"(x) : "m"(*(const struct { FLOAT x[n * 2]; } *) x),[x] "a"(x)
: "cc", "r1", "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", : "cc", "r1", "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23",
"v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31"); "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31");

View File

@ -95,9 +95,9 @@ static void zaxpy_kernel_8(BLASLONG n, FLOAT *x, FLOAT *y, FLOAT *alpha) {
"vst %%v19,112(%%r1,%[y])\n\t" "vst %%v19,112(%%r1,%[y])\n\t"
"agfi %%r1,128\n\t" "agfi %%r1,128\n\t"
"brctg %[n],0b" "brctg %[n],0b"
: "+m"(*(FLOAT (*)[n * 2]) y),[n] "+&r"(n) : "+m"(*(struct { FLOAT x[n * 2]; } *) y),[n] "+&r"(n)
: [y] "a"(y), "m"(*(const FLOAT (*)[n * 2]) x),[x] "a"(x), : [y] "a"(y), "m"(*(const struct { FLOAT x[n * 2]; } *) x),[x] "a"(x),
"m"(*(const FLOAT (*)[2]) alpha),[alpha] "a"(alpha) "m"(*(const struct { FLOAT x[2]; } *) alpha),[alpha] "a"(alpha)
: "cc", "r1", "v0", "v1", "v8", "v9", "v10", "v11", "v12", "v13", : "cc", "r1", "v0", "v1", "v8", "v9", "v10", "v11", "v12", "v13",
"v14", "v15", "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", "v14", "v15", "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23",
"v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31"); "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31");

View File

@ -36,8 +36,9 @@ static void zcopy_kernel_16(BLASLONG n, FLOAT *x, FLOAT *y) {
"la %[x],256(%[x])\n\t" "la %[x],256(%[x])\n\t"
"la %[y],256(%[y])\n\t" "la %[y],256(%[y])\n\t"
"brctg %[n],0b" "brctg %[n],0b"
: "=m"(*(FLOAT (*)[n * 2]) y),[x] "+&a"(x),[y] "+&a"(y),[n] "+&r"(n) : "=m"(*(struct { FLOAT x[n * 2]; } *) y),[x] "+&a"(x),[y] "+&a"(y),
: "m"(*(const FLOAT (*)[n * 2]) x) [n] "+&r"(n)
: "m"(*(const struct { FLOAT x[n * 2]; } *) x)
: "cc"); : "cc");
} }

View File

@ -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 %%v24,8(%[d]),1\n\t"
"vsteg %%v25,16(%[d]),1\n\t" "vsteg %%v25,16(%[d]),1\n\t"
"vsteg %%v25,24(%[d]),0" "vsteg %%v25,24(%[d]),0"
: "=m"(*(FLOAT (*)[4]) d),[n] "+&r"(n) : "=m"(*(struct { FLOAT x[4]; } *) d),[n] "+&r"(n)
: [d] "a"(d), "m"(*(const FLOAT (*)[n * 2]) x),[x] "a"(x), : [d] "a"(d), "m"(*(const struct { FLOAT x[n * 2]; } *) x),[x] "a"(x),
"m"(*(const FLOAT (*)[n * 2]) y),[y] "a"(y) "m"(*(const struct { FLOAT x[n * 2]; } *) y),[y] "a"(y)
: "cc", "r1", "v0", "v1", "v2", "v3", "v16", "v17", "v18", "v19", "v20", : "cc", "r1", "v0", "v1", "v2", "v3", "v16", "v17", "v18", "v19", "v20",
"v21", "v22", "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v21", "v22", "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30",
"v31"); "v31");

View File

@ -30,6 +30,11 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#define NBMAX 1024 #define NBMAX 1024
static void zgemv_kernel_4x4(BLASLONG n, FLOAT **ap, FLOAT *x, FLOAT *y) { static void zgemv_kernel_4x4(BLASLONG n, FLOAT **ap, FLOAT *x, FLOAT *y) {
register FLOAT *ap0 = ap[0];
register FLOAT *ap1 = ap[1];
register FLOAT *ap2 = ap[2];
register FLOAT *ap3 = ap[3];
__asm__("vl %%v16,0(%[x])\n\t" __asm__("vl %%v16,0(%[x])\n\t"
"vl %%v17,16(%[x])\n\t" "vl %%v17,16(%[x])\n\t"
"vl %%v18,32(%[x])\n\t" "vl %%v18,32(%[x])\n\t"
@ -107,18 +112,21 @@ static void zgemv_kernel_4x4(BLASLONG n, FLOAT **ap, FLOAT *x, FLOAT *y) {
"vst %%v1,16(%%r1,%[y])\n\t" "vst %%v1,16(%%r1,%[y])\n\t"
"agfi %%r1,32\n\t" "agfi %%r1,32\n\t"
"brctg %[n],0b" "brctg %[n],0b"
: "+m"(*(FLOAT (*)[n * 2]) y),[n] "+&r"(n) : "+m"(*(struct { FLOAT x[n * 2]; } *) y),[n] "+&r"(n)
: [y] "a"(y), "m"(*(const FLOAT (*)[n * 2]) ap[0]),[ap0] "a"(ap[0]), : [y] "a"(y), "m"(*(const struct { FLOAT x[n * 2]; } *) ap0),[ap0] "a"(ap0),
"m"(*(const FLOAT (*)[n * 2]) ap[1]),[ap1] "a"(ap[1]), "m"(*(const struct { FLOAT x[n * 2]; } *) ap1),[ap1] "a"(ap1),
"m"(*(const FLOAT (*)[n * 2]) ap[2]),[ap2] "a"(ap[2]), "m"(*(const struct { FLOAT x[n * 2]; } *) ap2),[ap2] "a"(ap2),
"m"(*(const FLOAT (*)[n * 2]) ap[3]),[ap3] "a"(ap[3]), "m"(*(const struct { FLOAT x[n * 2]; } *) ap3),[ap3] "a"(ap3),
"m"(*(const FLOAT (*)[8]) x),[x] "a"(x) "m"(*(const struct { FLOAT x[8]; } *) x),[x] "a"(x)
: "cc", "r1", "v0", "v1", "v16", "v17", "v18", "v19", "v20", "v21", : "cc", "r1", "v0", "v1", "v16", "v17", "v18", "v19", "v20", "v21",
"v22", "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v22", "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30",
"v31"); "v31");
} }
static void zgemv_kernel_4x2(BLASLONG n, FLOAT **ap, FLOAT *x, FLOAT *y) { static void zgemv_kernel_4x2(BLASLONG n, FLOAT **ap, FLOAT *x, FLOAT *y) {
register FLOAT *ap0 = ap[0];
register FLOAT *ap1 = ap[1];
__asm__("vl %%v16,0(%[x])\n\t" __asm__("vl %%v16,0(%[x])\n\t"
"vl %%v17,16(%[x])\n\t" "vl %%v17,16(%[x])\n\t"
#if ( !defined(CONJ) && !defined(XCONJ) ) || ( defined(CONJ) && defined(XCONJ) ) #if ( !defined(CONJ) && !defined(XCONJ) ) || ( defined(CONJ) && defined(XCONJ) )
@ -164,10 +172,10 @@ static void zgemv_kernel_4x2(BLASLONG n, FLOAT **ap, FLOAT *x, FLOAT *y) {
"vst %%v1,16(%%r1,%[y])\n\t" "vst %%v1,16(%%r1,%[y])\n\t"
"agfi %%r1,32\n\t" "agfi %%r1,32\n\t"
"brctg %[n],0b" "brctg %[n],0b"
: "+m"(*(FLOAT (*)[n * 2]) y),[n] "+&r"(n) : "+m"(*(struct { FLOAT x[n * 2]; } *) y),[n] "+&r"(n)
: [y] "a"(y), "m"(*(const FLOAT (*)[n * 2]) ap[0]),[ap0] "a"(ap[0]), : [y] "a"(y), "m"(*(const struct { FLOAT x[n * 2]; } *) ap0),[ap0] "a"(ap0),
"m"(*(const FLOAT (*)[n * 2]) ap[1]),[ap1] "a"(ap[1]), "m"(*(const struct { FLOAT x[n * 2]; } *) ap1),[ap1] "a"(ap1),
"m"(*(const FLOAT (*)[4]) x),[x] "a"(x) "m"(*(const struct { FLOAT x[4]; } *) x),[x] "a"(x)
: "cc", "r1", "v0", "v1", "v16", "v17", "v18", "v19", "v20", "v21", : "cc", "r1", "v0", "v1", "v16", "v17", "v18", "v19", "v20", "v21",
"v22", "v23", "v24", "v25", "v26", "v27"); "v22", "v23", "v24", "v25", "v26", "v27");
} }
@ -202,9 +210,9 @@ static void zgemv_kernel_4x1(BLASLONG n, FLOAT *ap, FLOAT *x, FLOAT *y) {
"vst %%v1,16(%%r1,%[y])\n\t" "vst %%v1,16(%%r1,%[y])\n\t"
"agfi %%r1,32\n\t" "agfi %%r1,32\n\t"
"brctg %[n],0b" "brctg %[n],0b"
: "+m"(*(FLOAT (*)[n * 2]) y),[n] "+&r"(n) : "+m"(*(struct { FLOAT x[n * 2]; } *) y),[n] "+&r"(n)
: [y] "a"(y), "m"(*(const FLOAT (*)[n * 2]) ap),[ap] "a"(ap), : [y] "a"(y), "m"(*(const struct { FLOAT x[n * 2]; } *) ap),[ap] "a"(ap),
"m"(*(const FLOAT (*)[2]) x),[x] "a"(x) "m"(*(const struct { FLOAT x[2]; } *) x),[x] "a"(x)
: "cc", "r1", "v0", "v1", "v16", "v17", "v18", "v19", "v20", "v21"); : "cc", "r1", "v0", "v1", "v16", "v17", "v18", "v19", "v20", "v21");
} }
@ -253,9 +261,9 @@ static void add_y_4(BLASLONG n, FLOAT *src, FLOAT *dest, FLOAT alpha_r,
"vst %%v31,48(%%r1,%[dest])\n\t" "vst %%v31,48(%%r1,%[dest])\n\t"
"agfi %%r1,64\n\t" "agfi %%r1,64\n\t"
"brctg %[n],0b" "brctg %[n],0b"
: "+m"(*(FLOAT (*)[n * 2]) dest),[n] "+&r"(n) : "+m"(*(struct { FLOAT x[n * 2]; } *) dest),[n] "+&r"(n)
: [dest] "a"(dest), "m"(*(const FLOAT (*)[n * 2]) src),[src] "a"(src), : [dest] "a"(dest), "m"(*(const struct { FLOAT x[n * 2]; } *) src),
[alpha_r] "m"(alpha_r),[alpha_i] "m"(alpha_i) [src] "a"(src),[alpha_r] "m"(alpha_r),[alpha_i] "m"(alpha_i)
: "cc", "r1", "v0", "v1", "v16", "v17", "v18", "v19", "v20", "v21", : "cc", "r1", "v0", "v1", "v16", "v17", "v18", "v19", "v20", "v21",
"v22", "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v22", "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30",
"v31"); "v31");

View File

@ -31,6 +31,11 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
static void zgemv_kernel_4x4(BLASLONG n, FLOAT **ap, FLOAT *x, FLOAT *y, static void zgemv_kernel_4x4(BLASLONG n, FLOAT **ap, FLOAT *x, FLOAT *y,
FLOAT *alpha) { FLOAT *alpha) {
register FLOAT *ap0 = ap[0];
register FLOAT *ap1 = ap[1];
register FLOAT *ap2 = ap[2];
register FLOAT *ap3 = ap[3];
__asm__("vzero %%v16\n\t" __asm__("vzero %%v16\n\t"
"vzero %%v17\n\t" "vzero %%v17\n\t"
"vzero %%v18\n\t" "vzero %%v18\n\t"
@ -136,13 +141,13 @@ static void zgemv_kernel_4x4(BLASLONG n, FLOAT **ap, FLOAT *x, FLOAT *y,
"vst %%v27,16(%[y])\n\t" "vst %%v27,16(%[y])\n\t"
"vst %%v28,32(%[y])\n\t" "vst %%v28,32(%[y])\n\t"
"vst %%v29,48(%[y])" "vst %%v29,48(%[y])"
: "+m"(*(FLOAT (*)[8]) y),[n] "+&r"(n) : "+m"(*(struct { FLOAT x[8]; } *) y),[n] "+&r"(n)
: [y] "a"(y), "m"(*(const FLOAT (*)[n * 2]) ap[0]),[ap0] "a"(ap[0]), : [y] "a"(y), "m"(*(const struct { FLOAT x[n * 2]; } *) ap0),[ap0] "a"(ap0),
"m"(*(const FLOAT (*)[n * 2]) ap[1]),[ap1] "a"(ap[1]), "m"(*(const struct { FLOAT x[n * 2]; } *) ap1),[ap1] "a"(ap1),
"m"(*(const FLOAT (*)[n * 2]) ap[2]),[ap2] "a"(ap[2]), "m"(*(const struct { FLOAT x[n * 2]; } *) ap2),[ap2] "a"(ap2),
"m"(*(const FLOAT (*)[n * 2]) ap[3]),[ap3] "a"(ap[3]), "m"(*(const struct { FLOAT x[n * 2]; } *) ap3),[ap3] "a"(ap3),
"m"(*(const FLOAT (*)[n * 2]) x),[x] "a"(x), "m"(*(const struct { FLOAT x[n * 2]; } *) x),[x] "a"(x),
"m"(*(const FLOAT (*)[2]) alpha),[alpha] "a"(alpha) "m"(*(const struct { FLOAT x[2]; } *) alpha),[alpha] "a"(alpha)
: "cc", "r1", "v0", "v1", "v16", "v17", "v18", "v19", "v20", "v21", : "cc", "r1", "v0", "v1", "v16", "v17", "v18", "v19", "v20", "v21",
"v22", "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v22", "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30",
"v31"); "v31");
@ -150,6 +155,9 @@ static void zgemv_kernel_4x4(BLASLONG n, FLOAT **ap, FLOAT *x, FLOAT *y,
static void zgemv_kernel_4x2(BLASLONG n, FLOAT **ap, FLOAT *x, FLOAT *y, static void zgemv_kernel_4x2(BLASLONG n, FLOAT **ap, FLOAT *x, FLOAT *y,
FLOAT *alpha) { FLOAT *alpha) {
register FLOAT *ap0 = ap[0];
register FLOAT *ap1 = ap[1];
__asm__("vzero %%v16\n\t" __asm__("vzero %%v16\n\t"
"vzero %%v17\n\t" "vzero %%v17\n\t"
"vzero %%v18\n\t" "vzero %%v18\n\t"
@ -221,11 +229,11 @@ static void zgemv_kernel_4x2(BLASLONG n, FLOAT **ap, FLOAT *x, FLOAT *y,
"vfmadb %%v23,%%v19,%%v21,%%v23\n\t" "vfmadb %%v23,%%v19,%%v21,%%v23\n\t"
"vst %%v22,0(%[y])\n\t" "vst %%v22,0(%[y])\n\t"
"vst %%v23,16(%[y])\n\t" "vst %%v23,16(%[y])\n\t"
: "+m"(*(FLOAT (*)[4]) y),[n] "+&r"(n) : "+m"(*(struct { FLOAT x[4]; } *) y),[n] "+&r"(n)
: [y] "a"(y), "m"(*(const FLOAT (*)[n * 2]) ap[0]),[ap0] "a"(ap[0]), : [y] "a"(y), "m"(*(const struct { FLOAT x[n * 2]; } *) ap0),[ap0] "a"(ap0),
"m"(*(const FLOAT (*)[n * 2]) ap[1]),[ap1] "a"(ap[1]), "m"(*(const struct { FLOAT x[n * 2]; } *) ap1),[ap1] "a"(ap1),
"m"(*(const FLOAT (*)[n * 2]) x),[x] "a"(x), "m"(*(const struct { FLOAT x[n * 2]; } *) x),[x] "a"(x),
"m"(*(const FLOAT (*)[2]) alpha),[alpha] "a"(alpha) "m"(*(const struct { FLOAT x[2]; } *) alpha),[alpha] "a"(alpha)
: "cc", "r1", "v0", "v1", "v16", "v17", "v18", "v19", "v20", "v21", : "cc", "r1", "v0", "v1", "v16", "v17", "v18", "v19", "v20", "v21",
"v22", "v23"); "v22", "v23");
} }
@ -286,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,%%v16,%%v18,%%v0\n\t"
"vfmadb %%v0,%%v17,%%v19,%%v0\n\t" "vfmadb %%v0,%%v17,%%v19,%%v0\n\t"
"vst %%v0,0(%[y])\n\t" "vst %%v0,0(%[y])\n\t"
: "+m"(*(FLOAT (*)[2]) y),[n] "+&r"(n) : "+m"(*(struct { FLOAT x[2]; } *) y),[n] "+&r"(n)
: [y] "a"(y), "m"(*(const FLOAT (*)[n * 2]) ap),[ap] "a"(ap), : [y] "a"(y), "m"(*(const struct { FLOAT x[n * 2]; } *) ap),[ap] "a"(ap),
"m"(*(const FLOAT (*)[n * 2]) x),[x] "a"(x), "m"(*(const struct { FLOAT x[n * 2]; } *) x),[x] "a"(x),
"m"(*(const FLOAT (*)[2]) alpha),[alpha] "a"(alpha) "m"(*(const struct { FLOAT x[2]; } *) alpha),[alpha] "a"(alpha)
: "cc", "r1", "v0", "v1", "v16", "v17", "v18", "v19"); : "cc", "r1", "v0", "v1", "v16", "v17", "v18", "v19");
} }

View File

@ -169,8 +169,9 @@ static void zrot_kernel_16(BLASLONG n, FLOAT *x, FLOAT *y, FLOAT *c, FLOAT *s) {
"vst %%v23, 240(%%r1,%[y])\n\t" "vst %%v23, 240(%%r1,%[y])\n\t"
"agfi %%r1,256\n\t" "agfi %%r1,256\n\t"
"brctg %[n],0b" "brctg %[n],0b"
: "+m"(*(FLOAT (*)[n * 2]) x), "+m"(*(FLOAT (*)[n * 2]) y),[n] "+&r"(n) : "+m"(*(struct { FLOAT x[n * 2]; } *) x),
: [x] "a"(x),[y] "a"(y),[c] "m"(*c),[s] "m"(*s) "+m"(*(struct { FLOAT x[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", : "cc", "r1", "v0", "v1", "v16", "v17", "v18", "v19", "v20", "v21",
"v22", "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v22", "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30",
"v31"); "v31");

View File

@ -78,8 +78,9 @@ static void zscal_kernel_8(BLASLONG n, FLOAT *alpha, FLOAT *x) {
"vst %%v23,112(%%r1,%[x])\n\t" "vst %%v23,112(%%r1,%[x])\n\t"
"agfi %%r1,128\n\t" "agfi %%r1,128\n\t"
"brctg %[n],0b" "brctg %[n],0b"
: "+m"(*(FLOAT (*)[n * 2]) x),[n] "+&r"(n) : "+m"(*(struct { FLOAT x[n * 2]; } *) x),[n] "+&r"(n)
: [x] "a"(x), "m"(*(const FLOAT (*)[2]) alpha),[alpha] "a"(alpha) : [x] "a"(x), "m"(*(const struct { FLOAT x[2]; } *) alpha),
[alpha] "a"(alpha)
: "cc", "r1", "v0", "v1", "v16", "v17", "v18", "v19", "v20", "v21", : "cc", "r1", "v0", "v1", "v16", "v17", "v18", "v19", "v20", "v21",
"v22", "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v22", "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30",
"v31"); "v31");
@ -127,8 +128,9 @@ static void zscal_kernel_8_zero_r(BLASLONG n, FLOAT *alpha, FLOAT *x) {
"vst %%v23,112(%%r1,%[x])\n\t" "vst %%v23,112(%%r1,%[x])\n\t"
"agfi %%r1,128\n\t" "agfi %%r1,128\n\t"
"brctg %[n],0b" "brctg %[n],0b"
: "+m"(*(FLOAT (*)[n * 2]) x),[n] "+&r"(n) : "+m"(*(struct { FLOAT x[n * 2]; } *) x),[n] "+&r"(n)
: [x] "a"(x), "m"(*(const FLOAT (*)[2]) alpha),[alpha] "a"(alpha) : [x] "a"(x), "m"(*(const struct { FLOAT x[2]; } *) alpha),
[alpha] "a"(alpha)
: "cc", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21", "v22", : "cc", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21", "v22",
"v23"); "v23");
} }
@ -165,8 +167,9 @@ static void zscal_kernel_8_zero_i(BLASLONG n, FLOAT *alpha, FLOAT *x) {
"vst %%v23,112(%%r1,%[x])\n\t" "vst %%v23,112(%%r1,%[x])\n\t"
"agfi %%r1,128\n\t" "agfi %%r1,128\n\t"
"brctg %[n],0b" "brctg %[n],0b"
: "+m"(*(FLOAT (*)[n * 2]) x),[n] "+&r"(n) : "+m"(*(struct { FLOAT x[n * 2]; } *) x),[n] "+&r"(n)
: [x] "a"(x), "m"(*(const FLOAT (*)[2]) alpha),[alpha] "a"(alpha) : [x] "a"(x), "m"(*(const struct { FLOAT x[2]; } *) alpha),
[alpha] "a"(alpha)
: "cc", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21", "v22", : "cc", "r1", "v0", "v16", "v17", "v18", "v19", "v20", "v21", "v22",
"v23"); "v23");
} }
@ -187,7 +190,7 @@ static void zscal_kernel_8_zero(BLASLONG n, FLOAT *x) {
"vst %%v0,112(%%r1,%[x])\n\t" "vst %%v0,112(%%r1,%[x])\n\t"
"agfi %%r1,128\n\t" "agfi %%r1,128\n\t"
"brctg %[n],0b" "brctg %[n],0b"
: "=m"(*(FLOAT (*)[n * 2]) x),[n] "+&r"(n) : "=m"(*(struct { FLOAT x[n * 2]; } *) x),[n] "+&r"(n)
: [x] "a"(x) : [x] "a"(x)
: "cc", "r1", "v0"); : "cc", "r1", "v0");
} }

View File

@ -99,7 +99,8 @@ static void zswap_kernel_16(BLASLONG n, FLOAT *x, FLOAT *y) {
"vst %%v31, 240(%%r1,%[y])\n\t" "vst %%v31, 240(%%r1,%[y])\n\t"
"agfi %%r1,256\n\t" "agfi %%r1,256\n\t"
"brctg %[n],0b" "brctg %[n],0b"
: "+m"(*(FLOAT (*)[n * 2]) x), "+m"(*(FLOAT (*)[n * 2]) y),[n] "+&r"(n) : "+m"(*(struct { FLOAT x[n * 2]; } *) x),
"+m"(*(struct { FLOAT x[n * 2]; } *) y),[n] "+&r"(n)
: [x] "a"(x),[y] "a"(y) : [x] "a"(x),[y] "a"(y)
: "cc", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v16", : "cc", "r1", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v16",
"v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25", "v26", "v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25", "v26",