Skip to content

Commit b5c96fc

Browse files
committed
Support ARM SOFTFP ABI for saxpy, sdot, snrm2, sscal, sgemv, sger.
1 parent 90e02cc commit b5c96fc

5 files changed

Lines changed: 69 additions & 4 deletions

File tree

kernel/arm/axpy_vfp.S

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,18 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3838

3939
#define STACKSIZE 256
4040

41+
#ifndef ARM_SOFTFP_ABI
42+
//hard
4143
#define OLD_INC_X [fp, #0 ]
4244
#define OLD_Y [fp, #4 ]
4345
#define OLD_INC_Y [fp, #8 ]
44-
45-
46+
#else
47+
#define OLD_X [fp, #0 ]
48+
#define OLD_INC_X [fp, #4 ]
49+
#define OLD_Y [fp, #8 ]
50+
#define OLD_INC_Y [fp, #12 ]
51+
#endif
52+
4653
#define N r0
4754
#define Y r1
4855
#define INC_X r2
@@ -363,6 +370,13 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
363370
add fp, sp, #8
364371
sub sp, sp, #STACKSIZE // reserve stack
365372

373+
#ifdef ARM_SOFTFP_ABI
374+
#ifndef DOUBLE
375+
vmov s0, r3 //move alpha to s0
376+
ldr X, OLD_X
377+
#endif
378+
#endif
379+
366380
ldr INC_X , OLD_INC_X
367381
ldr Y, OLD_Y
368382
ldr INC_Y , OLD_INC_Y

kernel/arm/gemv_n_vfpv3.S

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,25 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3838

3939
#define STACKSIZE 256
4040

41+
#ifndef ARM_SOFTFP_ABI
42+
//hard
4143
#define OLD_LDA [fp, #0 ]
4244
#define X [fp, #4 ]
4345
#define OLD_INC_X [fp, #8 ]
4446
#define Y [fp, #12 ]
4547
#define OLD_INC_Y [fp, #16 ]
4648
#define OLD_A r3
49+
#else
50+
#define OLD_A_SOFTFP [fp, #0 ]
51+
#define OLD_LDA [fp, #4 ]
52+
#define X [fp, #8 ]
53+
#define OLD_INC_X [fp, #12 ]
54+
#define Y [fp, #16 ]
55+
#define OLD_INC_Y [fp, #20 ]
56+
#define OLD_ALPHA r3
57+
#define OLD_A r3
58+
#endif
59+
4760
#define OLD_M r0
4861

4962
#define AO1 r0
@@ -552,9 +565,18 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
552565
cmp N, #0
553566
ble gemvn_kernel_L999
554567

568+
#ifndef DOUBLE
569+
#ifdef ARM_SOFTFP_ABI
570+
571+
vmov s0, OLD_ALPHA
572+
ldr OLD_A, OLD_A_SOFTFP
573+
#endif
574+
#endif
575+
555576
str OLD_A, A
556577
str OLD_M, M
557-
578+
579+
558580
ldr INC_X , OLD_INC_X
559581
ldr INC_Y , OLD_INC_Y
560582

kernel/arm/gemv_t_vfp.S

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,25 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3838

3939
#define STACKSIZE 256
4040

41+
#ifndef ARM_SOFTFP_ABI
42+
//hard abi
4143
#define OLD_LDA [fp, #0 ]
4244
#define X [fp, #4 ]
4345
#define OLD_INC_X [fp, #8 ]
4446
#define Y [fp, #12 ]
4547
#define OLD_INC_Y [fp, #16 ]
4648
#define OLD_A r3
49+
#else
50+
#define OLD_A_SOFTFP [fp, #0 ]
51+
#define OLD_LDA [fp, #4 ]
52+
#define X [fp, #8 ]
53+
#define OLD_INC_X [fp, #12 ]
54+
#define Y [fp, #16 ]
55+
#define OLD_INC_Y [fp, #20 ]
56+
#define OLD_ALPHA r3
57+
#define OLD_A r3
58+
#endif
59+
4760
#define OLD_N r1
4861

4962
#define M r0
@@ -505,6 +518,13 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
505518
cmp OLD_N, #0
506519
ble gemvt_kernel_L999
507520

521+
#ifndef DOUBLE
522+
#ifdef ARM_SOFTFP_ABI
523+
vmov s0, OLD_ALPHA
524+
ldr OLD_A, OLD_A_SOFTFP
525+
#endif
526+
#endif
527+
508528
str OLD_A, A
509529
str OLD_N, N
510530

kernel/arm/nrm2_vfpv3.S

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -503,6 +503,9 @@ nrm2_kernel_L999:
503503
#else
504504
vsqrt.f32 s1, s1
505505
vmul.f32 s0, s0, s1
506+
#ifdef ARM_SOFTFP_ABI
507+
vmov r0, s0
508+
#endif
506509
#endif
507510

508511
bx lr

kernel/arm/sdot_vfp.S

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -332,10 +332,16 @@ sdot_kernel_L999:
332332

333333
vadd.f64 d0 , d0, d1 // set return value
334334

335+
#ifdef ARM_SOFTFP_ABI
336+
vmov r0, r1, d0
337+
#endif
338+
335339
#else
336340

337341
vadd.f32 s0 , s0, s1 // set return value
338-
342+
#ifdef ARM_SOFTFP_ABI
343+
vmov r0, s0
344+
#endif
339345
#endif
340346
sub sp, fp, #24
341347
pop {r4 - r9, fp}

0 commit comments

Comments
 (0)