predicates.md (const_call_operand): Adjust comment.
* config/m68k/predicates.md (const_call_operand): Adjust comment. (const_sibcall_operand): New. (sibcall_operand): Use it. * config/m68k/m68k.c (FL_FOR_isa_c): Not ISA_B compatible. (m68k_isas): ISAC does not imply FPU or EMAC. (override_options): Add ISA_C logic for symbolic jump & call. From-SVN: r125774
This commit is contained in:
parent
fe116068c2
commit
4e2b26aaa2
3 changed files with 30 additions and 9 deletions
|
@ -7,6 +7,13 @@
|
|||
* config/m68k/m68k.c (all_isas): Remove FL_CF_FPU and
|
||||
FL_CF_EMAC from the entry for isac.
|
||||
|
||||
* config/m68k/predicates.md (const_call_operand): Adjust comment.
|
||||
(const_sibcall_operand): New.
|
||||
(sibcall_operand): Use it.
|
||||
* config/m68k/m68k.c (FL_FOR_isa_c): Not ISA_B compatible.
|
||||
(m68k_isas): ISAC does not imply FPU or EMAC.
|
||||
(override_options): Add ISA_C logic for symbolic jump & call.
|
||||
|
||||
2007-06-17 Eric Botcazou <ebotcazou@libertysurf.fr>
|
||||
|
||||
* config/sparc/sparc.c (sparc_vis_init_builtins): Retrieve the
|
||||
|
|
|
@ -233,7 +233,8 @@ struct gcc_target targetm = TARGET_INITIALIZER;
|
|||
#define FL_FOR_isa_aplus (FL_FOR_isa_a | FL_ISA_APLUS | FL_CF_USP)
|
||||
/* Note ISA_B doesn't necessarily include USP (user stack pointer) support. */
|
||||
#define FL_FOR_isa_b (FL_FOR_isa_a | FL_ISA_B | FL_CF_HWDIV)
|
||||
#define FL_FOR_isa_c (FL_FOR_isa_b | FL_ISA_C | FL_CF_USP)
|
||||
/* ISA_C is not upwardly compatible with ISA_B. */
|
||||
#define FL_FOR_isa_c (FL_FOR_isa_a | FL_ISA_C | FL_CF_HWDIV | FL_CF_USP)
|
||||
|
||||
enum m68k_isa
|
||||
{
|
||||
|
@ -563,20 +564,27 @@ override_options (void)
|
|||
else if (TARGET_ID_SHARED_LIBRARY)
|
||||
/* All addresses must be loaded from the GOT. */
|
||||
;
|
||||
else if (TARGET_68020 || TARGET_ISAB)
|
||||
else if (TARGET_68020 || TARGET_ISAB || TARGET_ISAC)
|
||||
{
|
||||
if (TARGET_PCREL)
|
||||
{
|
||||
m68k_symbolic_call = "bsr.l %c0";
|
||||
m68k_symbolic_jump = "bra.l %c0";
|
||||
}
|
||||
m68k_symbolic_call = "bsr.l %c0";
|
||||
else
|
||||
{
|
||||
#if defined(USE_GAS)
|
||||
m68k_symbolic_call = "bsr.l %p0";
|
||||
m68k_symbolic_jump = "bra.l %p0";
|
||||
#else
|
||||
m68k_symbolic_call = "bsr %p0";
|
||||
#endif
|
||||
}
|
||||
if (TARGET_ISAC)
|
||||
/* No unconditional long branch */;
|
||||
else if (TARGET_PCREL)
|
||||
m68k_symbolic_jump = "bra.l %c0";
|
||||
else
|
||||
{
|
||||
#if defined(USE_GAS)
|
||||
m68k_symbolic_jump = "bra.l %p0";
|
||||
#else
|
||||
m68k_symbolic_jump = "bra %p0";
|
||||
#endif
|
||||
}
|
||||
|
|
|
@ -159,7 +159,7 @@
|
|||
}
|
||||
})
|
||||
|
||||
;; A constant that can be used the address in a call or sibcall insn.
|
||||
;; A constant that can be used the address in a call insn
|
||||
(define_predicate "const_call_operand"
|
||||
(ior (match_operand 0 "const_int_operand")
|
||||
(and (match_test "m68k_symbolic_call != NULL")
|
||||
|
@ -170,9 +170,15 @@
|
|||
(ior (match_operand 0 "const_call_operand")
|
||||
(match_operand 0 "register_operand")))
|
||||
|
||||
;; A constant that can be used the address in a sibcall insn
|
||||
(define_predicate "const_sibcall_operand"
|
||||
(ior (match_operand 0 "const_int_operand")
|
||||
(and (match_test "m68k_symbolic_jump != NULL")
|
||||
(match_operand 0 "symbolic_operand"))))
|
||||
|
||||
;; An operand that can be used as the address in a sibcall insn.
|
||||
(define_predicate "sibcall_operand"
|
||||
(ior (match_operand 0 "const_call_operand")
|
||||
(ior (match_operand 0 "const_sibcall_operand")
|
||||
(and (match_code "reg")
|
||||
(match_test "REGNO (op) == STATIC_CHAIN_REGNUM"))))
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue