Mercurial > hg > CbC > CbC_gcc
comparison gcc/cbc-goto.h @ 25:2476ed92181e
modified machine description of i386 for support indirect sibcall attributed fastcall.
author | kent <kent@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 27 Oct 2009 16:04:06 +0900 |
parents | 959d4c8c8abc |
children | 3aaf117db171 |
comparison
equal
deleted
inserted
replaced
24:f37d7058d1ce | 25:2476ed92181e |
---|---|
216 | 216 |
217 /* Precompute all register parameters. It isn't safe to compute anything | 217 /* Precompute all register parameters. It isn't safe to compute anything |
218 once we have started filling any specific hard regs. */ | 218 once we have started filling any specific hard regs. */ |
219 precompute_register_parameters (num_actuals, args, ®_parm_seen); | 219 precompute_register_parameters (num_actuals, args, ®_parm_seen); |
220 | 220 |
221 /* operand[2] is environment. */ | 221 if (CALL_EXPR_STATIC_CHAIN (exp)) |
222 if (TREE_OPERAND (exp, 2)) | 222 static_chain_value = expand_normal (CALL_EXPR_STATIC_CHAIN (exp)); |
223 static_chain_value = expand_normal (TREE_OPERAND (exp, 2)); | |
224 else | 223 else |
225 static_chain_value = 0; | 224 static_chain_value = 0; |
226 | 225 |
227 | 226 |
228 /* parallel assignment */ | 227 /* parallel assignment */ |
229 store_order = alloca (num_actuals * sizeof (int)); | 228 store_order = alloca (num_actuals * sizeof (int)); |
230 memset (store_order, 0, num_actuals * sizeof (int)); | 229 memset (store_order, 0, num_actuals * sizeof (int)); |
313 //pop_temp_slots (); | 312 //pop_temp_slots (); |
314 | 313 |
315 emit_indirect_jump (funexp); | 314 emit_indirect_jump (funexp); |
316 } | 315 } |
317 #endif | 316 #endif |
317 if (GET_CODE (funexp) != SYMBOL_REF) | |
318 { | |
319 push_temp_slots(); | |
320 preserve_temp_slots(funexp); | |
321 /* Generate the actual call instruction. */ | |
322 emit_call_1 (funexp, exp, fndecl, funtype, unadjusted_args_size, | |
323 adjusted_args_size.constant, struct_value_size, | |
324 //next_arg_reg, valreg, old_inhibit_defer_pop, call_fusage, | |
325 next_arg_reg, valreg, 0, call_fusage, | |
326 flags, & args_so_far); | |
327 pop_temp_slots(); | |
328 } | |
329 else | |
330 { | |
318 | 331 |
319 /* Generate the actual call instruction. */ | 332 /* Generate the actual call instruction. */ |
320 emit_call_1 (funexp, exp, fndecl, funtype, unadjusted_args_size, | 333 emit_call_1 (funexp, exp, fndecl, funtype, unadjusted_args_size, |
321 adjusted_args_size.constant, struct_value_size, | 334 adjusted_args_size.constant, struct_value_size, |
322 //next_arg_reg, valreg, old_inhibit_defer_pop, call_fusage, | 335 //next_arg_reg, valreg, old_inhibit_defer_pop, call_fusage, |
323 next_arg_reg, valreg, 0, call_fusage, | 336 next_arg_reg, valreg, 0, call_fusage, |
324 flags, & args_so_far); | 337 flags, & args_so_far); |
338 } | |
325 | 339 |
326 /* If a non-BLKmode value is returned at the most significant end | 340 /* If a non-BLKmode value is returned at the most significant end |
327 of a register, shift the register right by the appropriate amount | 341 of a register, shift the register right by the appropriate amount |
328 and update VALREG accordingly. BLKmode values are handled by the | 342 and update VALREG accordingly. BLKmode values are handled by the |
329 group load/store machinery below. */ | 343 group load/store machinery below. */ |