diff mc-code-arm.c @ 935:7672a37e7545 default tip

Raspbery PI ARM support begin
author kono
date Sat, 24 Dec 2016 03:02:57 +0000
parents 35b339b36c88
children
line wrap: on
line diff
--- a/mc-code-arm.c	Sat Dec 24 11:00:47 2016 +0900
+++ b/mc-code-arm.c	Sat Dec 24 03:02:57 2016 +0000
@@ -227,15 +227,21 @@
     "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", 
     "r8", "r9", "sl", "lr", "ip", "fp", "sp", "pc",
     "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7"
+    // "s0", "s1", "s2", "s3", "s4", "s5", "s6", "s7",
+    // "s8", "s9", "s10", "s11", "s12", "s13", "s14", "s15",
+    "s0", "s2", "s4", "s6", "s8", "s10","s12", "s14", 
+    "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7",
 }; 
 
 #define register_name(i)  reg_name[i]
 #define fregister_name(i) reg_name[i]
+#define dregister_name(i) reg_name[i+8]
 #define lregister_name_low(i) reg_name[regv_l(i)]
 #define lregister_name_high(i) reg_name[regv_h(i)]
 
 char *rn(int i) { return register_name(i); }
 char *fn(int i) { return fregister_name(i); }
+char *dn(int i) { return dregister_name(i+8); }
 char *lln(int i) { return lregister_name_low(i); }
 char *lhn(int i) { return lregister_name_high(i); }
 int ll(int i) { return regv_l(i); }
@@ -3485,14 +3491,14 @@
         set_freg(RET_FREGISTER,1);
 #endif
         printf("\tmov\t%s, %s\n",register_name(
-                cadr(get_input_register_var(1,0,1,0));
+                cadr(get_input_register_var(1,0,0))
                 ),register_name(REG_fp));
     } else if (cadr(fnptr->ty)==DOUBLE) {
 #if FLOAT_CODE
         creg = lreg = cadr(get_input_dregister_var(0,0,1,1));
         set_dreg(RET_DREGISTER,1);
         printf("\tmov\t%s, %s\n",register_name(
-                cadr(get_input_register_var(2,0,1,0));
+                cadr(get_input_register_var(2,0,0))
                 ),register_name(REG_fp));
 #endif
     } else if (cadr(fnptr->ty)>0&&(
@@ -3504,7 +3510,7 @@
         printf("\tsub\tr1, r2, fp\n");
         printf("\tldr\tr0, [fp, #%d]\n",(my_func_args-1)*SIZE_OF_INT);
         printf("\tmov\t%s, %s\n",register_name(
-                cadr(get_input_register_var(1,0,1,0));
+                cadr(get_input_register_var(1,0,0))
                 ),register_name(REG_fp));
         // emit_copy(6,3,sz,0,1,1);
     } else if (cadr(fnptr->ty)!=VOID) {
@@ -3512,7 +3518,7 @@
         if (creg!=RET_REGISTER)
             set_ireg(RET_REGISTER,1);
         printf("\tmov\t%s, %s\n",register_name(
-                cadr(get_input_register_var(1,0,1,0));
+                cadr(get_input_register_var(1,0,1))
                 ),register_name(REG_fp));
     }
     code_unfix_frame_pointer();
@@ -3681,8 +3687,8 @@
     return lb;
 }
 
-extern void 
-emit_string(char *s,int t,long len)
+extern void
+emit_string(char *s,int t,int len)
 {
     t = type_value(t);
     if (car(t)==ARRAY &&