aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornotaz2013-04-02 04:45:05 +0300
committernotaz2013-04-02 04:45:05 +0300
commit5df0e313724a202a47f088f1cb81f4ccb0910b15 (patch)
treece391c50cf08324a702b4099605c8afeadfda94d
parent4d6467383217647e3fbc58ab9213a31c0f3bd8c9 (diff)
downloadpcsx_rearmed-5df0e313724a202a47f088f1cb81f4ccb0910b15.tar.gz
pcsx_rearmed-5df0e313724a202a47f088f1cb81f4ccb0910b15.tar.bz2
pcsx_rearmed-5df0e313724a202a47f088f1cb81f4ccb0910b15.zip
drc: handle more calling conventions
-rw-r--r--include/arm_features.h5
-rw-r--r--libpcsxcore/new_dynarec/linkage_arm.S26
2 files changed, 18 insertions, 13 deletions
diff --git a/include/arm_features.h b/include/arm_features.h
index abfd876..fdec522 100644
--- a/include/arm_features.h
+++ b/include/arm_features.h
@@ -34,6 +34,8 @@
.type name, %function; \
name
+#define EXTRA_UNSAVED_REGS
+
#else
#define ESYM(name) _##name
@@ -42,6 +44,9 @@
name: \
ESYM(name)
+// r7 is preserved, but add it for EABI alignment..
+#define EXTRA_UNSAVED_REGS r7, r9,
+
#endif
#endif /* __ARM_FEATURES_H__ */
diff --git a/libpcsxcore/new_dynarec/linkage_arm.S b/libpcsxcore/new_dynarec/linkage_arm.S
index 4de406a..d79b09d 100644
--- a/libpcsxcore/new_dynarec/linkage_arm.S
+++ b/libpcsxcore/new_dynarec/linkage_arm.S
@@ -573,72 +573,72 @@ FUNCTION(new_dyna_leave):
.align 2
FUNCTION(invalidate_addr_r0):
- stmia fp, {r0, r1, r2, r3, r12, lr}
+ stmia fp, {r0, r1, r2, r3, EXTRA_UNSAVED_REGS r12, lr}
b invalidate_addr_call
.size invalidate_addr_r0, .-invalidate_addr_r0
.align 2
FUNCTION(invalidate_addr_r1):
- stmia fp, {r0, r1, r2, r3, r12, lr}
+ stmia fp, {r0, r1, r2, r3, EXTRA_UNSAVED_REGS r12, lr}
mov r0, r1
b invalidate_addr_call
.size invalidate_addr_r1, .-invalidate_addr_r1
.align 2
FUNCTION(invalidate_addr_r2):
- stmia fp, {r0, r1, r2, r3, r12, lr}
+ stmia fp, {r0, r1, r2, r3, EXTRA_UNSAVED_REGS r12, lr}
mov r0, r2
b invalidate_addr_call
.size invalidate_addr_r2, .-invalidate_addr_r2
.align 2
FUNCTION(invalidate_addr_r3):
- stmia fp, {r0, r1, r2, r3, r12, lr}
+ stmia fp, {r0, r1, r2, r3, EXTRA_UNSAVED_REGS r12, lr}
mov r0, r3
b invalidate_addr_call
.size invalidate_addr_r3, .-invalidate_addr_r3
.align 2
FUNCTION(invalidate_addr_r4):
- stmia fp, {r0, r1, r2, r3, r12, lr}
+ stmia fp, {r0, r1, r2, r3, EXTRA_UNSAVED_REGS r12, lr}
mov r0, r4
b invalidate_addr_call
.size invalidate_addr_r4, .-invalidate_addr_r4
.align 2
FUNCTION(invalidate_addr_r5):
- stmia fp, {r0, r1, r2, r3, r12, lr}
+ stmia fp, {r0, r1, r2, r3, EXTRA_UNSAVED_REGS r12, lr}
mov r0, r5
b invalidate_addr_call
.size invalidate_addr_r5, .-invalidate_addr_r5
.align 2
FUNCTION(invalidate_addr_r6):
- stmia fp, {r0, r1, r2, r3, r12, lr}
+ stmia fp, {r0, r1, r2, r3, EXTRA_UNSAVED_REGS r12, lr}
mov r0, r6
b invalidate_addr_call
.size invalidate_addr_r6, .-invalidate_addr_r6
.align 2
FUNCTION(invalidate_addr_r7):
- stmia fp, {r0, r1, r2, r3, r12, lr}
+ stmia fp, {r0, r1, r2, r3, EXTRA_UNSAVED_REGS r12, lr}
mov r0, r7
b invalidate_addr_call
.size invalidate_addr_r7, .-invalidate_addr_r7
.align 2
FUNCTION(invalidate_addr_r8):
- stmia fp, {r0, r1, r2, r3, r12, lr}
+ stmia fp, {r0, r1, r2, r3, EXTRA_UNSAVED_REGS r12, lr}
mov r0, r8
b invalidate_addr_call
.size invalidate_addr_r8, .-invalidate_addr_r8
.align 2
FUNCTION(invalidate_addr_r9):
- stmia fp, {r0, r1, r2, r3, r12, lr}
+ stmia fp, {r0, r1, r2, r3, EXTRA_UNSAVED_REGS r12, lr}
mov r0, r9
b invalidate_addr_call
.size invalidate_addr_r9, .-invalidate_addr_r9
.align 2
FUNCTION(invalidate_addr_r10):
- stmia fp, {r0, r1, r2, r3, r12, lr}
+ stmia fp, {r0, r1, r2, r3, EXTRA_UNSAVED_REGS r12, lr}
mov r0, r10
b invalidate_addr_call
.size invalidate_addr_r10, .-invalidate_addr_r10
.align 2
FUNCTION(invalidate_addr_r12):
- stmia fp, {r0, r1, r2, r3, r12, lr}
+ stmia fp, {r0, r1, r2, r3, EXTRA_UNSAVED_REGS r12, lr}
mov r0, r12
.size invalidate_addr_r12, .-invalidate_addr_r12
.align 2
@@ -648,7 +648,7 @@ invalidate_addr_call:
cmp r0, r12
cmpcs lr, r0
blcc invalidate_addr
- ldmia fp, {r0, r1, r2, r3, r12, pc}
+ ldmia fp, {r0, r1, r2, r3, EXTRA_UNSAVED_REGS r12, pc}
.size invalidate_addr_call, .-invalidate_addr_call
.align 2