diff options
Diffstat (limited to 'gcc-4.9/gcc/config/i386/i386.md')
-rw-r--r-- | gcc-4.9/gcc/config/i386/i386.md | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/gcc-4.9/gcc/config/i386/i386.md b/gcc-4.9/gcc/config/i386/i386.md index e32ba52a6..f5eff3d90 100644 --- a/gcc-4.9/gcc/config/i386/i386.md +++ b/gcc-4.9/gcc/config/i386/i386.md @@ -11140,7 +11140,7 @@ [(set (pc) (match_operand 0 "indirect_branch_operand"))] "" { - if (TARGET_X32) + if (TARGET_X32 || ix86_indirect_branch_register) operands[0] = convert_memory_address (word_mode, operands[0]); cfun->machine->has_local_indirect_jump = true; }) @@ -11149,7 +11149,11 @@ [(set (pc) (match_operand:W 0 "indirect_branch_operand" "rw"))] "" "* return ix86_output_indirect_jmp (operands[0], false);" - [(set_attr "type" "ibr") + [(set (attr "type") + (if_then_else (match_test "(cfun->machine->indirect_branch_type + != indirect_branch_keep)") + (const_string "multi") + (const_string "ibr"))) (set_attr "length_immediate" "0")]) (define_expand "tablejump" @@ -11189,7 +11193,7 @@ OPTAB_DIRECT); } - if (TARGET_X32) + if (TARGET_X32 || ix86_indirect_branch_register) operands[0] = convert_memory_address (word_mode, operands[0]); cfun->machine->has_local_indirect_jump = true; }) @@ -11199,7 +11203,11 @@ (use (label_ref (match_operand 1)))] "" "* return ix86_output_indirect_jmp (operands[0], false);" - [(set_attr "type" "ibr") + [(set (attr "type") + (if_then_else (match_test "(cfun->machine->indirect_branch_type + != indirect_branch_keep)") + (const_string "multi") + (const_string "ibr"))) (set_attr "length_immediate" "0")]) ;; Convert setcc + movzbl to xor + setcc if operands don't overlap. @@ -11620,7 +11628,11 @@ (use (match_operand:SI 0 "register_operand" "r"))] "reload_completed" "* return ix86_output_indirect_jmp (operands[0], true);" - [(set_attr "type" "ibr") + [(set (attr "type") + (if_then_else (match_test "(cfun->machine->indirect_branch_type + != indirect_branch_keep)") + (const_string "multi") + (const_string "ibr"))) (set_attr "length_immediate" "0")]) (define_insn "nop" |