Skip to content

Commit 482015f

Browse files
committed
Merge branch 'arm_soft_fp_abi' into develop
2 parents 639000e + b5c96fc commit 482015f

9 files changed

Lines changed: 123 additions & 17 deletions

File tree

Makefile.arm

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,32 @@
1-
# ifeq logical or
1+
#ifeq logical or
22
ifeq ($(CORE), $(filter $(CORE),CORTEXA9 CORTEXA15))
33
ifeq ($(OSNAME), Android)
4-
CCOMMON_OPT += -marm -mfpu=neon -mfloat-abi=hard -march=armv7-a
5-
FCOMMON_OPT += -marm -mfpu=neon -mfloat-abi=hard -march=armv7-a
4+
CCOMMON_OPT += -mfpu=neon -march=armv7-a
5+
FCOMMON_OPT += -mfpu=neon -march=armv7-a
66
else
7-
CCOMMON_OPT += -marm -mfpu=vfpv3 -mfloat-abi=hard -march=armv7-a
8-
FCOMMON_OPT += -marm -mfpu=vfpv3 -mfloat-abi=hard -march=armv7-a
7+
CCOMMON_OPT += -mfpu=vfpv3 -march=armv7-a
8+
FCOMMON_OPT += -mfpu=vfpv3 -march=armv7-a
99
endif
1010
endif
1111

1212
ifeq ($(CORE), ARMV7)
1313
ifeq ($(OSNAME), Android)
14-
CCOMMON_OPT += -marm -mfpu=neon -mfloat-abi=hard -march=armv7-a -Wl,--no-warn-mismatch
15-
FCOMMON_OPT += -marm -mfpu=neon -mfloat-abi=hard -march=armv7-a -Wl,--no-warn-mismatch
14+
ifeq ($(ARM_SOFTFP_ABI), 1)
15+
CCOMMON_OPT += -mfpu=neon -march=armv7-a
16+
FCOMMON_OPT += -mfpu=neon -march=armv7-a
1617
else
17-
CCOMMON_OPT += -marm -mfpu=vfpv3 -mfloat-abi=hard -march=armv7-a
18-
FCOMMON_OPT += -marm -mfpu=vfpv3 -mfloat-abi=hard -march=armv7-a
18+
CCOMMON_OPT += -mfpu=neon -march=armv7-a -Wl,--no-warn-mismatch
19+
FCOMMON_OPT += -mfpu=neon -march=armv7-a -Wl,--no-warn-mismatch
20+
endif
21+
else
22+
CCOMMON_OPT += -mfpu=vfpv3 -march=armv7-a
23+
FCOMMON_OPT += -mfpu=vfpv3 -march=armv7-a
1924
endif
2025
endif
2126

2227
ifeq ($(CORE), ARMV6)
23-
CCOMMON_OPT += -marm -mfpu=vfp -mfloat-abi=hard -march=armv6
24-
FCOMMON_OPT += -marm -mfpu=vfp -mfloat-abi=hard -march=armv6
28+
CCOMMON_OPT += -mfpu=vfp -march=armv6
29+
FCOMMON_OPT += -mfpu=vfp -march=armv6
2530
endif
2631

2732

Makefile.system

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -482,6 +482,17 @@ endif
482482
ifeq ($(ARCH), arm)
483483
NO_BINARY_MODE = 1
484484
BINARY_DEFINED = 1
485+
486+
CCOMMON_OPT += -marm
487+
FCOMMON_OPT += -marm
488+
489+
ifeq ($(ARM_SOFTFP_ABI), 1)
490+
CCOMMON_OPT += -mfloat-abi=softfp -DARM_SOFTFP_ABI
491+
FCOMMON_OPT += -mfloat-abi=softfp -DARM_SOFTFP_ABI
492+
else
493+
CCOMMON_OPT += -mfloat-abi=hard
494+
FCOMMON_OPT += -mfloat-abi=hard
495+
endif
485496
endif
486497

487498
ifeq ($(ARCH), arm64)

common_arm.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,11 @@ static inline int blas_quickdivide(blasint x, blasint y){
111111

112112
#define PROFCODE
113113

114+
#ifdef __ARM_PCS
115+
//-mfloat-abi=softfp
116+
#define SOFT_FLOAT_ABI
117+
#endif
118+
114119
#endif
115120

116121

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}

kernel/arm/sgemm_kernel_4x4_vfpv3.S

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,14 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
5858
#define OLD_M r0
5959
#define OLD_N r1
6060
#define OLD_K r2
61+
62+
#ifdef ARM_SOFTFP_ABI
63+
#define OLD_ALPHA r3
64+
//#define OLD_A
65+
#else //hard
6166
#define OLD_A r3
6267
#define OLD_ALPHA s0
68+
#endif
6369

6470
/******************************************************
6571
* [fp, #-128] - [fp, #-64] is reserved
@@ -71,18 +77,28 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
7177
#define M [fp, #-256 ]
7278
#define N [fp, #-260 ]
7379
#define K [fp, #-264 ]
80+
81+
#ifndef ARM_SOFTFP_ABI
7482
#define A [fp, #-268 ]
83+
#endif
7584

7685
#define FP_ZERO [fp, #-240]
7786
#define FP_ZERO_0 [fp, #-240]
7887
#define FP_ZERO_1 [fp, #-236]
7988

8089
#define ALPHA [fp, #-280]
8190

91+
#ifdef ARM_SOFTFP_ABI
92+
#define A [fp, #4 ]
93+
#define B [fp, #8 ]
94+
#define C [fp, #12 ]
95+
#define OLD_LDC [fp, #16 ]
96+
#else //hard
8297
#define B [fp, #4 ]
8398
#define C [fp, #8 ]
8499
#define OLD_LDC [fp, #12 ]
85-
100+
#endif
101+
86102
#define I r0
87103
#define J r1
88104
#define L r2
@@ -854,9 +870,13 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
854870
str OLD_M, M
855871
str OLD_N, N
856872
str OLD_K, K
873+
874+
#ifdef ARM_SOFTFP_ABI
875+
str OLD_ALPHA, ALPHA
876+
#else //hard
857877
str OLD_A, A
858878
vstr OLD_ALPHA, ALPHA
859-
879+
#endif
860880
sub r3, fp, #128
861881
vstm r3, { s8 - s31} // store floating point registers
862882

0 commit comments

Comments
 (0)