@@ -1,27 +1,32 @@ | |||
# ifeq logical or | |||
#ifeq logical or | |||
ifeq ($(CORE), $(filter $(CORE),CORTEXA9 CORTEXA15)) | |||
ifeq ($(OSNAME), Android) | |||
CCOMMON_OPT += -marm -mfpu=neon -mfloat-abi=hard -march=armv7-a | |||
FCOMMON_OPT += -marm -mfpu=neon -mfloat-abi=hard -march=armv7-a | |||
CCOMMON_OPT += -mfpu=neon -march=armv7-a | |||
FCOMMON_OPT += -mfpu=neon -march=armv7-a | |||
else | |||
CCOMMON_OPT += -marm -mfpu=vfpv3 -mfloat-abi=hard -march=armv7-a | |||
FCOMMON_OPT += -marm -mfpu=vfpv3 -mfloat-abi=hard -march=armv7-a | |||
CCOMMON_OPT += -mfpu=vfpv3 -march=armv7-a | |||
FCOMMON_OPT += -mfpu=vfpv3 -march=armv7-a | |||
endif | |||
endif | |||
ifeq ($(CORE), ARMV7) | |||
ifeq ($(OSNAME), Android) | |||
CCOMMON_OPT += -marm -mfpu=neon -mfloat-abi=hard -march=armv7-a -Wl,--no-warn-mismatch | |||
FCOMMON_OPT += -marm -mfpu=neon -mfloat-abi=hard -march=armv7-a -Wl,--no-warn-mismatch | |||
ifeq ($(ARM_SOFTFP_ABI), 1) | |||
CCOMMON_OPT += -mfpu=neon -march=armv7-a | |||
FCOMMON_OPT += -mfpu=neon -march=armv7-a | |||
else | |||
CCOMMON_OPT += -marm -mfpu=vfpv3 -mfloat-abi=hard -march=armv7-a | |||
FCOMMON_OPT += -marm -mfpu=vfpv3 -mfloat-abi=hard -march=armv7-a | |||
CCOMMON_OPT += -mfpu=neon -march=armv7-a -Wl,--no-warn-mismatch | |||
FCOMMON_OPT += -mfpu=neon -march=armv7-a -Wl,--no-warn-mismatch | |||
endif | |||
else | |||
CCOMMON_OPT += -mfpu=vfpv3 -march=armv7-a | |||
FCOMMON_OPT += -mfpu=vfpv3 -march=armv7-a | |||
endif | |||
endif | |||
ifeq ($(CORE), ARMV6) | |||
CCOMMON_OPT += -marm -mfpu=vfp -mfloat-abi=hard -march=armv6 | |||
FCOMMON_OPT += -marm -mfpu=vfp -mfloat-abi=hard -march=armv6 | |||
CCOMMON_OPT += -mfpu=vfp -march=armv6 | |||
FCOMMON_OPT += -mfpu=vfp -march=armv6 | |||
endif | |||
@@ -482,6 +482,17 @@ endif | |||
ifeq ($(ARCH), arm) | |||
NO_BINARY_MODE = 1 | |||
BINARY_DEFINED = 1 | |||
CCOMMON_OPT += -marm | |||
FCOMMON_OPT += -marm | |||
ifeq ($(ARM_SOFTFP_ABI), 1) | |||
CCOMMON_OPT += -mfloat-abi=softfp -DARM_SOFTFP_ABI | |||
FCOMMON_OPT += -mfloat-abi=softfp -DARM_SOFTFP_ABI | |||
else | |||
CCOMMON_OPT += -mfloat-abi=hard | |||
FCOMMON_OPT += -mfloat-abi=hard | |||
endif | |||
endif | |||
ifeq ($(ARCH), arm64) | |||
@@ -111,6 +111,11 @@ REALNAME: | |||
#define PROFCODE | |||
#ifdef __ARM_PCS | |||
//-mfloat-abi=softfp | |||
#define SOFT_FLOAT_ABI | |||
#endif | |||
#endif | |||
@@ -38,11 +38,18 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
#define STACKSIZE 256 | |||
#ifndef ARM_SOFTFP_ABI | |||
//hard | |||
#define OLD_INC_X [fp, #0 ] | |||
#define OLD_Y [fp, #4 ] | |||
#define OLD_INC_Y [fp, #8 ] | |||
#else | |||
#define OLD_X [fp, #0 ] | |||
#define OLD_INC_X [fp, #4 ] | |||
#define OLD_Y [fp, #8 ] | |||
#define OLD_INC_Y [fp, #12 ] | |||
#endif | |||
#define N r0 | |||
#define Y r1 | |||
#define INC_X r2 | |||
@@ -363,6 +370,13 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
add fp, sp, #8 | |||
sub sp, sp, #STACKSIZE // reserve stack | |||
#ifdef ARM_SOFTFP_ABI | |||
#ifndef DOUBLE | |||
vmov s0, r3 //move alpha to s0 | |||
ldr X, OLD_X | |||
#endif | |||
#endif | |||
ldr INC_X , OLD_INC_X | |||
ldr Y, OLD_Y | |||
ldr INC_Y , OLD_INC_Y | |||
@@ -38,12 +38,25 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
#define STACKSIZE 256 | |||
#ifndef ARM_SOFTFP_ABI | |||
//hard | |||
#define OLD_LDA [fp, #0 ] | |||
#define X [fp, #4 ] | |||
#define OLD_INC_X [fp, #8 ] | |||
#define Y [fp, #12 ] | |||
#define OLD_INC_Y [fp, #16 ] | |||
#define OLD_A r3 | |||
#else | |||
#define OLD_A_SOFTFP [fp, #0 ] | |||
#define OLD_LDA [fp, #4 ] | |||
#define X [fp, #8 ] | |||
#define OLD_INC_X [fp, #12 ] | |||
#define Y [fp, #16 ] | |||
#define OLD_INC_Y [fp, #20 ] | |||
#define OLD_ALPHA r3 | |||
#define OLD_A r3 | |||
#endif | |||
#define OLD_M r0 | |||
#define AO1 r0 | |||
@@ -552,9 +565,18 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
cmp N, #0 | |||
ble gemvn_kernel_L999 | |||
#ifndef DOUBLE | |||
#ifdef ARM_SOFTFP_ABI | |||
vmov s0, OLD_ALPHA | |||
ldr OLD_A, OLD_A_SOFTFP | |||
#endif | |||
#endif | |||
str OLD_A, A | |||
str OLD_M, M | |||
ldr INC_X , OLD_INC_X | |||
ldr INC_Y , OLD_INC_Y | |||
@@ -38,12 +38,25 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
#define STACKSIZE 256 | |||
#ifndef ARM_SOFTFP_ABI | |||
//hard abi | |||
#define OLD_LDA [fp, #0 ] | |||
#define X [fp, #4 ] | |||
#define OLD_INC_X [fp, #8 ] | |||
#define Y [fp, #12 ] | |||
#define OLD_INC_Y [fp, #16 ] | |||
#define OLD_A r3 | |||
#else | |||
#define OLD_A_SOFTFP [fp, #0 ] | |||
#define OLD_LDA [fp, #4 ] | |||
#define X [fp, #8 ] | |||
#define OLD_INC_X [fp, #12 ] | |||
#define Y [fp, #16 ] | |||
#define OLD_INC_Y [fp, #20 ] | |||
#define OLD_ALPHA r3 | |||
#define OLD_A r3 | |||
#endif | |||
#define OLD_N r1 | |||
#define M r0 | |||
@@ -505,6 +518,13 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
cmp OLD_N, #0 | |||
ble gemvt_kernel_L999 | |||
#ifndef DOUBLE | |||
#ifdef ARM_SOFTFP_ABI | |||
vmov s0, OLD_ALPHA | |||
ldr OLD_A, OLD_A_SOFTFP | |||
#endif | |||
#endif | |||
str OLD_A, A | |||
str OLD_N, N | |||
@@ -503,6 +503,9 @@ nrm2_kernel_L999: | |||
#else | |||
vsqrt.f32 s1, s1 | |||
vmul.f32 s0, s0, s1 | |||
#ifdef ARM_SOFTFP_ABI | |||
vmov r0, s0 | |||
#endif | |||
#endif | |||
bx lr | |||
@@ -332,10 +332,16 @@ sdot_kernel_L999: | |||
vadd.f64 d0 , d0, d1 // set return value | |||
#ifdef ARM_SOFTFP_ABI | |||
vmov r0, r1, d0 | |||
#endif | |||
#else | |||
vadd.f32 s0 , s0, s1 // set return value | |||
#ifdef ARM_SOFTFP_ABI | |||
vmov r0, s0 | |||
#endif | |||
#endif | |||
sub sp, fp, #24 | |||
pop {r4 - r9, fp} | |||
@@ -58,8 +58,14 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
#define OLD_M r0 | |||
#define OLD_N r1 | |||
#define OLD_K r2 | |||
#ifdef ARM_SOFTFP_ABI | |||
#define OLD_ALPHA r3 | |||
//#define OLD_A | |||
#else //hard | |||
#define OLD_A r3 | |||
#define OLD_ALPHA s0 | |||
#endif | |||
/****************************************************** | |||
* [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 N [fp, #-260 ] | |||
#define K [fp, #-264 ] | |||
#ifndef ARM_SOFTFP_ABI | |||
#define A [fp, #-268 ] | |||
#endif | |||
#define FP_ZERO [fp, #-240] | |||
#define FP_ZERO_0 [fp, #-240] | |||
@@ -79,10 +88,17 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
#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 C [fp, #8 ] | |||
#define OLD_LDC [fp, #12 ] | |||
#endif | |||
#define I r0 | |||
#define J r1 | |||
#define L r2 | |||
@@ -854,9 +870,13 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
str OLD_M, M | |||
str OLD_N, N | |||
str OLD_K, K | |||
#ifdef ARM_SOFTFP_ABI | |||
str OLD_ALPHA, ALPHA | |||
#else //hard | |||
str OLD_A, A | |||
vstr OLD_ALPHA, ALPHA | |||
#endif | |||
sub r3, fp, #128 | |||
vstm r3, { s8 - s31} // store floating point registers | |||