diff options
author | John van Groningen | 2005-11-24 13:08:31 +0000 |
---|---|---|
committer | John van Groningen | 2005-11-24 13:08:31 +0000 |
commit | 9d8c68c2f1a3d3fa22710c6d2fde9e9979533d29 (patch) | |
tree | 5bddcb91f2440c6c3bb0227b973792c4f9aeb4c9 | |
parent | use new descriptors on the PowerPC (diff) |
add passing of float argument in ccall for the PowerPC
-rw-r--r-- | cginstructions.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/cginstructions.c b/cginstructions.c index 3fe3ad8..557285b 100644 --- a/cginstructions.c +++ b/cginstructions.c @@ -2384,7 +2384,7 @@ void code_ccall (char *c_function_name,char *s,int length) if (!float_parameters) ++n_clean_b_register_parameters; continue; -#ifdef I486 +#if defined (I486) || defined (G_POWER) case 'r': #endif case 'R': @@ -2647,6 +2647,18 @@ void code_ccall (char *c_function_name,char *s,int length) b_o+=4; } break; +# ifdef G_POWER + case 'r': + if (c_fp_parameter_n<13){ + ++c_parameter_n; + i_fmove_id_fr (b_o,B_STACK_REGISTER,1+c_fp_parameter_n-14); + i_word_i (0xFC000018 | ((1+c_fp_parameter_n) << 21) | ((1+c_fp_parameter_n) << 11)); // frsp frp,frp + } else + error_s ("Passing single precision argument in fp position > 13 not implemented (in '%s')",c_function_name); + ++c_fp_parameter_n; + b_o+=8; + break; +# endif case 'R': # ifdef G_POWER # ifdef LINUX_ELF |