From f946a894329ae48c1c719a1f812e2cf75ed22967 Mon Sep 17 00:00:00 2001 From: the mslm Date: Fri, 26 Jan 2018 18:20:36 -0800 Subject: [PATCH 1/2] zscal (case: real alpha=0 ) mikrokernel shift&mem fix , da_i as input reg. small typo fixes --- kernel/zarch/dswap.c | 4 ++-- kernel/zarch/zscal.c | 17 ++++++++--------- kernel/zarch/zswap.c | 4 ++-- 3 files changed, 12 insertions(+), 13 deletions(-) diff --git a/kernel/zarch/dswap.c b/kernel/zarch/dswap.c index 686585bf0..d7e079147 100644 --- a/kernel/zarch/dswap.c +++ b/kernel/zarch/dswap.c @@ -139,7 +139,7 @@ static void dswap_kernel_32(BLASLONG n, FLOAT *x, FLOAT *y) #else -static void __attribute__ ((noinline)) dswap_kernel_32(BLASLONG n, FLOAT *x, FLOAT *y) +static void dswap_kernel_32(BLASLONG n, FLOAT *x, FLOAT *y) { __asm__ volatile( "pfd 2, 0(%[ptr_x]) \n\t" @@ -227,7 +227,7 @@ static void __attribute__ ((noinline)) dswap_kernel_32(BLASLONG n, FLOAT *x, F [mem_y] "+m" (*(double (*)[n])y), [n_tmp] "+&r"(n) : [ptr_x] "a"(x), [ptr_y] "a"(y) - : "cc", "memory","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","v27","v28","v29","v30","v31" ); return; diff --git a/kernel/zarch/zscal.c b/kernel/zarch/zscal.c index 31f32d8a6..e9285e213 100644 --- a/kernel/zarch/zscal.c +++ b/kernel/zarch/zscal.c @@ -96,7 +96,7 @@ static void zscal_kernel_8(BLASLONG n, FLOAT da_r,FLOAT da_i, FLOAT *x) { "clgrjl %[x_ptr],%%r0,1b \n\t" : [mem] "+m" (*(double (*)[2*n])x) ,[x_ptr] "+&a"(x) : [n] "r"(n), [alpha_r] "f"(da_r),[alpha_i] "f"(da_i) - : "cc", "memory","r0","v16","v17","v18","v19","v20","v21","v22","v23","v24","v25" + : "cc", "r0","v16","v17","v18","v19","v20","v21","v22","v23","v24","v25" ); @@ -106,10 +106,9 @@ static void zscal_kernel_8_zero_r(BLASLONG n, FLOAT da_i, FLOAT *x) { __asm__ ( "pfd 2, 0(%1) \n\t" "lgdr %%r0,%[alpha] \n\t" - "vlvgg %%v16,%%r0,0 \n\t" - "lcdbr %[alpha],%[alpha] \n\t" - "lgdr %%r0,%[alpha] \n\t" - "vlvgg %%v16,%%r0,1 \n\t" + "vlvgp %%v16,%%r0,%%r0 \n\t" //load both from disjoint + "vflcdb %%v16,%%v16 \n\t" //complement both + "vlvgg %%v16,%%r0,0 \n\t" //restore 1st "vlr %%v17 ,%%v16 \n\t" "sllg %%r0,%[n],4 \n\t" "agr %%r0,%[x_ptr] \n\t" @@ -129,8 +128,8 @@ static void zscal_kernel_8_zero_r(BLASLONG n, FLOAT da_i, FLOAT *x) { "vsteg %%v26, 40(%[x_ptr]),0 \n\t" "vl %%v27, 48(%[x_ptr]) \n\t" "vfmdb %%v27,%%v27,%%v17 \n\t" - "vsteg %%v27, 40(%[x_ptr]),1 \n\t" - "vsteg %%v27, 48(%[x_ptr]),0 \n\t" + "vsteg %%v27, 48(%[x_ptr]),1 \n\t" + "vsteg %%v27, 56(%[x_ptr]),0 \n\t" "vl %%v28, 64(%[x_ptr]) \n\t" "vfmdb %%v28,%%v28,%%v16 \n\t" "vsteg %%v28, 64(%[x_ptr]),1 \n\t" @@ -141,8 +140,8 @@ static void zscal_kernel_8_zero_r(BLASLONG n, FLOAT da_i, FLOAT *x) { "vsteg %%v29, 88(%[x_ptr]),0 \n\t" "vl %%v30, 96(%[x_ptr]) \n\t" "vfmdb %%v30,%%v30,%%v16 \n\t" - "vsteg %%v27, 96(%[x_ptr]),1 \n\t" - "vsteg %%v27, 104(%[x_ptr]),0 \n\t" + "vsteg %%v30, 96(%[x_ptr]),1 \n\t" + "vsteg %%v30, 104(%[x_ptr]),0 \n\t" "vl %%v31, 112(%[x_ptr]) \n\t" "vfmdb %%v31,%%v31,%%v17 \n\t" "vsteg %%v31, 112(%[x_ptr]),1 \n\t" diff --git a/kernel/zarch/zswap.c b/kernel/zarch/zswap.c index adf2d8a1f..062079002 100644 --- a/kernel/zarch/zswap.c +++ b/kernel/zarch/zswap.c @@ -137,7 +137,7 @@ static void zswap_kernel_16(BLASLONG n, FLOAT *x, FLOAT *y) #else -static void __attribute__ ((noinline)) zswap_kernel_16(BLASLONG n, FLOAT *x, FLOAT *y) +static void zswap_kernel_16(BLASLONG n, FLOAT *x, FLOAT *y) { __asm__ volatile( "pfd 2, 0(%[ptr_x]) \n\t" @@ -225,7 +225,7 @@ static void __attribute__ ((noinline)) zswap_kernel_16(BLASLONG n, FLOAT *x, F [mem_y] "+m" (*(double (*)[2*n])y), [n_tmp] "+&r"(n) : [ptr_x] "a"(x), [ptr_y] "a"(y) - : "cc", "memory", "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","v27","v28","v29","v30","v31" ); return; From f653e7a18d42d9aa5303254432d097b972f8dddb Mon Sep 17 00:00:00 2001 From: Abdelrauf Date: Wed, 31 Jan 2018 07:49:38 -0800 Subject: [PATCH 2/2] small fix small fix inside ifdef z13mvc . (z13mvc code is not used in production) --- kernel/zarch/dcopy.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kernel/zarch/dcopy.c b/kernel/zarch/dcopy.c index 968f63e1b..5dbfd4ad1 100644 --- a/kernel/zarch/dcopy.c +++ b/kernel/zarch/dcopy.c @@ -44,7 +44,7 @@ static void dcopy_kernel_32(BLASLONG n, FLOAT *x, FLOAT *y) { "brctg %[n_tmp],1b" : [mem_y] "=m" (*(double (*)[n])y), [n_tmp] "+&r"(n) : [mem_x] "m" (*(const double (*)[n])x), - [ptr_x] "a"(x), [ptr_y] "a"(y) + [ptr_x] "+&a"(x), [ptr_y] "+&a"(y) : "cc" ); return;