summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn van Groningen2016-03-14 16:13:59 +0000
committerJohn van Groningen2016-03-14 16:13:59 +0000
commit0d3d715232e0c630aa88bb85045d4bbeb68d3759 (patch)
treedf1a942766e6ac29f809f650e1a73cd1627d0d08
parentwaste more time because of the stupid version management system, fix incorrec... (diff)
add passing arrays to c in ccall
-rw-r--r--cgarmc.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/cgarmc.c b/cgarmc.c
index b2537ba..0d2dfe6 100644
--- a/cgarmc.c
+++ b/cgarmc.c
@@ -417,6 +417,7 @@ void code_ccall (char *c_function_name,char *s,int length)
case 'p':
case 'S':
case 's':
+ case 'A':
if (reg_or_pad[l]>=NO_REG_OR_PAD){
if (reg_or_pad[l]==PAD_4_AFTER)
c_offset_1+=4;
@@ -472,6 +473,7 @@ void code_ccall (char *c_function_name,char *s,int length)
break;
case 'S':
case 's':
+ case 'A':
if (reg_or_pad[l]>=NO_REG_OR_PAD){
if (reg_or_pad[l]==PAD_4_AFTER)
c_offset_2-=4;
@@ -590,6 +592,20 @@ void code_ccall (char *c_function_name,char *s,int length)
}
a_o+=STACK_ELEMENT_SIZE;
break;
+ case 'A':
+ if (reg_or_pad[l]<NO_REG_OR_PAD){
+ i_move_id_r (a_o,A_STACK_POINTER,REGISTER_D4-reg_or_pad[l]);
+ i_add_i_r (3*STACK_ELEMENT_SIZE,REGISTER_D4-reg_or_pad[l]);
+ } else {
+ if (reg_or_pad[l]==PAD_4_AFTER)
+ c_offset_1-=4;
+ c_offset_1-=STACK_ELEMENT_SIZE;
+ i_move_id_r (a_o,A_STACK_POINTER,REGISTER_A0);
+ i_add_i_r (3*STACK_ELEMENT_SIZE,REGISTER_A0);
+ i_move_r_id (REGISTER_A0,c_offset_1,B_STACK_POINTER);
+ }
+ a_o+=STACK_ELEMENT_SIZE;
+ break;
case 'O':
case 'F':
case '*':
@@ -734,3 +750,4 @@ void code_ccall (char *c_function_name,char *s,int length)
error_s (ccall_error_string,c_function_name);
}
}
+