On 07/18/2011 09:45 PM, H.J. Lu wrote: > @@ -14861,14 +14919,22 @@ ix86_output_addr_vec_elt (FILE *file, int value) > { > const char *directive = ASM_LONG; > > + if (TARGET_X32) > + { > + fprintf (file, "%s%s%d\n", directive, LPREFIX, value); > + fprintf (file, "%s0\n", directive);
Why store more data than is needed? Just adjust the emission of the tablejump to use a register. > (define_insn "*indirect_jump" > [(set (pc) (match_operand:P 0 "nonimmediate_operand" "rm"))] > - "" > + "!TARGET_X32" > + "jmp\t%A0" > + [(set_attr "type" "ibr") > + (set_attr "length_immediate" "0")]) > + > +(define_insn "*indirect_jump_x32" > + [(set (pc) (match_operand:P 0 "register_operand" "r"))] > + "TARGET_X32" > "jmp\t%A0" > [(set_attr "type" "ibr") These, and all the other patterns you duplicate, can be merged via proper use of predicates and macros for the constraints. r~