-SGEMVNKERNEL = ../arm/gemv_n.c
-SGEMVTKERNEL = ../arm/gemv_t.c
-CGEMVNKERNEL = ../arm/zgemv_n.c
-CGEMVTKERNEL = ../arm/zgemv_t.c
-
#################################################################################
SAMAXKERNEL = iamax_vfp.S
CSCALKERNEL = zscal.c
ZSCALKERNEL = zscal.c
-# BAD SGEMVNKERNEL = gemv_n_vfp.S
+SGEMVNKERNEL = gemv_n_vfp.S
DGEMVNKERNEL = gemv_n_vfp.S
-#CGEMVNKERNEL = cgemv_n_vfp.S
+CGEMVNKERNEL = cgemv_n_vfp.S
ZGEMVNKERNEL = zgemv_n_vfp.S
-# BAD SGEMVTKERNEL = gemv_t_vfp.S
+SGEMVTKERNEL = gemv_t_vfp.S
DGEMVTKERNEL = gemv_t_vfp.S
-#CGEMVTKERNEL = cgemv_t_vfp.S
+CGEMVTKERNEL = cgemv_t_vfp.S
ZGEMVTKERNEL = zgemv_t_vfp.S
STRMMKERNEL = strmm_kernel_4x4_vfpv3.S
CTRMMKERNEL = ctrmm_kernel_2x2_vfpv3.S
ZTRMMKERNEL = ztrmm_kernel_2x2_vfpv3.S
-#SGEMMKERNEL = ../generic/gemmkernel_2x2.c
SGEMMKERNEL = sgemm_kernel_4x4_vfpv3.S
SGEMMINCOPY =
SGEMMITCOPY =
#define N [fp, #-260 ]
#define K [fp, #-264 ]
+#define FP_ZERO [fp, #-236]
+#define FP_ZERO_0 [fp, #-236]
+#define FP_ZERO_1 [fp, #-232]
+
#define ALPHA_I [fp, #-272]
#define ALPHA_R [fp, #-280]
.macro INIT2x2
- vsub.f32 s16 , s16 , s16
+ flds s16 , FP_ZERO
vmov.f32 s17, s16
vmov.f32 s18, s16
vmov.f32 s19, s16
.macro INIT1x2
- vsub.f32 s16 , s16 , s16
+ flds s16 , FP_ZERO
vmov.f32 s17, s16
vmov.f32 s20, s16
vmov.f32 s21, s16
.macro INIT2x1
- vsub.f32 s16 , s16 , s16
+ flds s16 , FP_ZERO
vmov.f32 s17, s16
vmov.f32 s18, s16
vmov.f32 s19, s16
.macro INIT1x1
- vsub.f32 s16 , s16 , s16
+ flds s16 , FP_ZERO
vmov.f32 s17, s16
vmov.f32 s24, s16
vmov.f32 s25, s16
sub r3, fp, #128
vstm r3, { s8 - s31} // store floating point registers
+ movs r4, #0
+ str r4, FP_ZERO
+ str r4, FP_ZERO_1
+
ldr r3, OLD_LDC
lsl r3, r3, #3 // ldc = ldc * 4 * 2
str r3, LDC
#define K [fp, #-264 ]
#define A [fp, #-268 ]
+#define FP_ZERO [fp, #-236]
+#define FP_ZERO_0 [fp, #-236]
+#define FP_ZERO_1 [fp, #-232]
+
+
#define ALPHA [fp, #-276 ]
#define B [fp, #4 ]
.macro INIT4x4
- vsub.f64 d16 , d16 , d16
+ fldd d16, FP_ZERO
vmov.f64 d17, d16
vmov.f64 d18, d16
vmov.f64 d19, d16
.macro INIT2x4
- vsub.f64 d16 , d16 , d16
+ fldd d16, FP_ZERO
vmov.f64 d17, d16
vmov.f64 d20, d16
vmov.f64 d21, d16
.macro INIT1x4
- vsub.f64 d16 , d16 , d16
+ fldd d16, FP_ZERO
vmov.f64 d20, d16
vmov.f64 d24, d16
vmov.f64 d28, d16
.macro INIT4x2
- vsub.f64 d16 , d16 , d16
+ fldd d16, FP_ZERO
vmov.f64 d17, d16
vmov.f64 d18, d16
vmov.f64 d19, d16
.macro INIT2x2
- vsub.f64 d16 , d16 , d16
+ fldd d16, FP_ZERO
vmov.f64 d17, d16
vmov.f64 d20, d16
vmov.f64 d21, d16
.macro INIT1x2
- vsub.f64 d16 , d16 , d16
+ fldd d16, FP_ZERO
vmov.f64 d20, d16
.endm
.macro INIT4x1
- vsub.f64 d16 , d16 , d16
+ fldd d16, FP_ZERO
vmov.f64 d17, d16
vmov.f64 d18, d16
vmov.f64 d19, d16
.macro INIT2x1
- vsub.f64 d16 , d16 , d16
+ fldd d16, FP_ZERO
vmov.f64 d17, d16
.endm
.macro INIT1x1
- vsub.f64 d16 , d16 , d16
+ fldd d16, FP_ZERO
.endm
sub r3, fp, #128
vstm r3, { d8 - d15} // store floating point registers
+ movs r4, #0
+ str r4, FP_ZERO
+ str r4, FP_ZERO_1
+
ldr r3, OLD_LDC
lsl r3, r3, #3 // ldc = ldc * 8
str r3, LDC
#define K [fp, #-264 ]
#define A [fp, #-268 ]
+#define FP_ZERO [fp, #-240]
+#define FP_ZERO_0 [fp, # -240]
+#define FP_ZERO_1 [fp, # -236]
+
#define ALPHA [fp, #-280]
#define B [fp, #4 ]
.macro INIT4x4
- vsub.f32 s16 , s16 , s16
+ flds S16, FP_ZERO
vmov.f32 s17, s16
vmov.f32 s18, s16
vmov.f32 s19, s16
.macro INIT2x4
- vsub.f32 s16 , s16 , s16
+ flds S16, FP_ZERO
vmov.f32 s17, s16
vmov.f32 s20, s16
vmov.f32 s21, s16
.macro INIT1x4
- vsub.f32 s16 , s16 , s16
+ flds S16, FP_ZERO
vmov.f32 s20, s16
vmov.f32 s24, s16
vmov.f32 s28, s16
.macro INIT4x2
- vsub.f32 s16 , s16 , s16
+ flds S16, FP_ZERO
vmov.f32 s17, s16
vmov.f32 s18, s16
vmov.f32 s19, s16
.macro INIT2x2
- vsub.f32 s16 , s16 , s16
+ flds S16, FP_ZERO
vmov.f32 s17, s16
vmov.f32 s20, s16
vmov.f32 s21, s16
.macro INIT1x2
- vsub.f32 s16 , s16 , s16
+ flds S16, FP_ZERO
vmov.f32 s20, s16
.endm
.macro INIT4x1
- vsub.f32 s16 , s16 , s16
+ flds S16, FP_ZERO
vmov.f32 s17, s16
vmov.f32 s18, s16
vmov.f32 s19, s16
.macro INIT2x1
- vsub.f32 s16 , s16 , s16
+ flds S16, FP_ZERO
vmov.f32 s17, s16
.endm
.macro INIT1x1
- vsub.f32 s16 , s16 , s16
+ flds S16, FP_ZERO
.endm
sub r3, fp, #128
vstm r3, { s8 - s31} // store floating point registers
+ movs r4, #0
+ str r4, FP_ZERO
+ str r4, FP_ZERO_1
+
ldr r3, OLD_LDC
lsl r3, r3, #2 // ldc = ldc * 4
str r3, LDC
#define N [fp, #-260 ]
#define K [fp, #-264 ]
+#define FP_ZERO [fp, #-236]
+#define FP_ZERO_0 [fp, #-236]
+#define FP_ZERO_1 [fp, #-232]
+
#define ALPHA_I [fp, #-272]
#define ALPHA_R [fp, #-280]
.macro INIT2x2
- vsub.f64 d16 , d16 , d16
+ fldd d16 , FP_ZERO
vmov.f64 d17, d16
vmov.f64 d18, d16
vmov.f64 d19, d16
.macro INIT1x2
- vsub.f64 d16 , d16 , d16
+ fldd d16 , FP_ZERO
vmov.f64 d17, d16
vmov.f64 d20, d16
vmov.f64 d21, d16
.macro INIT2x1
- vsub.f64 d16 , d16 , d16
+ fldd d16 , FP_ZERO
vmov.f64 d17, d16
vmov.f64 d18, d16
vmov.f64 d19, d16
.macro INIT1x1
- vsub.f64 d16 , d16 , d16
+ fldd d16 , FP_ZERO
vmov.f64 d17, d16
vmov.f64 d24, d16
vmov.f64 d25, d16
sub r3, fp, #128
vstm r3, { d8 - d15} // store floating point registers
+ movs r4, #0
+ str r4, FP_ZERO
+ str r4, FP_ZERO_1
+
ldr r3, OLD_LDC
lsl r3, r3, #4 // ldc = ldc * 8 * 2
str r3, LDC