diff options
author | John van Groningen | 2016-03-14 16:13:59 +0000 |
---|---|---|
committer | John van Groningen | 2016-03-14 16:13:59 +0000 |
commit | 0d3d715232e0c630aa88bb85045d4bbeb68d3759 (patch) | |
tree | df1a942766e6ac29f809f650e1a73cd1627d0d08 | |
parent | waste more time because of the stupid version management system, fix incorrec... (diff) |
add passing arrays to c in ccall
-rw-r--r-- | cgarmc.c | 17 |
1 files changed, 17 insertions, 0 deletions
@@ -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); } } + |