diff --git a/kernel/arm/axpy_vfp.S b/kernel/arm/axpy_vfp.S index acc575707..8e5334f62 100644 --- a/kernel/arm/axpy_vfp.S +++ b/kernel/arm/axpy_vfp.S @@ -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 diff --git a/kernel/arm/gemv_n_vfpv3.S b/kernel/arm/gemv_n_vfpv3.S index e7938e81c..93bf23e49 100644 --- a/kernel/arm/gemv_n_vfpv3.S +++ b/kernel/arm/gemv_n_vfpv3.S @@ -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 diff --git a/kernel/arm/gemv_t_vfp.S b/kernel/arm/gemv_t_vfp.S index c3b4e0525..816be54ff 100644 --- a/kernel/arm/gemv_t_vfp.S +++ b/kernel/arm/gemv_t_vfp.S @@ -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 diff --git a/kernel/arm/nrm2_vfpv3.S b/kernel/arm/nrm2_vfpv3.S index f676f514a..7af966895 100644 --- a/kernel/arm/nrm2_vfpv3.S +++ b/kernel/arm/nrm2_vfpv3.S @@ -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 diff --git a/kernel/arm/sdot_vfp.S b/kernel/arm/sdot_vfp.S index aa6748c9f..f3abdc197 100644 --- a/kernel/arm/sdot_vfp.S +++ b/kernel/arm/sdot_vfp.S @@ -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}