diff options
author | bstarynk <bstarynk@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-09-14 20:54:22 +0000 |
---|---|---|
committer | bstarynk <bstarynk@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-09-14 20:54:22 +0000 |
commit | 2a4b892970941759663bda9f6464dbff415b06cf (patch) | |
tree | 21ac4dc1e8f7684dfc4e43a947417c41369a1b86 /gcc/reg-stack.c | |
parent | c7f0a362d24042abe9d77e4201270872dda1704a (diff) | |
download | gcc-2a4b892970941759663bda9f6464dbff415b06cf.tar.gz |
2009-09-14 Basile Starynkevitch <basile@starynkevitch.net>
MELT branch merged with trunk rev 151701
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/melt-branch@151702 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/reg-stack.c')
-rw-r--r-- | gcc/reg-stack.c | 33 |
1 files changed, 11 insertions, 22 deletions
diff --git a/gcc/reg-stack.c b/gcc/reg-stack.c index ff09ad224d9..7e4ba6cad20 100644 --- a/gcc/reg-stack.c +++ b/gcc/reg-stack.c @@ -254,7 +254,7 @@ static void pop_stack (stack, int); static rtx *get_true_reg (rtx *); static int check_asm_stack_operands (rtx); -static int get_asm_operand_n_inputs (rtx); +static void get_asm_operands_in_out (rtx, int *, int *); static rtx stack_result (tree); static void replace_reg (rtx *, int); static void remove_regno_note (rtx, enum reg_note, unsigned int); @@ -480,8 +480,7 @@ check_asm_stack_operands (rtx insn) preprocess_constraints (); - n_inputs = get_asm_operand_n_inputs (body); - n_outputs = recog_data.n_operands - n_inputs; + get_asm_operands_in_out (body, &n_outputs, &n_inputs); if (alt < 0) { @@ -645,24 +644,15 @@ check_asm_stack_operands (rtx insn) N_INPUTS and N_OUTPUTS are pointers to ints into which the results are placed. */ -static int -get_asm_operand_n_inputs (rtx body) +static void +get_asm_operands_in_out (rtx body, int *pout, int *pin) { - switch (GET_CODE (body)) - { - case SET: - gcc_assert (GET_CODE (SET_SRC (body)) == ASM_OPERANDS); - return ASM_OPERANDS_INPUT_LENGTH (SET_SRC (body)); - - case ASM_OPERANDS: - return ASM_OPERANDS_INPUT_LENGTH (body); - - case PARALLEL: - return get_asm_operand_n_inputs (XVECEXP (body, 0, 0)); - - default: - gcc_unreachable (); - } + rtx asmop = extract_asm_operands (body); + + *pin = ASM_OPERANDS_INPUT_LENGTH (asmop); + *pout = (recog_data.n_operands + - ASM_OPERANDS_INPUT_LENGTH (asmop) + - ASM_OPERANDS_LABEL_LENGTH (asmop)); } /* If current function returns its result in an fp stack register, @@ -2034,8 +2024,7 @@ subst_asm_stack_regs (rtx insn, stack regstack) preprocess_constraints (); - n_inputs = get_asm_operand_n_inputs (body); - n_outputs = recog_data.n_operands - n_inputs; + get_asm_operands_in_out (body, &n_outputs, &n_inputs); gcc_assert (alt >= 0); |