PATCH [7/n] X32: Handle address output and calls patterns
Richard Henderson
rth@redhat.com
Tue Jul 19 17:34:00 GMT 2011
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~
More information about the Gcc-patches
mailing list