.align 5
#if defined(DOUBLE)
- vldr.f64 d0 , =0
- vldr.f64 d1 , =0
+ vsub.f64 d0 , d0 , d0
+ vsub.f64 d1 , d1 , d1
#else
- vldr.f32 s0 , =0
- vldr.f32 s1 , =0
+ vsub.f32 s0 , s0 , s0
+ vsub.f32 s1 , s1 , s1
#endif
cmp N, #0
mov Y, OLD_Y
ldr INC_Y, OLD_INC_Y
- vldr.f32 s0 , =0
- vldr.f32 s1 , =0
- vldr.f32 s2 , =0
- vldr.f32 s3 , =0
+ vsub.f32 s0 , s0 , s0
+ vsub.f32 s1 , s1 , s1
+ vsub.f32 s2 , s2 , s2
+ vsub.f32 s3 , s3 , s3
cmp N, #0
ble cdot_kernel_L999
.macro INIT2x2
- vldr.f32 s8 , =0
+ vsub.f32 s8 , s8 , s8
vmov.f32 s9 , s8
vmov.f32 s10, s8
vmov.f32 s11, s8
.macro INIT1x2
- vldr.f32 s8 , =0
+ vsub.f32 s8 , s8 , s8
vmov.f32 s9 , s8
vmov.f32 s12, s8
vmov.f32 s13, s8
.macro INIT2x1
- vldr.f32 s8 , =0
+ vsub.f32 s8 , s8 , s8
vmov.f32 s9 , s8
vmov.f32 s10, s8
vmov.f32 s11, s8
.macro INIT1x1
- vldr.f32 s8 , =0
+ vsub.f32 s8 , s8 , s8
vmov.f32 s9 , s8
.endm
.macro INIT2x2
+ vsub.f32 s16 , s16 , s16
vmov.f32 s17, s16
vmov.f32 s18, s16
vmov.f32 s19, s16
.macro INIT1x2
+ vsub.f32 s16 , s16 , s16
vmov.f32 s17, s16
vmov.f32 s20, s16
vmov.f32 s21, s16
.macro INIT2x1
+ vsub.f32 s16 , s16 , s16
vmov.f32 s17, s16
vmov.f32 s18, s16
vmov.f32 s19, s16
.macro INIT1x1
+ vsub.f32 s16 , s16 , s16
vmov.f32 s17, s16
vmov.f32 s24, s16
vmov.f32 s25, s16
b cgemm_kernel_L2_M2_44
-cgemm_f32zero:
- .word 0x00000000
cgemm_kernel_L2_M2_40:
- vldr.f32 s16 , cgemm_f32zero
INIT2x2
cgemm_kernel_L2_M1_20:
- vldr.f32 s16 , cgemm_f32zero
INIT1x2
mov BO, BC
cgemm_kernel_L1_M2_40:
- vldr.f32 s16 , =0
INIT2x1
cgemm_kernel_L1_M1_20:
- vldr.f32 s16 , =0
INIT1x1
mov BO, BC
.macro INIT_F4
pld [ YO, #Y_PRE ]
- vldr.f32 s8 , =0
+ vsub.f32 s8 , s8 , s8
vmov.f32 s9 , s8
vmov.f32 s10, s8
vmov.f32 s11, s8
.macro INIT_F1
- vldr.f32 s8 , =0
+ vsub.f32 s8 , s8 , s8
vmov.f32 s9 , s8
.endm
.macro INIT_S4
- vldr.f32 s8 , =0
+ vsub.f32 s8 , s8 , s8
vmov.f32 s9 , s8
vmov.f32 s10, s8
vmov.f32 s11, s8
.macro INIT_S1
- vldr.f32 s8 , =0
+ vsub.f32 s8 , s8 , s8
vmov.f32 s9 , s8
.endm
.macro INIT_F2
- vldr.f32 s12, =0
- vldr.f32 s13, =0
- vldr.f32 s14, =0
- vldr.f32 s15, =0
+ vsub.f32 s12, s12, s12
+ vsub.f32 s13, s13, s13
+ vsub.f32 s14, s14, s14
+ vsub.f32 s15, s15, s15
.endm
.macro INIT_F1
- vldr.f32 s12, =0
- vldr.f32 s13, =0
+ vsub.f32 s12, s12, s12
+ vsub.f32 s13, s13, s13
.endm
.macro INIT_S2
- vldr.f32 s12, =0
- vldr.f32 s13, =0
- vldr.f32 s14, =0
- vldr.f32 s15, =0
+ vsub.f32 s12, s12, s12
+ vsub.f32 s13, s13, s13
+ vsub.f32 s14, s14, s14
+ vsub.f32 s15, s15, s15
.endm
.macro INIT_S1
- vldr.f32 s12, =0
- vldr.f32 s13, =0
+ vsub.f32 s12, s12, s12
+ vsub.f32 s13, s13, s13
.endm
.macro INIT2x2
- vldr.f32 s8 , =0
+ vsub.f32 s8 , s8 , s8
vmov.f32 s9 , s8
vmov.f32 s10, s8
vmov.f32 s11, s8
flds s0, ALPHA_R
flds s1, ALPHA_I
- vldr.f32 s4, =0
- vldr.f32 s5, =0
- vldr.f32 s6, =0
- vldr.f32 s7, =0
+ vsub.f32 s4, s4, s4
+ vsub.f32 s5, s5, s5
+ vsub.f32 s6, s6, s6
+ vsub.f32 s7, s7, s7
FMAC_R1 s4 , s0 , s8
FMAC_I1 s5 , s0 , s9
fstmias CO1, { s4 - s7 }
- vldr.f32 s4, =0
- vldr.f32 s5, =0
- vldr.f32 s6, =0
- vldr.f32 s7, =0
+ vsub.f32 s4, s4, s4
+ vsub.f32 s5, s5, s5
+ vsub.f32 s6, s6, s6
+ vsub.f32 s7, s7, s7
FMAC_R1 s4 , s0 , s12
FMAC_I1 s5 , s0 , s13
.macro INIT1x2
- vldr.f32 s8 , =0
+ vsub.f32 s8 , s8 , s8
vmov.f32 s9 , s8
vmov.f32 s12, s8
vmov.f32 s13, s8
flds s0, ALPHA_R
flds s1, ALPHA_I
- vldr.f32 s4, =0
- vldr.f32 s5, =0
+ vsub.f32 s4, s4, s4
+ vsub.f32 s5, s5, s5
FMAC_R1 s4 , s0 , s8
FMAC_I1 s5 , s0 , s9
fstmias CO1, { s4 - s5 }
- vldr.f32 s4, =0
- vldr.f32 s5, =0
+ vsub.f32 s4, s4, s4
+ vsub.f32 s5, s5, s5
FMAC_R1 s4 , s0 , s12
FMAC_I1 s5 , s0 , s13
.macro INIT2x1
- vldr.f32 s8 , =0
+ vsub.f32 s8 , s8 , s8
vmov.f32 s9 , s8
vmov.f32 s10, s8
vmov.f32 s11, s8
flds s0, ALPHA_R
flds s1, ALPHA_I
- vldr.f32 s4, =0
- vldr.f32 s5, =0
- vldr.f32 s6, =0
- vldr.f32 s7, =0
+ vsub.f32 s4, s4, s4
+ vsub.f32 s5, s5, s5
+ vsub.f32 s6, s6, s6
+ vsub.f32 s7, s7, s7
FMAC_R1 s4 , s0 , s8
FMAC_I1 s5 , s0 , s9
.macro INIT1x1
- vldr.f32 s8 , =0
+ vsub.f32 s8 , s8 , s8
vmov.f32 s9 , s8
.endm
flds s0, ALPHA_R
flds s1, ALPHA_I
- vldr.f32 s4, =0
- vldr.f32 s5, =0
+ vsub.f32 s4, s4, s4
+ vsub.f32 s5, s5, s5
FMAC_R1 s4 , s0 , s8
FMAC_I1 s5 , s0 , s9
.macro INIT2x2
+ vsub.f32 s16 , s16 , s16
vmov.f32 s17, s16
vmov.f32 s18, s16
vmov.f32 s19, s16
.macro INIT1x2
+ vsub.f32 s16 , s16 , s16
vmov.f32 s17, s16
vmov.f32 s20, s16
vmov.f32 s21, s16
.macro INIT2x1
+ vsub.f32 s16 , s16 , s16
vmov.f32 s17, s16
vmov.f32 s18, s16
vmov.f32 s19, s16
.macro INIT1x1
+ vsub.f32 s16 , s16 , s16
vmov.f32 s17, s16
vmov.f32 s24, s16
vmov.f32 s25, s16
b _L2_M2_44
-ctrmm_f32zero:
- .word 0x00000000
_L2_M2_40:
- vldr.f32 s16 , ctrmm_f32zero
INIT2x2
_L2_M1_20:
- vldr.f32 s16 , ctrmm_f32zero
INIT1x2
#if (defined(LEFT) && defined(TRANSA)) || \
_L1_M2_40:
- vldr.f32 s16 , =0
INIT2x1
_L1_M1_20:
- vldr.f32 s16 , =0
INIT1x1
#if (defined(LEFT) && defined(TRANSA)) || \
mov Y, OLD_Y
ldr INC_Y, OLD_INC_Y
- vldr.f64 d0 , =0
- vldr.f64 d1 , =0
+ vsub.f64 d0 , d0 , d0
+ vsub.f64 d1 , d1 , d1
cmp N, #0
ble ddot_kernel_L999
.macro INIT4x2
- vldr.f64 d8 , =0
+ vsub.f64 d8 , d8 , d8
vmov.f64 d9, d8
vmov.f64 d10, d8
vmov.f64 d11, d8
.macro INIT2x2
- vldr.f64 d8 , =0
+ vsub.f64 d8 , d8 , d8
vmov.f64 d9, d8
vmov.f64 d12, d8
vmov.f64 d13, d8
.macro INIT1x2
- vldr.f64 d8 , =0
+ vsub.f64 d8 , d8 , d8
vmov.f64 d12, d8
.endm
.macro INIT4x1
- vldr.f64 d8 , =0
+ vsub.f64 d8 , d8 , d8
vmov.f64 d9, d8
vmov.f64 d10, d8
vmov.f64 d11, d8
.macro INIT2x1
- vldr.f64 d8 , =0
+ vsub.f64 d8 , d8 , d8
vmov.f64 d9 , d8
.endm
.macro INIT1x1
- vldr.f64 d8 , =0
+ vsub.f64 d8 , d8 , d8
.endm
.macro INIT4x4
- vldr.f64 d16 , =0
+ vsub.f64 d16 , d16 , d16
vmov.f64 d17, d16
vmov.f64 d18, d16
vmov.f64 d19, d16
.macro INIT2x4
- vldr.f64 d16 , =0
+ vsub.f64 d16 , d16 , d16
vmov.f64 d17, d16
vmov.f64 d20, d16
vmov.f64 d21, d16
.macro INIT1x4
- vldr.f64 d16 , =0
+ vsub.f64 d16 , d16 , d16
vmov.f64 d20, d16
vmov.f64 d24, d16
vmov.f64 d28, d16
.macro INIT4x2
- vldr.f64 d16 , =0
+ vsub.f64 d16 , d16 , d16
vmov.f64 d17, d16
vmov.f64 d18, d16
vmov.f64 d19, d16
.macro INIT2x2
- vldr.f64 d16 , =0
+ vsub.f64 d16 , d16 , d16
vmov.f64 d17, d16
vmov.f64 d20, d16
vmov.f64 d21, d16
.macro INIT1x2
- vldr.f64 d16 , =0
+ vsub.f64 d16 , d16 , d16
vmov.f64 d20, d16
.endm
.macro INIT4x1
- vldr.f64 d16 , =0
+ vsub.f64 d16 , d16 , d16
vmov.f64 d17, d16
vmov.f64 d18, d16
vmov.f64 d19, d16
.macro INIT2x1
- vldr.f64 d16 , =0
+ vsub.f64 d16 , d16 , d16
vmov.f64 d17, d16
.endm
.macro INIT1x1
- vldr.f64 d16 , =0
+ vsub.f64 d16 , d16 , d16
.endm
.macro INIT4x2
- vldr.f64 d8 , =0
+ vsub.f64 d8 , d8 , d8
vmov.f64 d9, d8
vmov.f64 d10, d8
vmov.f64 d11, d8
.macro INIT2x2
- vldr.f64 d8 , =0
+ vsub.f64 d8 , d8 , d8
vmov.f64 d9, d8
vmov.f64 d12, d8
vmov.f64 d13, d8
.macro INIT1x2
- vldr.f64 d8 , =0
+ vsub.f64 d8 , d8 , d8
vmov.f64 d12, d8
.endm
.macro INIT4x1
- vldr.f64 d8 , =0
+ vsub.f64 d8 , d8 , d8
vmov.f64 d9, d8
vmov.f64 d10, d8
vmov.f64 d11, d8
.macro INIT2x1
- vldr.f64 d8 , =0
+ vsub.f64 d8 , d8 , d8
vmov.f64 d9 , d8
.endm
.macro INIT1x1
- vldr.f64 d8 , =0
+ vsub.f64 d8 , d8 , d8
.endm
.macro INIT4x4
- vldr.f64 d16 , =0
+ vsub.f64 d16 , d16 , d16
vmov.f64 d17, d16
vmov.f64 d18, d16
vmov.f64 d19, d16
.macro INIT2x4
- vldr.f64 d16 , =0
+ vsub.f64 d16 , d16 , d16
vmov.f64 d17, d16
vmov.f64 d20, d16
vmov.f64 d21, d16
.macro INIT1x4
- vldr.f64 d16 , =0
+ vsub.f64 d16 , d16 , d16
vmov.f64 d20, d16
vmov.f64 d24, d16
vmov.f64 d28, d16
.macro INIT4x2
- vldr.f64 d16 , =0
+ vsub.f64 d16 , d16 , d16
vmov.f64 d17, d16
vmov.f64 d18, d16
vmov.f64 d19, d16
.macro INIT2x2
- vldr.f64 d16 , =0
+ vsub.f64 d16 , d16 , d16
vmov.f64 d17, d16
vmov.f64 d20, d16
vmov.f64 d21, d16
.macro INIT1x2
- vldr.f64 d16 , =0
+ vsub.f64 d16 , d16 , d16
vmov.f64 d20, d16
.endm
.macro INIT4x1
- vldr.f64 d16 , =0
+ vsub.f64 d16 , d16 , d16
vmov.f64 d17, d16
vmov.f64 d18, d16
vmov.f64 d19, d16
.macro INIT2x1
- vldr.f64 d16 , =0
+ vsub.f64 d16 , d16 , d16
vmov.f64 d17, d16
.endm
.macro INIT1x1
- vldr.f64 d16 , =0
+ vsub.f64 d16 , d16 , d16
.endm
pld [ YO , #Y_PRE ]
pld [ YO , #Y_PRE+32 ]
- vldr.f64 d8 , =0
+ vsub.f64 d8 , d8 , d8
vmov.f64 d9 , d8
vmov.f64 d10 , d8
vmov.f64 d11 , d8
.macro INIT_F1
- vldr.f64 d12 , =0
+ vsub.f64 d12 , d12 , d12
.endm
.macro INIT_S4
- vldr.f64 d12 , =0
+ vsub.f64 d12 , d12 , d12
vmov.f64 d13 , d12
vmov.f64 d14 , d12
vmov.f64 d15 , d12
.macro INIT_S1
- vldr.f64 d12 , =0
+ vsub.f64 d12 , d12 , d12
.endm
pld [ YO , #Y_PRE ]
- vldr.f32 s8 , =0
+ vsub.f32 s8 , s8 , s8
vmov.f32 s9 , s8
vmov.f32 s10 , s8
vmov.f32 s11 , s8
.macro INIT_F1
- vldr.f32 s12 , =0
+ vsub.f32 s12 , s12 , s12
.endm
.macro INIT_S4
- vldr.f32 s12 , =0
+ vsub.f32 s12 , s12 , s12
vmov.f32 s13 , s12
vmov.f32 s14 , s12
vmov.f32 s15 , s12
.macro INIT_S1
- vldr.f32 s12 , =0
+ vsub.f32 s12 , s12 , s12
.endm
pld [ YO , #Y_PRE ]
pld [ YO , #Y_PRE+32 ]
- vldr.f64 d24 , =0
+ vsub.f64 d24 , d24 , d24
vmov.f64 d25 , d24
vmov.f64 d26 , d24
vmov.f64 d27 , d24
.macro INIT_F1
- vldr.f64 d24 , =0
+ vsub.f64 d24 , d24 , d24
.endm
.macro INIT_S8
- vldr.f64 d24 , =0
+ vsub.f64 d24 , d24 , d24
vmov.f64 d25 , d24
vmov.f64 d26 , d24
vmov.f64 d27 , d24
.macro INIT_S1
- vldr.f64 d24 , =0
+ vsub.f64 d24 , d24 , d24
.endm
pld [ YO , #Y_PRE ]
- vldr.f32 s24 , =0
+ vsub.f32 s24 , s24 , s24
vmov.f32 s25 , s24
vmov.f32 s26 , s24
vmov.f32 s27 , s24
.macro INIT_F1
- vldr.f32 s24 , =0
+ vsub.f32 s24 , s24 , s24
.endm
.macro INIT_S8
- vldr.f32 s24 , =0
+ vsub.f32 s24 , s24 , s24
vmov.f32 s25 , s24
vmov.f32 s26 , s24
vmov.f32 s27 , s24
.macro INIT_S1
- vldr.f32 s24 , =0
+ vsub.f32 s24 , s24 , s24
.endm
.macro INIT_F2
- vldr.f64 d2 , =0
- vldr.f64 d3 , =0
+ vsub.f64 d2 , d2 , d2
+ vsub.f64 d3 , d3 , d3
.endm
.macro INIT_F1
- vldr.f64 d2 , =0
+ vsub.f64 d2 , d2 , d2
.endm
.macro INIT_S2
- vldr.f64 d2 , =0
- vldr.f64 d3 , =0
+ vsub.f64 d2 , d2 , d2
+ vsub.f64 d3 , d3 , d3
.endm
.macro INIT_S1
- vldr.f64 d2 , =0
+ vsub.f64 d2 , d2 , d2
.endm
.macro INIT_F2
- vldr.f32 s2 , =0
- vldr.f32 s3 , =0
+ vsub.f32 s2 , s2 , s2
+ vsub.f32 s3 , s3 , s3
.endm
.macro INIT_F1
- vldr.f32 s2 , =0
+ vsub.f32 s2 , s2 , s2
.endm
.macro INIT_S2
- vldr.f32 s2 , =0
- vldr.f32 s3 , =0
+ vsub.f32 s2 , s2 , s2
+ vsub.f32 s3 , s3 , s3
.endm
.macro INIT_S1
- vldr.f32 s2 , =0
+ vsub.f32 s2 , s2 , s2
.endm
.macro INIT_F2
- vldr.f64 d4 , =0
- vldr.f64 d5 , =0
+ vsub.f64 d4 , d4 , d4
+ vsub.f64 d5 , d5 , d5
.endm
.macro INIT_S2
- vldr.f64 d4 , =0
- vldr.f64 d5 , =0
+ vsub.f64 d4 , d4 , d4
+ vsub.f64 d5 , d5 , d5
.endm
.macro INIT_F1
- vldr.f64 d4 , =0
+ vsub.f64 d4 , d4 , d4
.endm
.macro INIT_S1
- vldr.f64 d4 , =0
+ vsub.f64 d4 , d4 , d4
.endm
.macro INIT_F2
- vldr.f32 s4 , =0
- vldr.f32 s5 , =0
+ vsub.f32 s4 , s4 , s4
+ vsub.f32 s5 , s5 , s5
.endm
.macro INIT_S2
- vldr.f32 s4 , =0
- vldr.f32 s5 , =0
+ vsub.f32 s4 , s4 , s4
+ vsub.f32 s5 , s5 , s5
.endm
.macro INIT_F1
- vldr.f32 s4 , =0
+ vsub.f32 s4 , s4 , s4
.endm
.macro INIT_S1
- vldr.f32 s4 , =0
+ vsub.f32 s4 , s4 , s4
.endm
push {r4}
#if defined(DOUBLE)
- vldr.f64 d0 , =0
+ vsub.f64 d0 , d0 , d0
#else
- vldr.f32 s0 , =0
+ vsub.f32 s0 , s0 , s0
#endif
mov INDEX, #0
#if defined(COMPLEX)
#if defined(DOUBLE)
- vldr.f64 d0 , =0 // scale=0.0
+ vsub.f64 d0 , d0 , d0 // scale=0.0
vldr.64 d1 , znrm2_one // ssq=1.0
vmov.f64 d7 , d1 // value 1.0
vmov.f64 d6 , d0 // value 0.0
#else
- vldr.f32 s0 , =0 // scale=0.0
+ vsub.f32 s0 , s0 , s0 // scale=0.0
vldr.32 s1 , cnrm2_one // ssq=1.0
vmov.f32 s7 , s1 // value 1.0
vmov.f32 s6 , s0 // value 0.0
#else
#if defined(DOUBLE)
- vldr.f64 d0 , =0 // scale=0.0
+ vsub.f64 d0 , d0 , d0 // scale=0.0
vldr.64 d1 , dnrm2_one // ssq=1.0
vmov.f64 d7 , d1 // value 1.0
vmov.f64 d6 , d0 // value 0.0
#else
- vldr.f32 s0 , =0 // scale=0.0
+ vsub.f32 s0 , s0 , s0 // scale=0.0
vldr.32 s1 , snrm2_one // ssq=1.0
vmov.f32 s7 , s1 // value 1.0
vmov.f32 s6 , s0 // value 0.0
* End of macro definitions
**************************************************************************************/
-nrm2_zeros:
- .align 5
- .word 0x00000000
- .word 0x00000000
-
PROLOGUE
.align 5
#if defined(DOUBLE)
- vldr.f64 d0 , nrm2_zeros // scale=0.0
+ vsub.f64 d0 , d0 , d0 // scale=0.0
vmov.f64 d1 , #1.0 // ssq=1.0
vmov.f64 d7 , d1 // value 1.0
vmov.f64 d6 , d0 // value 0.0
#else
- vldr.f32 s0 , nrm2_zeros // scale=0.0
+ vsub.f32 s0 , s0 , s0 // scale=0.0
vmov.f32 s1 , #1.0 // ssq=1.0
vmov.f32 s7 , s1 // value 1.0
vmov.f32 s6 , s0 // value 0.0
#if defined(DSDOT)
- vldr.f64 d0 , =0
- vldr.f64 d1 , =0
+ vsub.f64 d0 , d0 , d0
+ vsub.f64 d1 , d1 , d1
#else
- vldr.f32 s0 , =0
- vldr.f32 s1 , =0
+ vsub.f32 s0 , s0 , s0
+ vsub.f32 s1 , s1 , s1
#endif
.macro INIT4x2
- vldr.f32 s8 , =0
+ vsub.f32 s8 , s8 , s8
vmov.f32 s9, s8
vmov.f32 s10, s8
vmov.f32 s11, s8
.macro INIT2x2
- vldr.f32 s8 , =0
+ vsub.f32 s8 , s8 , s8
vmov.f32 s9, s8
vmov.f32 s12, s8
vmov.f32 s13, s8
.macro INIT1x2
- vldr.f32 s8 , =0
+ vsub.f32 s8 , s8 , s8
vmov.f32 s12, s8
.endm
.macro INIT4x1
- vldr.f32 s8 , =0
+ vsub.f32 s8 , s8 , s8
vmov.f32 s9, s8
vmov.f32 s10, s8
vmov.f32 s11, s8
.macro INIT2x1
- vldr.f32 s8 , =0
+ vsub.f32 s8 , s8 , s8
vmov.f32 s9 , s8
.endm
.macro INIT1x1
- vldr.f32 s8 , =0
+ vsub.f32 s8 , s8 , s8
.endm
.macro INIT4x4
+ vsub.f32 s16 , s16 , s16
vmov.f32 s17, s16
vmov.f32 s18, s16
vmov.f32 s19, s16
.macro INIT2x4
+ vsub.f32 s16 , s16 , s16
vmov.f32 s17, s16
vmov.f32 s20, s16
vmov.f32 s21, s16
.macro INIT1x4
+ vsub.f32 s16 , s16 , s16
vmov.f32 s20, s16
vmov.f32 s24, s16
vmov.f32 s28, s16
.macro INIT4x2
+ vsub.f32 s16 , s16 , s16
vmov.f32 s17, s16
vmov.f32 s18, s16
vmov.f32 s19, s16
.macro INIT2x2
+ vsub.f32 s16 , s16 , s16
vmov.f32 s17, s16
vmov.f32 s20, s16
vmov.f32 s21, s16
.macro INIT1x2
+ vsub.f32 s16 , s16 , s16
vmov.f32 s20, s16
.endm
.macro INIT4x1
+ vsub.f32 s16 , s16 , s16
vmov.f32 s17, s16
vmov.f32 s18, s16
vmov.f32 s19, s16
.macro INIT2x1
+ vsub.f32 s16 , s16 , s16
vmov.f32 s17, s16
.endm
/******************************************************************************/
+.macro INIT1x1
+
+ vsub.f32 s16 , s16 , s16
+
+.endm
+
+
.macro KERNEL1x1_SUB
b sgemm_kernel_L4_M4_44
- /* Note on loading zero into a fp register
- * vsub doesn't work since it cannot handle NaN and infinity
- * vmov.Fn doesn't work with 0
- * vmov.In and veor are neon
- * vldr , =0 doesn't work since the function is larger than 2KB
- * and the assembler is not able to insert constant pool inside
- * the function body.
- *
- * Therefore, the best way I've found is to manually create multiple
- * copies of the zero constant and `vldr` from different ones depending
- * on where the instruction is.
- */
-sgemm_f32zero:
- .word 0x00000000
sgemm_kernel_L4_M4_40:
- vldr.f32 s16 , sgemm_f32zero
INIT4x4
sgemm_kernel_L4_M2_20:
- vldr.f32 s16 , sgemm_f32zero
INIT2x4
mov BO, BC
tst I, #1 // I = I % 2
ble sgemm_kernel_L4_END
- b sgemm_kernel_L4_M1_20
-
-sgemm_f32zero4:
- .word 0x00000000
sgemm_kernel_L4_M1_20:
- vldr.f32 s16 , sgemm_f32zero4
INIT1x4
mov BO, BC
sgemm_kernel_L2_M4_20:
- vldr.f32 s16 , sgemm_f32zero3
INIT4x2
mov BO, BC
subs L, L, #1
bgt sgemm_kernel_L2_M4_22
+
sgemm_kernel_L2_M4_40:
ands L , K1, #7 // L = L % 8
subs I, I, #1
bgt sgemm_kernel_L2_M4_20
- b sgemm_kernel_L2_M2_BEGIN
-sgemm_f32zero3:
- .word 0x00000000
sgemm_kernel_L2_M2_BEGIN:
sgemm_kernel_L2_M2_20:
- vldr.f32 s16 , sgemm_f32zero3
INIT2x2
mov BO, BC
sgemm_kernel_L2_M1_20:
- vldr.f32 s16 , sgemm_f32zero3
INIT1x2
mov BO, BC
sgemm_kernel_L1_M4_20:
- vldr.f32 s16 , sgemm_f32zero3
INIT4x1
mov BO, BC
sgemm_kernel_L1_M2_20:
- vldr.f32 s16 , sgemm_f32zero2
INIT2x1
mov BO, BC
sgemm_kernel_L1_M1_20:
- vldr.f32 s16 , sgemm_f32zero2
+ INIT1x1
mov BO, BC
asrs L , K1, #3 // L = L / 8
EPILOGUE
-sgemm_f32zero2:
- .word 0x00000000
.macro INIT4x2
- vldr.f32 s8 , =0
+ vsub.f32 s8 , s8 , s8
vmov.f32 s9, s8
vmov.f32 s10, s8
vmov.f32 s11, s8
.macro INIT2x2
- vldr.f32 s8 , =0
+ vsub.f32 s8 , s8 , s8
vmov.f32 s9, s8
vmov.f32 s12, s8
vmov.f32 s13, s8
.macro INIT1x2
- vldr.f32 s8 , =0
+ vsub.f32 s8 , s8 , s8
vmov.f32 s12, s8
.endm
.macro INIT4x1
- vldr.f32 s8 , =0
+ vsub.f32 s8 , s8 , s8
vmov.f32 s9, s8
vmov.f32 s10, s8
vmov.f32 s11, s8
.macro INIT2x1
- vldr.f32 s8 , =0
+ vsub.f32 s8 , s8 , s8
vmov.f32 s9 , s8
.endm
.macro INIT1x1
- vldr.f32 s8 , =0
+ vsub.f32 s8 , s8 , s8
.endm
.macro INIT4x4
+ vsub.f32 s16 , s16 , s16
vmov.f32 s17, s16
vmov.f32 s18, s16
vmov.f32 s19, s16
.macro INIT2x4
+ vsub.f32 s16 , s16 , s16
vmov.f32 s17, s16
vmov.f32 s20, s16
vmov.f32 s21, s16
.macro INIT1x4
+ vsub.f32 s16 , s16 , s16
vmov.f32 s20, s16
vmov.f32 s24, s16
vmov.f32 s28, s16
.macro INIT4x2
+ vsub.f32 s16 , s16 , s16
vmov.f32 s17, s16
vmov.f32 s18, s16
vmov.f32 s19, s16
.macro INIT2x2
+ vsub.f32 s16 , s16 , s16
vmov.f32 s17, s16
vmov.f32 s20, s16
vmov.f32 s21, s16
.macro INIT1x2
+ vsub.f32 s16 , s16 , s16
vmov.f32 s20, s16
.endm
.macro INIT4x1
+ vsub.f32 s16 , s16 , s16
vmov.f32 s17, s16
vmov.f32 s18, s16
vmov.f32 s19, s16
.macro INIT2x1
+ vsub.f32 s16 , s16 , s16
vmov.f32 s17, s16
.endm
/******************************************************************************/
+.macro INIT1x1
+
+ vsub.f32 s16 , s16 , s16
+
+.endm
+
+
.macro KERNEL1x1_SUB
b _L4_M4_44
- /* Note on loading zero into a fp register
- * vsub doesn't work since it cannot handle NaN and infinity
- * vmov.Fn doesn't work with 0
- * vmov.In and veor are neon
- * vldr , =0 doesn't work since the function is larger than 2KB
- * and the assembler is not able to insert constant pool inside
- * the function body.
- *
- * Therefore, the best way I've found is to manually create multiple
- * copies of the zero constant and `vldr` from different ones depending
- * on where the instruction is.
- */
-strmm_f32zero:
- .word 0x00000000
_L4_M4_40:
- vldr.f32 s16 , strmm_f32zero
INIT4x4
_L4_M2_20:
- vldr.f32 s16 , strmm_f32zero
INIT2x4
#if (defined(LEFT) && defined(TRANSA)) || \
_L4_M1_20:
- vldr.f32 s16 , strmm_f32zero3
INIT1x4
#if (defined(LEFT) && defined(TRANSA)) || \
ldr I, M
asrs I, I, #2 // I = I / 4
ble _L2_M2_BEGIN
- b _L2_M4_20
-
-strmm_f32zero3:
- .word 0x00000000
_L2_M4_20:
- vldr.f32 s16 , strmm_f32zero3
INIT4x2
#if (defined(LEFT) && defined(TRANSA)) || \
_L2_M2_20:
- vldr.f32 s16 , strmm_f32zero3
INIT2x2
#if (defined(LEFT) && defined(TRANSA)) || \
_L2_M1_20:
- vldr.f32 s16 , strmm_f32zero4
INIT1x2
#if (defined(LEFT) && defined(TRANSA)) || \
ldr I, M
asrs I, I, #2 // I = I / 4
ble _L1_M2_BEGIN
- b _L1_M4_20
-
-strmm_f32zero4:
- .word 0x00000000
_L1_M4_20:
- vldr.f32 s16 , strmm_f32zero4
INIT4x1
#if (defined(LEFT) && defined(TRANSA)) || \
_L1_M2_20:
- vldr.f32 s16 , strmm_f32zero2
INIT2x1
#if (defined(LEFT) && defined(TRANSA)) || \
_L1_M1_20:
- vldr.f32 s16 , strmm_f32zero2
+ INIT1x1
#if (defined(LEFT) && defined(TRANSA)) || \
(!defined(LEFT) && !defined(TRANSA))
EPILOGUE
-strmm_f32zero2:
- .word 0x00000000
mov Y, OLD_Y
ldr INC_Y, OLD_INC_Y
- vldr.f64 d0 , =0
- vldr.f64 d1 , =0
- vldr.f64 d2 , =0
- vldr.f64 d3 , =0
+ vsub.f64 d0 , d0 , d0
+ vsub.f64 d1 , d1 , d1
+ vsub.f64 d2 , d2 , d2
+ vsub.f64 d3 , d3 , d3
cmp N, #0
ble zdot_kernel_L999
.macro INIT2x2
- vldr.f64 d8 , =0
+ vsub.f64 d8 , d8 , d8
vmov.f64 d9 , d8
vmov.f64 d10, d8
vmov.f64 d11, d8
.macro INIT1x2
- vldr.f64 d8 , =0
+ vsub.f64 d8 , d8 , d8
vmov.f64 d9 , d8
vmov.f64 d12, d8
vmov.f64 d13, d8
.macro INIT2x1
- vldr.f64 d8 , =0
+ vsub.f64 d8 , d8 , d8
vmov.f64 d9 , d8
vmov.f64 d10, d8
vmov.f64 d11, d8
.macro INIT1x1
- vldr.f64 d8 , =0
+ vsub.f64 d8 , d8 , d8
vmov.f64 d9 , d8
.endm
.macro INIT2x2
- vldr.f64 d16 , =0
+ vsub.f64 d16 , d16 , d16
vmov.f64 d17, d16
vmov.f64 d18, d16
vmov.f64 d19, d16
.macro INIT1x2
- vldr.f64 d16 , =0
+ vsub.f64 d16 , d16 , d16
vmov.f64 d17, d16
vmov.f64 d20, d16
vmov.f64 d21, d16
.macro INIT2x1
- vldr.f64 d16 , =0
+ vsub.f64 d16 , d16 , d16
vmov.f64 d17, d16
vmov.f64 d18, d16
vmov.f64 d19, d16
.macro INIT1x1
- vldr.f64 d16 , =0
+ vsub.f64 d16 , d16 , d16
vmov.f64 d17, d16
vmov.f64 d24, d16
vmov.f64 d25, d16
.macro INIT_F4
pld [ YO, #Y_PRE ]
- vldr.f64 d8 , =0
+ vsub.f64 d8 , d8 , d8
vmov.f64 d9 , d8
vmov.f64 d10, d8
vmov.f64 d11, d8
.macro INIT_F1
- vldr.f64 d8 , =0
+ vsub.f64 d8 , d8 , d8
vmov.f64 d9 , d8
.endm
.macro INIT_S4
- vldr.f64 d8 , =0
+ vsub.f64 d8 , d8 , d8
vmov.f64 d9 , d8
vmov.f64 d10, d8
vmov.f64 d11, d8
.macro INIT_S1
- vldr.f64 d8 , =0
+ vsub.f64 d8 , d8 , d8
vmov.f64 d9 , d8
.endm
.macro INIT_F2
- vldr.f64 d12, =0
- vldr.f64 d13, =0
- vldr.f64 d14, =0
- vldr.f64 d15, =0
+ vsub.f64 d12, d12, d12
+ vsub.f64 d13, d13, d13
+ vsub.f64 d14, d14, d14
+ vsub.f64 d15, d15, d15
.endm
.macro INIT_F1
- vldr.f64 d12, =0
- vldr.f64 d13, =0
+ vsub.f64 d12, d12, d12
+ vsub.f64 d13, d13, d13
.endm
.macro INIT_S2
- vldr.f64 d12, =0
- vldr.f64 d13, =0
- vldr.f64 d14, =0
- vldr.f64 d15, =0
+ vsub.f64 d12, d12, d12
+ vsub.f64 d13, d13, d13
+ vsub.f64 d14, d14, d14
+ vsub.f64 d15, d15, d15
.endm
.macro INIT_S1
- vldr.f64 d12, =0
- vldr.f64 d13, =0
+ vsub.f64 d12, d12, d12
+ vsub.f64 d13, d13, d13
.endm
.macro INIT2x2
- vldr.f64 d8 , =0
+ vsub.f64 d8 , d8 , d8
vmov.f64 d9 , d8
vmov.f64 d10, d8
vmov.f64 d11, d8
fldd d0, ALPHA_R
fldd d1, ALPHA_I
- vldr.f64 d4, =0
- vldr.f64 d5, =0
- vldr.f64 d6, =0
- vldr.f64 d7, =0
+ vsub.f64 d4, d4 , d4
+ vsub.f64 d5, d5 , d5
+ vsub.f64 d6, d6 , d6
+ vsub.f64 d7, d7 , d7
FMAC_R1 d4 , d0 , d8
FMAC_I1 d5 , d0 , d9
fstmiad CO1, { d4 - d7 }
- vldr.f64 d4, =0
- vldr.f64 d5, =0
- vldr.f64 d6, =0
- vldr.f64 d7, =0
+ vsub.f64 d4, d4 , d4
+ vsub.f64 d5, d5 , d5
+ vsub.f64 d6, d6 , d6
+ vsub.f64 d7, d7 , d7
FMAC_R1 d4 , d0 , d12
FMAC_I1 d5 , d0 , d13
.macro INIT1x2
- vldr.f64 d8 , =0
+ vsub.f64 d8 , d8 , d8
vmov.f64 d9 , d8
vmov.f64 d12, d8
vmov.f64 d13, d8
fldd d0, ALPHA_R
fldd d1, ALPHA_I
- vldr.f64 d4, =0
- vldr.f64 d5, =0
+ vsub.f64 d4, d4 , d4
+ vsub.f64 d5, d5 , d5
FMAC_R1 d4 , d0 , d8
FMAC_I1 d5 , d0 , d9
fstmiad CO1, { d4 - d5 }
- vldr.f64 d4, =0
- vldr.f64 d5, =0
+ vsub.f64 d4, d4 , d4
+ vsub.f64 d5, d5 , d5
FMAC_R1 d4 , d0 , d12
FMAC_I1 d5 , d0 , d13
.macro INIT2x1
- vldr.f64 d8 , =0
+ vsub.f64 d8 , d8 , d8
vmov.f64 d9 , d8
vmov.f64 d10, d8
vmov.f64 d11, d8
fldd d0, ALPHA_R
fldd d1, ALPHA_I
- vldr.f64 d4, =0
- vldr.f64 d5, =0
- vldr.f64 d6, =0
- vldr.f64 d7, =0
+ vsub.f64 d4, d4 , d4
+ vsub.f64 d5, d5 , d5
+ vsub.f64 d6, d6 , d6
+ vsub.f64 d7, d7 , d7
FMAC_R1 d4 , d0 , d8
FMAC_I1 d5 , d0 , d9
.macro INIT1x1
- vldr.f64 d8 , =0
+ vsub.f64 d8 , d8 , d8
vmov.f64 d9 , d8
.endm
fldd d0, ALPHA_R
fldd d1, ALPHA_I
- vldr.f64 d4, =0
- vldr.f64 d5, =0
+ vsub.f64 d4, d4 , d4
+ vsub.f64 d5, d5 , d5
FMAC_R1 d4 , d0 , d8
FMAC_I1 d5 , d0 , d9
.macro INIT2x2
- vldr.f64 d16 , =0
+ vsub.f64 d16 , d16 , d16
vmov.f64 d17, d16
vmov.f64 d18, d16
vmov.f64 d19, d16
.macro INIT1x2
- vldr.f64 d16 , =0
+ vsub.f64 d16 , d16 , d16
vmov.f64 d17, d16
vmov.f64 d20, d16
vmov.f64 d21, d16
.macro INIT2x1
- vldr.f64 d16 , =0
+ vsub.f64 d16 , d16 , d16
vmov.f64 d17, d16
vmov.f64 d18, d16
vmov.f64 d19, d16
.macro INIT1x1
- vldr.f64 d16 , =0
+ vsub.f64 d16 , d16 , d16
vmov.f64 d17, d16
vmov.f64 d24, d16
vmov.f64 d25, d16