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, &reg_parm_seen); 219 precompute_register_parameters (num_actuals, args, &reg_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. */