diff options
Diffstat (limited to 'gcc/config')
-rw-r--r-- | gcc/config/arc/arc.c | 2 | ||||
-rw-r--r-- | gcc/config/arm/arm.c | 22 | ||||
-rw-r--r-- | gcc/config/h8300/h8300.c | 10 | ||||
-rw-r--r-- | gcc/config/i386/i386.c | 36 | ||||
-rw-r--r-- | gcc/config/i860/i860.c | 22 | ||||
-rw-r--r-- | gcc/config/mn10200/mn10200.c | 10 | ||||
-rw-r--r-- | gcc/config/mn10300/mn10300.c | 10 | ||||
-rw-r--r-- | gcc/config/romp/romp.c | 20 | ||||
-rw-r--r-- | gcc/config/sparc/sparc.c | 10 | ||||
-rw-r--r-- | gcc/config/v850/v850.c | 10 |
10 files changed, 78 insertions, 74 deletions
diff --git a/gcc/config/arc/arc.c b/gcc/config/arc/arc.c index c5638f1f753..372ba0429b6 100644 --- a/gcc/config/arc/arc.c +++ b/gcc/config/arc/arc.c @@ -2152,7 +2152,7 @@ arc_final_prescan_insn (insn, opvec, noperands) arc_ccfsm_current_cc = ARC_INVERSE_CONDITION_CODE (arc_ccfsm_current_cc); } - /* Restore recog_operand. Getting the attributes of other insns can + /* Restore recog_data. Getting the attributes of other insns can destroy this array, but final.c assumes that it remains intact across this call; since the insn has been recognized already we call insn_extract direct. */ diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c index 4ea3c058e1a..42331079ef3 100644 --- a/gcc/config/arm/arm.c +++ b/gcc/config/arm/arm.c @@ -4258,7 +4258,7 @@ note_invalid_constants (insn, address) /* Preprocess the constraints, to extract some useful information. */ preprocess_constraints (); - for (opno = 0; opno < recog_n_operands; opno++) + for (opno = 0; opno < recog_data.n_operands; opno++) { /* Things we need to fix can only occur in inputs */ if (recog_op_type[opno] != OP_IN) @@ -4270,22 +4270,23 @@ note_invalid_constants (insn, address) now so that we output the right code. */ if (recog_op_alt[opno][which_alternative].memory_ok) { - rtx op = recog_operand[opno]; + rtx op = recog_data.operand[opno]; if (CONSTANT_P (op)) - push_minipool_fix (insn, address, recog_operand_loc[opno], - recog_operand_mode[opno], op); + push_minipool_fix (insn, address, recog_data.operand_loc[opno], + recog_data.operand_mode[opno], op); #ifndef AOF_ASSEMBLER else if (GET_CODE (op) == UNSPEC && XINT (op, 1) == 3) - push_minipool_fix (insn, address, recog_operand_loc[opno], - recog_operand_mode[opno], XVECEXP (op, 0, 0)); + push_minipool_fix (insn, address, recog_data.operand_loc[opno], + recog_data.operand_mode[opno], + XVECEXP (op, 0, 0)); #endif - else if (recog_operand_mode[opno] == SImode + else if (recog_data.operand_mode[opno] == SImode && GET_CODE (op) == MEM && GET_CODE (XEXP (op, 0)) == SYMBOL_REF && CONSTANT_POOL_ADDRESS_P (XEXP (op, 0))) - push_minipool_fix (insn, address, recog_operand_loc[opno], - recog_operand_mode[opno], + push_minipool_fix (insn, address, recog_data.operand_loc[opno], + recog_data.operand_mode[opno], get_pool_constant (XEXP (op, 0))); } } @@ -6711,7 +6712,8 @@ arm_final_prescan_insn (insn) if (reverse || then_not_else) arm_current_cc = ARM_INVERSE_CONDITION_CODE (arm_current_cc); } - /* restore recog_operand (getting the attributes of other insns can + + /* Restore recog_data (getting the attributes of other insns can destroy this array, but final.c assumes that it remains intact across this call; since the insn has been recognized already we call recog direct). */ diff --git a/gcc/config/h8300/h8300.c b/gcc/config/h8300/h8300.c index aa58157284c..8710e23d992 100644 --- a/gcc/config/h8300/h8300.c +++ b/gcc/config/h8300/h8300.c @@ -1607,26 +1607,26 @@ notice_update_cc (body, insn) case CC_NONE_0HIT: /* Insn does not change CC, but the 0'th operand has been changed. */ if (cc_status.value1 != 0 - && reg_overlap_mentioned_p (recog_operand[0], cc_status.value1)) + && reg_overlap_mentioned_p (recog_data.operand[0], cc_status.value1)) cc_status.value1 = 0; break; case CC_SET_ZN: - /* Insn sets the Z,N flags of CC to recog_operand[0]. + /* Insn sets the Z,N flags of CC to recog_data.operand[0]. The V flag is unusable. The C flag may or may not be known but that's ok because alter_cond will change tests to use EQ/NE. */ CC_STATUS_INIT; cc_status.flags |= CC_OVERFLOW_UNUSABLE | CC_NO_CARRY; - cc_status.value1 = recog_operand[0]; + cc_status.value1 = recog_data.operand[0]; break; case CC_SET_ZNV: - /* Insn sets the Z,N,V flags of CC to recog_operand[0]. + /* Insn sets the Z,N,V flags of CC to recog_data.operand[0]. The C flag may or may not be known but that's ok because alter_cond will change tests to use EQ/NE. */ CC_STATUS_INIT; cc_status.flags |= CC_NO_CARRY; - cc_status.value1 = recog_operand[0]; + cc_status.value1 = recog_data.operand[0]; break; case CC_COMPARE: diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 5176c92b15a..38ef20ea0a5 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -5103,29 +5103,29 @@ ix86_attr_length_default (insn) case TYPE_IDIV: case TYPE_PUSH: case TYPE_POP: - for (i = recog_n_operands - 1; i >= 0; --i) - if (CONSTANT_P (recog_operand[i])) + for (i = recog_data.n_operands - 1; i >= 0; --i) + if (CONSTANT_P (recog_data.operand[i])) { - if (GET_CODE (recog_operand[i]) == CONST_INT - && CONST_OK_FOR_LETTER_P (INTVAL (recog_operand[i]), 'K')) + if (GET_CODE (recog_data.operand[i]) == CONST_INT + && CONST_OK_FOR_LETTER_P (INTVAL (recog_data.operand[i]), 'K')) len += 1; else - len += GET_MODE_SIZE (GET_MODE (recog_operand[0])); + len += GET_MODE_SIZE (GET_MODE (recog_data.operand[0])); } break; case TYPE_IMOV: - if (CONSTANT_P (recog_operand[1])) - len += GET_MODE_SIZE (GET_MODE (recog_operand[0])); + if (CONSTANT_P (recog_data.operand[1])) + len += GET_MODE_SIZE (GET_MODE (recog_data.operand[0])); break; case TYPE_CALL: - if (constant_call_address_operand (recog_operand[0])) + if (constant_call_address_operand (recog_data.operand[0])) return 5; break; case TYPE_CALLV: - if (constant_call_address_operand (recog_operand[1])) + if (constant_call_address_operand (recog_data.operand[1])) return 5; break; @@ -5138,19 +5138,19 @@ ix86_attr_length_default (insn) return 15; case TYPE_FXCH: - if (STACK_TOP_P (recog_operand[0])) - return 2 + (REGNO (recog_operand[1]) != FIRST_STACK_REG + 1); + if (STACK_TOP_P (recog_data.operand[0])) + return 2 + (REGNO (recog_data.operand[1]) != FIRST_STACK_REG + 1); else - return 2 + (REGNO (recog_operand[0]) != FIRST_STACK_REG + 1); + return 2 + (REGNO (recog_data.operand[0]) != FIRST_STACK_REG + 1); default: abort (); } - for (i = recog_n_operands - 1; i >= 0; --i) - if (GET_CODE (recog_operand[i]) == MEM) + for (i = recog_data.n_operands - 1; i >= 0; --i) + if (GET_CODE (recog_data.operand[i]) == MEM) { - len += memory_address_length (XEXP (recog_operand[i], 0)); + len += memory_address_length (XEXP (recog_data.operand[i], 0)); break; } @@ -5239,10 +5239,10 @@ ix86_agi_dependant (insn, dep_insn, insn_type) { int i; extract_insn (insn); - for (i = recog_n_operands - 1; i >= 0; --i) - if (GET_CODE (recog_operand[i]) == MEM) + for (i = recog_data.n_operands - 1; i >= 0; --i) + if (GET_CODE (recog_data.operand[i]) == MEM) { - addr = XEXP (recog_operand[i], 0); + addr = XEXP (recog_data.operand[i], 0); goto found; } return 0; diff --git a/gcc/config/i860/i860.c b/gcc/config/i860/i860.c index d55e912f2e0..cb7e7f7ba28 100644 --- a/gcc/config/i860/i860.c +++ b/gcc/config/i860/i860.c @@ -1440,7 +1440,7 @@ output_delayed_branch (template, operands, insn) /* Now recognize the insn which we put in its delay slot. We must do this after outputting the branch insn, - since operands may just be a pointer to `recog_operand'. */ + since operands may just be a pointer to `recog_data.operand'. */ INSN_CODE (delay_insn) = insn_code_number = recog (pat, delay_insn, NULL_PTR); if (insn_code_number == -1) @@ -1448,8 +1448,8 @@ output_delayed_branch (template, operands, insn) for (i = 0; i < insn_n_operands[insn_code_number]; i++) { - if (GET_CODE (recog_operand[i]) == SUBREG) - recog_operand[i] = alter_subreg (recog_operand[i]); + if (GET_CODE (recog_data.operand[i]) == SUBREG) + recog_data.operand[i] = alter_subreg (recog_data.operand[i]); } insn_extract (delay_insn); @@ -1458,8 +1458,9 @@ output_delayed_branch (template, operands, insn) template = insn_template[insn_code_number]; if (template == 0) - template = (*insn_outfun[insn_code_number]) (recog_operand, delay_insn); - output_asm_insn (template, recog_operand); + template = ((*insn_outfun[insn_code_number]) + (recog_data.operand, delay_insn)); + output_asm_insn (template, recog_data.operand); } CC_STATUS_INIT; return ""; @@ -1476,7 +1477,7 @@ output_delay_insn (delay_insn) /* Now recognize the insn which we put in its delay slot. We must do this after outputting the branch insn, - since operands may just be a pointer to `recog_operand'. */ + since operands may just be a pointer to `recog_data.operand'. */ insn_code_number = recog_memoized (delay_insn); if (insn_code_number == -1) abort (); @@ -1491,8 +1492,8 @@ output_delay_insn (delay_insn) make sure they get fixed up here. -- This is a kludge. */ for (i = 0; i < insn_n_operands[insn_code_number]; i++) { - if (GET_CODE (recog_operand[i]) == SUBREG) - recog_operand[i] = alter_subreg (recog_operand[i]); + if (GET_CODE (recog_data.operand[i]) == SUBREG) + recog_data.operand[i] = alter_subreg (recog_data.operand[i]); } #ifdef REGISTER_CONSTRAINTS @@ -1514,8 +1515,9 @@ output_delay_insn (delay_insn) template = insn_template[insn_code_number]; if (template == 0) - template = (*insn_outfun[insn_code_number]) (recog_operand, delay_insn); - output_asm_insn (template, recog_operand); + template = ((*insn_outfun[insn_code_number]) + (recog_data.operand, delay_insn)); + output_asm_insn (template, recog_data.operand); return ""; } #endif diff --git a/gcc/config/mn10200/mn10200.c b/gcc/config/mn10200/mn10200.c index a74e6b65643..2364064d5a8 100644 --- a/gcc/config/mn10200/mn10200.c +++ b/gcc/config/mn10200/mn10200.c @@ -818,24 +818,24 @@ notice_update_cc (body, insn) case CC_NONE_0HIT: /* Insn does not change CC, but the 0'th operand has been changed. */ if (cc_status.value1 != 0 - && reg_overlap_mentioned_p (recog_operand[0], cc_status.value1)) + && reg_overlap_mentioned_p (recog_data.operand[0], cc_status.value1)) cc_status.value1 = 0; break; case CC_SET_ZN: - /* Insn sets the Z,N flags of CC to recog_operand[0]. + /* Insn sets the Z,N flags of CC to recog_data.operand[0]. V,C is in an unusable state. */ CC_STATUS_INIT; cc_status.flags |= CC_OVERFLOW_UNUSABLE | CC_NO_CARRY; - cc_status.value1 = recog_operand[0]; + cc_status.value1 = recog_data.operand[0]; break; case CC_SET_ZNV: - /* Insn sets the Z,N,V flags of CC to recog_operand[0]. + /* Insn sets the Z,N,V flags of CC to recog_data.operand[0]. C is in an unusable state. */ CC_STATUS_INIT; cc_status.flags |= CC_NO_CARRY; - cc_status.value1 = recog_operand[0]; + cc_status.value1 = recog_data.operand[0]; break; case CC_COMPARE: diff --git a/gcc/config/mn10300/mn10300.c b/gcc/config/mn10300/mn10300.c index d85f9d2dc00..80236d28177 100644 --- a/gcc/config/mn10300/mn10300.c +++ b/gcc/config/mn10300/mn10300.c @@ -482,24 +482,24 @@ notice_update_cc (body, insn) case CC_NONE_0HIT: /* Insn does not change CC, but the 0'th operand has been changed. */ if (cc_status.value1 != 0 - && reg_overlap_mentioned_p (recog_operand[0], cc_status.value1)) + && reg_overlap_mentioned_p (recog_data.operand[0], cc_status.value1)) cc_status.value1 = 0; break; case CC_SET_ZN: - /* Insn sets the Z,N flags of CC to recog_operand[0]. + /* Insn sets the Z,N flags of CC to recog_data.operand[0]. V,C are unusable. */ CC_STATUS_INIT; cc_status.flags |= CC_NO_CARRY | CC_OVERFLOW_UNUSABLE; - cc_status.value1 = recog_operand[0]; + cc_status.value1 = recog_data.operand[0]; break; case CC_SET_ZNV: - /* Insn sets the Z,N,V flags of CC to recog_operand[0]. + /* Insn sets the Z,N,V flags of CC to recog_data.operand[0]. C is unusable. */ CC_STATUS_INIT; cc_status.flags |= CC_NO_CARRY; - cc_status.value1 = recog_operand[0]; + cc_status.value1 = recog_data.operand[0]; break; case CC_COMPARE: diff --git a/gcc/config/romp/romp.c b/gcc/config/romp/romp.c index b5096c2f9c2..51bd7499d07 100644 --- a/gcc/config/romp/romp.c +++ b/gcc/config/romp/romp.c @@ -140,11 +140,11 @@ update_cc (body, insn) /* Insn doesn't affect the CC but does modify operand[0], known to be a register. */ if (cc_status.value1 != 0 - && reg_overlap_mentioned_p (recog_operand[0], cc_status.value1)) + && reg_overlap_mentioned_p (recog_data.operand[0], cc_status.value1)) cc_status.value1 = 0; if (cc_status.value2 != 0 - && reg_overlap_mentioned_p (recog_operand[0], cc_status.value2)) + && reg_overlap_mentioned_p (recog_data.operand[0], cc_status.value2)) cc_status.value2 = 0; break; @@ -153,20 +153,20 @@ update_cc (body, insn) /* Insn copies operand[1] to operand[0], both registers, but doesn't affect the CC. */ if (cc_status.value1 != 0 - && reg_overlap_mentioned_p (recog_operand[0], cc_status.value1)) + && reg_overlap_mentioned_p (recog_data.operand[0], cc_status.value1)) cc_status.value1 = 0; if (cc_status.value2 != 0 - && reg_overlap_mentioned_p (recog_operand[0], cc_status.value2)) + && reg_overlap_mentioned_p (recog_data.operand[0], cc_status.value2)) cc_status.value2 = 0; if (cc_status.value1 != 0 - && rtx_equal_p (cc_status.value1, recog_operand[1])) - cc_status.value2 = recog_operand[0]; + && rtx_equal_p (cc_status.value1, recog_data.operand[1])) + cc_status.value2 = recog_data.operand[0]; if (cc_status.value2 != 0 - && rtx_equal_p (cc_status.value2, recog_operand[1])) - cc_status.value1 = recog_operand[0]; + && rtx_equal_p (cc_status.value2, recog_data.operand[1])) + cc_status.value1 = recog_data.operand[0]; break; @@ -176,10 +176,10 @@ update_cc (body, insn) break; case CC_SETS: - /* Insn sets CC to recog_operand[0], but overflow is impossible. */ + /* Insn sets CC to recog_data.operand[0], but overflow is impossible. */ CC_STATUS_INIT; cc_status.flags |= CC_NO_OVERFLOW; - cc_status.value1 = recog_operand[0]; + cc_status.value1 = recog_data.operand[0]; break; case CC_COMPARE: diff --git a/gcc/config/sparc/sparc.c b/gcc/config/sparc/sparc.c index 190a788412d..6d33f4e69e8 100644 --- a/gcc/config/sparc/sparc.c +++ b/gcc/config/sparc/sparc.c @@ -2373,12 +2373,12 @@ check_pic (i) switch (flag_pic) { case 1: - if (GET_CODE (recog_operand[i]) == SYMBOL_REF - || (GET_CODE (recog_operand[i]) == CONST - && ! (GET_CODE (XEXP (recog_operand[i], 0)) == MINUS - && (XEXP (XEXP (recog_operand[i], 0), 0) + if (GET_CODE (recog_data.operand[i]) == SYMBOL_REF + || (GET_CODE (recog_data.operand[i]) == CONST + && ! (GET_CODE (XEXP (recog_data.operand[i], 0)) == MINUS + && (XEXP (XEXP (recog_data.operand[i], 0), 0) == global_offset_table) - && (GET_CODE (XEXP (XEXP (recog_operand[i], 0), 1)) + && (GET_CODE (XEXP (XEXP (recog_data.operand[i], 0), 1)) == CONST)))) abort (); case 2: diff --git a/gcc/config/v850/v850.c b/gcc/config/v850/v850.c index a085b518d63..0b68cede1ea 100644 --- a/gcc/config/v850/v850.c +++ b/gcc/config/v850/v850.c @@ -1959,24 +1959,24 @@ notice_update_cc (body, insn) case CC_NONE_0HIT: /* Insn does not change CC, but the 0'th operand has been changed. */ if (cc_status.value1 != 0 - && reg_overlap_mentioned_p (recog_operand[0], cc_status.value1)) + && reg_overlap_mentioned_p (recog_data.operand[0], cc_status.value1)) cc_status.value1 = 0; break; case CC_SET_ZN: - /* Insn sets the Z,N flags of CC to recog_operand[0]. + /* Insn sets the Z,N flags of CC to recog_data.operand[0]. V,C is in an unusable state. */ CC_STATUS_INIT; cc_status.flags |= CC_OVERFLOW_UNUSABLE | CC_NO_CARRY; - cc_status.value1 = recog_operand[0]; + cc_status.value1 = recog_data.operand[0]; break; case CC_SET_ZNV: - /* Insn sets the Z,N,V flags of CC to recog_operand[0]. + /* Insn sets the Z,N,V flags of CC to recog_data.operand[0]. C is in an unusable state. */ CC_STATUS_INIT; cc_status.flags |= CC_NO_CARRY; - cc_status.value1 = recog_operand[0]; + cc_status.value1 = recog_data.operand[0]; break; case CC_COMPARE: |