diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/config/i386/i386.c | 71 |
2 files changed, 36 insertions, 40 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a0c8dec..aed92bb 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,10 @@ 2014-10-27 Richard Sandiford <richard.sandiford@arm.com> + * config/i386/i386.c (find_constant_1): Delete. + (find_constant): Use FOR_EACH_SUBRTX. + +2014-10-27 Richard Sandiford <richard.sandiford@arm.com> + * config/i386/i386.c (extended_reg_mentioned_1): Delete. (x86_extended_reg_mentioned_p): Use FOR_EACH_SUBRTX. diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 408fbd9..7855a4b 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -46533,53 +46533,44 @@ allocate_next_window (int window_num) return dispatch_window_list1; } -/* Increment the number of immediate operands of an instruction. */ +/* Compute number of immediate operands of an instruction. */ -static int -find_constant_1 (rtx *in_rtx, imm_info *imm_values) +static void +find_constant (rtx in_rtx, imm_info *imm_values) { - if (*in_rtx == 0) - return 0; - - switch ( GET_CODE (*in_rtx)) - { - case CONST: - case SYMBOL_REF: - case CONST_INT: - (imm_values->imm)++; - if (x86_64_immediate_operand (*in_rtx, SImode)) - (imm_values->imm32)++; - else - (imm_values->imm64)++; - break; - - case CONST_DOUBLE: - (imm_values->imm)++; - (imm_values->imm64)++; - break; - - case CODE_LABEL: - if (LABEL_KIND (*in_rtx) == LABEL_NORMAL) + if (INSN_P (in_rtx)) + in_rtx = PATTERN (in_rtx); + subrtx_iterator::array_type array; + FOR_EACH_SUBRTX (iter, array, in_rtx, ALL) + if (const_rtx x = *iter) + switch (GET_CODE (x)) { + case CONST: + case SYMBOL_REF: + case CONST_INT: (imm_values->imm)++; - (imm_values->imm32)++; - } - break; - - default: - break; - } + if (x86_64_immediate_operand (CONST_CAST_RTX (x), SImode)) + (imm_values->imm32)++; + else + (imm_values->imm64)++; + break; - return 0; -} + case CONST_DOUBLE: + (imm_values->imm)++; + (imm_values->imm64)++; + break; -/* Compute number of immediate operands of an instruction. */ + case CODE_LABEL: + if (LABEL_KIND (x) == LABEL_NORMAL) + { + (imm_values->imm)++; + (imm_values->imm32)++; + } + break; -static void -find_constant (rtx in_rtx, imm_info *imm_values) -{ - for_each_rtx (INSN_P (in_rtx) ? &PATTERN (in_rtx) : &in_rtx, - (rtx_function) find_constant_1, (void *) imm_values); + default: + break; + } } /* Return total size of immediate operands of an instruction along with number |