Merge pull request #1226 from ashwinyes/develop_arm_clang_ual_fix
[platform/upstream/openblas.git] / kernel / arm / ztrmm_kernel_2x2_vfpv3.S
index 917ce61..3e6962f 100644 (file)
@@ -59,13 +59,27 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 #define N      [fp, #-260 ]
 #define K      [fp, #-264 ]
 
+#define FP_ZERO [fp, #-236]
+#define FP_ZERO_0 [fp, #-236]
+#define FP_ZERO_1 [fp, #-232]
+
 #define ALPHA_I        [fp, #-272]
 #define ALPHA_R        [fp, #-280]
 
+#if !defined(__ARM_PCS_VFP)
+#define OLD_ALPHAR_SOFTFP      [fp, #4]
+#define OLD_ALPHAI_SOFTFP      [fp, #12]
+#define OLD_A_SOFTFP   [fp, #20 ]
+#define B      [fp, #24 ]
+#define C      [fp, #28 ]
+#define OLD_LDC        [fp, #32 ]
+#define OFFSET  [fp, #36 ]
+#else
 #define B      [fp, #4 ]
 #define C      [fp, #8 ]
 #define OLD_LDC        [fp, #12 ]
 #define OFFSET  [fp, #16 ]
+#endif
 
 #define I      r0
 #define J      r1
@@ -84,15 +98,15 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 #define B_PRE  96
 #define C_PRE  64
 
-#if defined(NN) || defined(NT) || defined(TN) || defined(TT) 
+#if defined(NN) || defined(NT) || defined(TN) || defined(TT)
 
        #define FADD_R  fsubd
        #define FADD_I  faddd
 
-       #define FMAC_R1 fnmuld
-       #define FMAC_R2 fnmacd
+       #define FMAC_R1 vnmul.f64
+       #define FMAC_R2 vmls.f64
        #define FMAC_I1 fmuld
-       #define FMAC_I2 fnmacd
+       #define FMAC_I2 vmls.f64
 
 #elif defined(CN) || defined(CT)
 
@@ -101,7 +115,7 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
        #define FMAC_R1 fmuld
        #define FMAC_R2 fmacd
-       #define FMAC_I1 fnmuld
+       #define FMAC_I1 vnmul.f64
        #define FMAC_I2 fmacd
 
 #elif defined(NC) || defined(TC)
@@ -110,7 +124,7 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
        #define FADD_I  fsubd
 
        #define FMAC_R1 fmuld
-       #define FMAC_R2 fnmacd
+       #define FMAC_R2 vmls.f64
        #define FMAC_I1 fmuld
        #define FMAC_I2 fmacd
 
@@ -119,10 +133,10 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
        #define FADD_R  fsubd
        #define FADD_I  faddd
 
-       #define FMAC_R1 fnmuld
+       #define FMAC_R1 vnmul.f64
        #define FMAC_R2 fmacd
-       #define FMAC_I1 fnmuld
-       #define FMAC_I2 fnmacd
+       #define FMAC_I1 vnmul.f64
+       #define FMAC_I2 vmls.f64
 
 #endif
 
@@ -134,7 +148,7 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 .macro INIT2x2
 
-       vsub.f64                d16 , d16 , d16
+       fldd                    d16 , FP_ZERO
        vmov.f64                d17, d16
        vmov.f64                d18, d16
        vmov.f64                d19, d16
@@ -388,7 +402,7 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 .macro INIT1x2
 
-       vsub.f64                d16 , d16 , d16
+       fldd                    d16 , FP_ZERO
        vmov.f64                d17, d16
        vmov.f64                d20, d16
        vmov.f64                d21, d16
@@ -566,7 +580,7 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 .macro INIT2x1
 
-       vsub.f64                d16 , d16 , d16
+       fldd                    d16 , FP_ZERO
        vmov.f64                d17, d16
        vmov.f64                d18, d16
        vmov.f64                d19, d16
@@ -743,7 +757,7 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 .macro INIT1x1
 
-       vsub.f64                d16 , d16 , d16
+       fldd                    d16 , FP_ZERO
        vmov.f64                d17, d16
        vmov.f64                d24, d16
        vmov.f64                d25, d16
@@ -879,6 +893,11 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
        add     fp, sp, #24
        sub     sp, sp, #STACKSIZE                              // reserve stack
 
+#if !defined(__ARM_PCS_VFP)
+       vldr    OLD_ALPHA_R, OLD_ALPHAR_SOFTFP
+       vldr    OLD_ALPHA_I, OLD_ALPHAI_SOFTFP
+       ldr     OLD_A, OLD_A_SOFTFP
+#endif
        str     OLD_M, M
        str     OLD_N, N
        str     OLD_K, K
@@ -889,6 +908,10 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
        sub     r3, fp, #128
        vstm    r3, { d8 - d15}                                 // store floating point registers
 
+        movs    r4, #0
+        str     r4, FP_ZERO
+        str     r4, FP_ZERO_1
+
        ldr     r3, OLD_LDC
        lsl     r3, r3, #4                                      // ldc = ldc * 8 * 2
        str     r3, LDC
@@ -906,7 +929,7 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
        ble     _L1_BEGIN
 
 _L2_BEGIN:
-       
+
        ldr     CO1, C                                          // CO1 = C
        ldr     r4 , LDC
        lsl     r4 , r4 , #1                                    // LDC * 2
@@ -1011,7 +1034,7 @@ _L2_M2_22:
 
        b        _L2_M2_44
 
-       
+
 _L2_M2_30:
        tst     L, #3
        ble     _L2_M2_40
@@ -1076,7 +1099,7 @@ _L2_M2_46:
 
        subs    L, L, #1
        bne     _L2_M2_46
-       
+
 _L2_M2_100:
 
        SAVE2x2
@@ -1165,10 +1188,10 @@ _L2_M1_22:
 
        subs    L, L, #1
        bgt     _L2_M1_22
-       
+
 
 _L2_M1_40:
-       
+
        ands    L , K1, #7                                      // L = L % 8
        ble     _L2_M1_100
 
@@ -1178,7 +1201,7 @@ _L2_M1_42:
 
        subs    L, L, #1
        bgt     _L2_M1_42
-       
+
 _L2_M1_100:
 
        SAVE1x2
@@ -1209,7 +1232,7 @@ _L2_END:
        lsl     r4, r4, #5                                      // k * 2 * 8 * 2
        add     r3, r3, r4                                      // B = B + K * 4 * 8
        mov     BC, r3
-       
+
 #if !defined(LEFT)
         ldr     r3 , KK
         add     r3 , r3 , #2                                    // number of values in BO
@@ -1230,7 +1253,7 @@ _L1_BEGIN:
        tst     J , #1
        ble     _L999
 
-       
+
        ldr     CO1, C                                          // CO1 = C
        ldr     r4 , LDC
        add     r3 , r4, CO1
@@ -1329,7 +1352,7 @@ _L1_M2_22:
 
        b        _L1_M2_44
 
-       
+
 _L1_M2_30:
        tst     L, #3
        ble     _L1_M2_40
@@ -1394,7 +1417,7 @@ _L1_M2_46:
 
        subs    L, L, #1
        bne     _L1_M2_46
-       
+
 _L1_M2_100:
 
        SAVE2x1
@@ -1482,10 +1505,10 @@ _L1_M1_22:
 
        subs    L, L, #1
        bgt     _L1_M1_22
-       
+
 
 _L1_M1_40:
-       
+
        ands    L , K1, #7                                      // L = L % 8
        ble     _L1_M1_100
 
@@ -1495,7 +1518,7 @@ _L1_M1_42:
 
        subs    L, L, #1
        bgt     _L1_M1_42
-       
+
 _L1_M1_100:
 
        SAVE1x1