warning ("PIC code generation is not supported in the portable runtime model\n");
}
- if (flag_pic && TARGET_NO_SPACE_REGS)
+ if (flag_pic && (TARGET_NO_SPACE_REGS || TARGET_FAST_INDIRECT_CALLS))
{
warning ("PIC code generation is not compatable with fast indirect calls\n");
}
/* If we're allowed to use be/ble instructions, then this is the
best sequence to use for a long millicode call. */
- if (TARGET_NO_SPACE_REGS
+ if (TARGET_NO_SPACE_REGS || TARGET_FAST_INDIRECT_CALLS
|| ! (flag_pic || TARGET_PORTABLE_RUNTIME))
{
xoperands[0] = call_dest;
in shared libraries on hpux10. */
#define TARGET_LONG_LOAD_STORE (target_flags & 512)
+/* Use a faster sequence for indirect calls. */
+#define TARGET_FAST_INDIRECT_CALLS (target_flags & 1024)
+
/* Macro to define tables used to set the flags.
This is a list in braces of pairs in braces,
each pair being { "NAME", VALUE }
{"no-soft-float", -256}, \
{"long-load-store", 512}, \
{"no-long-load-store", -512},\
+ {"fast-indirect-calls", 1024},\
+ {"no-fast-indirect-calls", -1024},\
{"linker-opt", 0}, \
{ "", TARGET_DEFAULT | TARGET_CPU_DEFAULT}}
(const_int 4)
;; NO_SPACE_REGS
- (ne (symbol_ref "TARGET_NO_SPACE_REGS")
+ (ne (symbol_ref "TARGET_NO_SPACE_REGS || TARGET_FAST_INDIRECT_CALLS")
(const_int 0))
(const_int 8)
(const_int 4)
;; NO_SPACE_REGS
- (ne (symbol_ref "TARGET_NO_SPACE_REGS")
+ (ne (symbol_ref "TARGET_NO_SPACE_REGS || TARGET_FAST_INDIRECT_CALLS")
(const_int 0))
(const_int 8)
(const_int 4)
;; NO_SPACE_REGS
- (ne (symbol_ref "TARGET_NO_SPACE_REGS")
+ (ne (symbol_ref "TARGET_NO_SPACE_REGS || TARGET_FAST_INDIRECT_CALLS")
(const_int 0))
(const_int 8)
(const_int 4)
;; NO_SPACE_REGS
- (ne (symbol_ref "TARGET_NO_SPACE_REGS")
+ (ne (symbol_ref "TARGET_NO_SPACE_REGS || TARGET_FAST_INDIRECT_CALLS")
(const_int 0))
(const_int 8)
(const_int 4)
;; NO_SPACE_REGS
- (ne (symbol_ref "TARGET_NO_SPACE_REGS")
+ (ne (symbol_ref "TARGET_NO_SPACE_REGS || TARGET_FAST_INDIRECT_CALLS")
(const_int 0))
(const_int 8)
rtx xoperands[2];
/* First the special case for kernels, level 0 systems, etc. */
- if (TARGET_NO_SPACE_REGS)
+ if (TARGET_NO_SPACE_REGS || TARGET_FAST_INDIRECT_CALLS)
return \"ble 0(%%sr4,%%r22)\;copy %%r31,%%r2\";
/* Now the normal case -- we can reach $$dyncall directly or
(set (attr "length")
(cond [
;; First NO_SPACE_REGS
- (ne (symbol_ref "TARGET_NO_SPACE_REGS")
+ (ne (symbol_ref "TARGET_NO_SPACE_REGS || TARGET_FAST_INDIRECT_CALLS")
(const_int 0))
(const_int 8)
rtx xoperands[2];
/* First the special case for kernels, level 0 systems, etc. */
- if (TARGET_NO_SPACE_REGS)
+ if (TARGET_NO_SPACE_REGS || TARGET_FAST_INDIRECT_CALLS)
return \"ble 0(%%sr4,%%r22)\;copy %%r31,%%r2\";
/* Now the normal case -- we can reach $$dyncall directly or
(set (attr "length")
(cond [
;; First NO_SPACE_REGS
- (ne (symbol_ref "TARGET_NO_SPACE_REGS")
+ (ne (symbol_ref "TARGET_NO_SPACE_REGS || TARGET_FAST_INDIRECT_CALLS")
(const_int 0))
(const_int 8)
(const_int 28)
;; NO_SPACE_REGS
- (ne (symbol_ref "TARGET_NO_SPACE_REGS")
+ (ne (symbol_ref "TARGET_NO_SPACE_REGS || TARGET_FAST_INDIRECT_CALLS")
(const_int 0))
(const_int 32)