diff options
author | rsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-01-18 19:40:12 +0000 |
---|---|---|
committer | rsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-01-18 19:40:12 +0000 |
commit | dd7218bb0fe32b82563c64568e1c057817176089 (patch) | |
tree | c02edc016e7c96d87dd0ef5592fb69cb246610a8 /gcc/config/m68k/m68k.h | |
parent | d2a91c7e158cae8e913285f370e640165320d908 (diff) | |
download | gcc-dd7218bb0fe32b82563c64568e1c057817176089.tar.gz |
gcc/
* config/m68k/m68k-protos.h (m68k_output_pic_call): Delete.
(output_call, m68k_legitimize_call_address): Declare.
* config/m68k/m68k.h (EXTRA_CONSTRAINT): Remove unnecessary
parenthesees. Add support for a 'W' constraint.
(LEGITIMATE_PIC_OPERAND_P): Remove SYMBOL_REF_FLAG handling.
(PRINT_OPERAND_PUNCT_VALID_P): Remove comment about 'o'.
(m68k_symbolic_call, m68k_symbolic_jump): Declare.
* config/m68k/m68k.c (m68k_symbolic_call, m68k_symbolic_jump): New
variables.
(override_options): Initialize them. Do not set flag_no_function_cse
for TARGET_ID_SHARED_LIBRARY.
(m68k_output_pic_call): Delete.
(m68k_legitimize_call_address): New function.
(print_operand): Remove the %o prefix. Handle the %p prefix.
(output_call): New function.
(m68k_output_mi_thunk): Use m68k_symbolic_jump. Always load the
target address from the GOT if symbolic jumps are not allowed.
* config/m68k/m68k.md (call, general_operand): Do not set
SYMBOL_REF_FLAG. Use m68k_legitimize_call_address instead.
Merge separate flag_pic and !flag_pic define_insns into...
(*call, *call_value): ...these new patterns. Match the address
rather than the containing MEM and require it to be a call_operand.
Use output_call to generate the asm template.
* config/m68k/predicates.md (const_call_operand): New predicate.
(call_operand): Likewise.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@120921 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config/m68k/m68k.h')
-rw-r--r-- | gcc/config/m68k/m68k.h | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/gcc/config/m68k/m68k.h b/gcc/config/m68k/m68k.h index 3d46ee9c37c..2b72781bc1b 100644 --- a/gcc/config/m68k/m68k.h +++ b/gcc/config/m68k/m68k.h @@ -513,32 +513,35 @@ extern enum reg_class regno_reg_class[]; /* `Q' means address register indirect addressing mode. `S' is for operands that satisfy 'm' when -mpcrel is in effect. `T' is for operands that satisfy 's' when -mpcrel is not in effect. - `U' is for register offset addressing. */ + `U' is for register offset addressing. + `W' is for const_call_operands. */ #define EXTRA_CONSTRAINT(OP,CODE) \ - (((CODE) == 'S') \ + ((CODE) == 'S' \ ? (TARGET_PCREL \ && GET_CODE (OP) == MEM \ && (GET_CODE (XEXP (OP, 0)) == SYMBOL_REF \ || GET_CODE (XEXP (OP, 0)) == LABEL_REF \ || GET_CODE (XEXP (OP, 0)) == CONST)) \ : \ - (((CODE) == 'T') \ + (CODE) == 'T' \ ? ( !TARGET_PCREL \ && (GET_CODE (OP) == SYMBOL_REF \ || GET_CODE (OP) == LABEL_REF \ || GET_CODE (OP) == CONST)) \ : \ - (((CODE) == 'Q') \ + (CODE) == 'Q' \ ? (GET_CODE (OP) == MEM \ && GET_CODE (XEXP (OP, 0)) == REG) \ : \ - (((CODE) == 'U') \ + (CODE) == 'U' \ ? (GET_CODE (OP) == MEM \ && GET_CODE (XEXP (OP, 0)) == PLUS \ && GET_CODE (XEXP (XEXP (OP, 0), 0)) == REG \ && GET_CODE (XEXP (XEXP (OP, 0), 1)) == CONST_INT) \ : \ - 0)))) + (CODE) == 'W' \ + ? const_call_operand (OP, VOIDmode) \ + : 0) /* On the m68k, use a data reg if possible when the value is a constant in the range where moveq could be used @@ -803,7 +806,6 @@ __transfer_from_trampoline () \ #define LEGITIMATE_PIC_OPERAND_P(X) \ (! symbolic_operand (X, VOIDmode) \ - || (GET_CODE (X) == SYMBOL_REF && SYMBOL_REF_FLAG (X)) \ || PCREL_GENERAL_OPERAND_OK) #ifndef REG_OK_STRICT @@ -1232,8 +1234,6 @@ do { if (cc_prev_status.flags & CC_IN_68881) \ 'b' for byte insn (no effect, on the Sun; this is for the ISI). 'd' to force memory addressing to be absolute, not relative. 'f' for float insn (print a CONST_DOUBLE as a float rather than in hex) - 'o' for operands to go directly to output_operand_address (bypassing - print_operand_address--used only for SYMBOL_REFs under TARGET_PCREL) 'x' for float insn (print a CONST_DOUBLE as a float rather than in hex), or print pair of registers as rx:ry. */ @@ -1292,3 +1292,5 @@ extern enum target_device m68k_cpu; extern enum uarch_type m68k_tune; extern enum fpu_type m68k_fpu; extern unsigned int m68k_cpu_flags; +extern const char *m68k_symbolic_call; +extern const char *m68k_symbolic_jump; |