Support ARM SOFTFP ABI for saxpy, sdot, snrm2, sscal, sgemv, sger.

This commit is contained in:
Zhang Xianyi 2017-03-20 17:39:25 +08:00
parent 90e02ccf68
commit b5c96fcfcd
5 changed files with 69 additions and 4 deletions

View File

@ -38,11 +38,18 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#define STACKSIZE 256 #define STACKSIZE 256
#ifndef ARM_SOFTFP_ABI
//hard
#define OLD_INC_X [fp, #0 ] #define OLD_INC_X [fp, #0 ]
#define OLD_Y [fp, #4 ] #define OLD_Y [fp, #4 ]
#define OLD_INC_Y [fp, #8 ] #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 N r0
#define Y r1 #define Y r1
#define INC_X r2 #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 add fp, sp, #8
sub sp, sp, #STACKSIZE // reserve stack 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 INC_X , OLD_INC_X
ldr Y, OLD_Y ldr Y, OLD_Y
ldr INC_Y , OLD_INC_Y ldr INC_Y , OLD_INC_Y

View File

@ -38,12 +38,25 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#define STACKSIZE 256 #define STACKSIZE 256
#ifndef ARM_SOFTFP_ABI
//hard
#define OLD_LDA [fp, #0 ] #define OLD_LDA [fp, #0 ]
#define X [fp, #4 ] #define X [fp, #4 ]
#define OLD_INC_X [fp, #8 ] #define OLD_INC_X [fp, #8 ]
#define Y [fp, #12 ] #define Y [fp, #12 ]
#define OLD_INC_Y [fp, #16 ] #define OLD_INC_Y [fp, #16 ]
#define OLD_A r3 #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 OLD_M r0
#define AO1 r0 #define AO1 r0
@ -552,9 +565,18 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
cmp N, #0 cmp N, #0
ble gemvn_kernel_L999 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_A, A
str OLD_M, M str OLD_M, M
ldr INC_X , OLD_INC_X ldr INC_X , OLD_INC_X
ldr INC_Y , OLD_INC_Y ldr INC_Y , OLD_INC_Y

View File

@ -38,12 +38,25 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#define STACKSIZE 256 #define STACKSIZE 256
#ifndef ARM_SOFTFP_ABI
//hard abi
#define OLD_LDA [fp, #0 ] #define OLD_LDA [fp, #0 ]
#define X [fp, #4 ] #define X [fp, #4 ]
#define OLD_INC_X [fp, #8 ] #define OLD_INC_X [fp, #8 ]
#define Y [fp, #12 ] #define Y [fp, #12 ]
#define OLD_INC_Y [fp, #16 ] #define OLD_INC_Y [fp, #16 ]
#define OLD_A r3 #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 OLD_N r1
#define M r0 #define M r0
@ -505,6 +518,13 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
cmp OLD_N, #0 cmp OLD_N, #0
ble gemvt_kernel_L999 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_A, A
str OLD_N, N str OLD_N, N

View File

@ -503,6 +503,9 @@ nrm2_kernel_L999:
#else #else
vsqrt.f32 s1, s1 vsqrt.f32 s1, s1
vmul.f32 s0, s0, s1 vmul.f32 s0, s0, s1
#ifdef ARM_SOFTFP_ABI
vmov r0, s0
#endif
#endif #endif
bx lr bx lr

View File

@ -332,10 +332,16 @@ sdot_kernel_L999:
vadd.f64 d0 , d0, d1 // set return value vadd.f64 d0 , d0, d1 // set return value
#ifdef ARM_SOFTFP_ABI
vmov r0, r1, d0
#endif
#else #else
vadd.f32 s0 , s0, s1 // set return value vadd.f32 s0 , s0, s1 // set return value
#ifdef ARM_SOFTFP_ABI
vmov r0, s0
#endif
#endif #endif
sub sp, fp, #24 sub sp, fp, #24
pop {r4 - r9, fp} pop {r4 - r9, fp}