Support ARM softfp ABI for sgemm on ARMV7.

make ARM_SOFTFP_ABI=1
This commit is contained in:
Zhang Xianyi 2017-03-06 22:16:13 +08:00
parent 503dcbfde6
commit 90e02ccf68
3 changed files with 29 additions and 9 deletions

View File

@ -1,4 +1,4 @@
ifeq logical or #ifeq logical or
ifeq ($(CORE), $(filter $(CORE),CORTEXA9 CORTEXA15)) ifeq ($(CORE), $(filter $(CORE),CORTEXA9 CORTEXA15))
ifeq ($(OSNAME), Android) ifeq ($(OSNAME), Android)
CCOMMON_OPT += -mfpu=neon -march=armv7-a CCOMMON_OPT += -mfpu=neon -march=armv7-a
@ -11,12 +11,12 @@ endif
ifeq ($(CORE), ARMV7) ifeq ($(CORE), ARMV7)
ifeq ($(OSNAME), Android) ifeq ($(OSNAME), Android)
ifeq ($(ARM_SOFTFP), 1) ifeq ($(ARM_SOFTFP_ABI), 1)
CCOMMON_OPT += -mfpu=neon -march=armv7-a CCOMMON_OPT += -mfpu=neon -march=armv7-a
FCOMMON_OPT += -mfpu=neon -march=armv7-a FCOMMON_OPT += -mfpu=neon -march=armv7-a
else else
CCOMMON_OPT += -marm -mfpu=neon -mfloat-abi=hard -march=armv7-a -Wl,--no-warn-mismatch CCOMMON_OPT += -mfpu=neon -march=armv7-a -Wl,--no-warn-mismatch
FCOMMON_OPT += -marm -mfpu=neon -mfloat-abi=hard -march=armv7-a -Wl,--no-warn-mismatch FCOMMON_OPT += -mfpu=neon -march=armv7-a -Wl,--no-warn-mismatch
endif endif
else else
CCOMMON_OPT += -mfpu=vfpv3 -march=armv7-a CCOMMON_OPT += -mfpu=vfpv3 -march=armv7-a

View File

@ -480,9 +480,9 @@ BINARY_DEFINED = 1
CCOMMON_OPT += -marm CCOMMON_OPT += -marm
FCOMMON_OPT += -marm FCOMMON_OPT += -marm
ifeq ($(ARM_SOFT_FLOAT_ABI), 1) ifeq ($(ARM_SOFTFP_ABI), 1)
CCOMMON_OPT += -mfloat-abi=softfp CCOMMON_OPT += -mfloat-abi=softfp -DARM_SOFTFP_ABI
FCOMMON_OPT += -mfloat-abi=softfp FCOMMON_OPT += -mfloat-abi=softfp -DARM_SOFTFP_ABI
else else
CCOMMON_OPT += -mfloat-abi=hard CCOMMON_OPT += -mfloat-abi=hard
FCOMMON_OPT += -mfloat-abi=hard FCOMMON_OPT += -mfloat-abi=hard

View File

@ -58,8 +58,14 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#define OLD_M r0 #define OLD_M r0
#define OLD_N r1 #define OLD_N r1
#define OLD_K r2 #define OLD_K r2
#ifdef ARM_SOFTFP_ABI
#define OLD_ALPHA r3
//#define OLD_A
#else //hard
#define OLD_A r3 #define OLD_A r3
#define OLD_ALPHA s0 #define OLD_ALPHA s0
#endif
/****************************************************** /******************************************************
* [fp, #-128] - [fp, #-64] is reserved * [fp, #-128] - [fp, #-64] is reserved
@ -71,7 +77,10 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#define M [fp, #-256 ] #define M [fp, #-256 ]
#define N [fp, #-260 ] #define N [fp, #-260 ]
#define K [fp, #-264 ] #define K [fp, #-264 ]
#ifndef ARM_SOFTFP_ABI
#define A [fp, #-268 ] #define A [fp, #-268 ]
#endif
#define FP_ZERO [fp, #-240] #define FP_ZERO [fp, #-240]
#define FP_ZERO_0 [fp, #-240] #define FP_ZERO_0 [fp, #-240]
@ -79,9 +88,16 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#define ALPHA [fp, #-280] #define ALPHA [fp, #-280]
#ifdef ARM_SOFTFP_ABI
#define A [fp, #4 ]
#define B [fp, #8 ]
#define C [fp, #12 ]
#define OLD_LDC [fp, #16 ]
#else //hard
#define B [fp, #4 ] #define B [fp, #4 ]
#define C [fp, #8 ] #define C [fp, #8 ]
#define OLD_LDC [fp, #12 ] #define OLD_LDC [fp, #12 ]
#endif
#define I r0 #define I r0
#define J r1 #define J r1
@ -854,9 +870,13 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
str OLD_M, M str OLD_M, M
str OLD_N, N str OLD_N, N
str OLD_K, K str OLD_K, K
#ifdef ARM_SOFTFP_ABI
str OLD_ALPHA, ALPHA
#else //hard
str OLD_A, A str OLD_A, A
vstr OLD_ALPHA, ALPHA vstr OLD_ALPHA, ALPHA
#endif
sub r3, fp, #128 sub r3, fp, #128
vstm r3, { s8 - s31} // store floating point registers vstm r3, { s8 - s31} // store floating point registers