drc: starting arm64 support
[pcsx_rearmed.git] / libpcsxcore / gte_neon.S
index d83cf23..7d97ff3 100644 (file)
@@ -5,29 +5,13 @@
  * See the COPYING file in the top-level directory.
  */
 
+#include "arm_features.h"
+#include "new_dynarec/linkage_offsets.h"
 
 .syntax unified
-
-.bss
-.align 6 @ cacheline
-
-scratch:
-.rept 8*8*2/4
-    .word 0
-.endr
-
 .text
 .align 2
 
-.macro ldr_scratch rd
-#ifndef __PIC__
-    movw        \rd, #:lower16:scratch
-    movt        \rd, #:upper16:scratch
-#else
-    ldr         \rd, =scratch
-#endif
-.endm
-
 @ XXX: gteMAC calc shouldn't be saturating, but it is here
 
 @ approximate gteMAC|123 flags
@@ -145,12 +129,11 @@ scratch:
     vqmovn.s32  d10, q4        @ gteIR|123; losing 2 cycles?
 .endm
 
-.global gteRTPS_neon @ r0=CP2 (d,c),
-gteRTPS_neon:
+FUNCTION(gteRTPS_neon): @ r0=CP2 (d,c),
     push        {r4-r6,lr}
 
 @    fmrx        r4, fpscr      @ vmrs? at least 40 cycle hit
-    ldr_scratch r1
+    ldr                r1, [r0, #LO_cop2_to_scratch_buf]
     mov         r12, #0
 
     vldmia      r0, {d8}       @ VXYZ(0)
@@ -299,16 +282,15 @@ gteRTPS_neon:
  
 
 
-.global gteRTPT_neon @ r0=CP2 (d,c),
-gteRTPT_neon:
+FUNCTION(gteRTPT_neon): @ r0=CP2 (d,c),
     push        {r4-r11,lr}
 
-    ldr_scratch r1
+    ldr                r1, [r0, #LO_cop2_to_scratch_buf]
     mov         r12, #0
 
     rtpx_preload
 
-    vmov.i32    d22, #0x7fffffff
+    vmvn.i32    d22, #0x80000000 @ #0x7fffffff
     vmov.i32    d23, #0x80000000
     mov         r3, #3         @ counter
     mov         r2, r0         @ VXYZ(0)
@@ -546,8 +528,7 @@ gteRTPT_neon:
 @ r4,r5 = VXYZ(v) packed
 @ r6 = &MX11(mx)
 @ r7 = &CV1(cv)
-.global gteMVMVA_part_neon
-gteMVMVA_part_neon:
+FUNCTION(gteMVMVA_part_neon):
     uxth        r5, r5
     vmov.32     d8[0], r4
     vmov.32     d8[1], r5       @ VXYZ(v)
@@ -594,8 +575,7 @@ gteMVMVA_part_neon:
 
 
 @ get flags after gteMVMVA_part_neon operation
-.global gteMACtoIR_flags_neon @ r0=CP2 (d,c), r1=lm
-gteMACtoIR_flags_neon:
+FUNCTION(gteMACtoIR_flags_neon): @ r0=CP2 (d,c), r1=lm
     push        {r4,r5,lr}
     tst         r1, r1         @ lm
     mov         lr, #0         @ gteFLAG