drc: svp: some missed r9 handling for apple
authornotaz <notasas@gmail.com>
Mon, 29 Jul 2013 23:27:44 +0000 (02:27 +0300)
committernotaz <notasas@gmail.com>
Mon, 29 Jul 2013 23:27:44 +0000 (02:27 +0300)
pico/carthw/svp/compiler.c

index 0e616fd..b31197c 100644 (file)
@@ -689,6 +689,18 @@ static int tr_aop_ssp2arm(int op)
        return 0;
 }
 
+#ifdef __MACH__
+/* spacial version of call for calling C needed on ios, since we use r9.. */
+static void emith_call_c_func(void *target)
+{
+       EOP_STMFD_SP(A_R7M|A_R9M);
+       emith_call(target);
+       EOP_LDMFD_SP(A_R7M|A_R9M);
+}
+#else
+#define emith_call_c_func emith_call
+#endif
+
 // -----------------------------------------------------
 
 //@ r4:  XXYY
@@ -839,7 +851,7 @@ static void tr_PMX_to_r0(int reg)
        tr_flush_dirty_ST();
        //tr_flush_dirty_pmcrs();
        tr_mov16(0, reg);
-       emith_call(ssp_pm_read);
+       emith_call_c_func(ssp_pm_read);
        hostreg_clear();
 }
 
@@ -1080,7 +1092,7 @@ static void tr_r0_to_PMX(int reg)
        tr_flush_dirty_ST();
        //tr_flush_dirty_pmcrs();
        tr_mov16(1, reg);
-       emith_call(ssp_pm_write);
+       emith_call_c_func(ssp_pm_write);
        hostreg_clear();
 }