Commit a7721dc0 by Alan Modra Committed by Alan Modra

TARGET_NO_SPACE_REGS no longer affects call sequences.

	* pa.h: Revise comments for TARGET_NO_SPACE_REGS and
	TARGET_FAST_INDIRECT_CALLS.
	* pa.c (override_options): TARGET_NO_SPACE_REGS is now OK with
	-fPIC.  Don't warn.
	(return_addr_rtx): Short circuit export stub matching when
	TARGET_NO_SPACE_REGS.
	(output_millicode_call): For out of range calls, make -fPIC
	take precedence, then TARGET_PORTABLE_RUNTIME, then ble.  Don't
	return before delay slot checks when TARGET_PORTABLE_RUNTIME.
	* pa.md: Modify length attr calculation of all millicode insns to
	match above.

From-SVN: r41042
parent 26ebcef1
2001-04-03 Alan Modra <alan@linuxcare.com.au>
* pa.h: Revise comments for TARGET_NO_SPACE_REGS and
TARGET_FAST_INDIRECT_CALLS.
* pa.c (override_options): TARGET_NO_SPACE_REGS is now OK with
-fPIC. Don't warn.
(return_addr_rtx): Short circuit export stub matching when
TARGET_NO_SPACE_REGS.
(output_millicode_call): For out of range calls, make -fPIC
take precedence, then TARGET_PORTABLE_RUNTIME, then ble. Don't
return before delay slot checks when TARGET_PORTABLE_RUNTIME.
* pa.md: Modify length attr calculation of all millicode insns to
match above.
2001-04-02 Geoffrey Keating <geoffk@redhat.com> 2001-04-02 Geoffrey Keating <geoffk@redhat.com>
* configure.in (gcc_cv_as_leb128): Correct name of cache variable. * configure.in (gcc_cv_as_leb128): Correct name of cache variable.
...@@ -7,7 +21,7 @@ ...@@ -7,7 +21,7 @@
2001-04-03 Alan Modra <alan@linuxcare.com.au> 2001-04-03 Alan Modra <alan@linuxcare.com.au>
* config/pa/pa.c (override_options): Remove PIC profiling warning. * pa.c (override_options): Remove PIC profiling warning.
(hp_profile_labelno): Delete. (hp_profile_labelno): Delete.
(hp_profile_label_rtx): Delete. (hp_profile_label_rtx): Delete.
(hp_profile_label_name): Delete. (hp_profile_label_name): Delete.
...@@ -20,15 +34,15 @@ ...@@ -20,15 +34,15 @@
(hppa_init_pic_save): Emit before tail_recursion_reentry, and (hppa_init_pic_save): Emit before tail_recursion_reentry, and
cater for PROFILE_HOOK. cater for PROFILE_HOOK.
(hppa_profile_hook): New function. (hppa_profile_hook): New function.
* config/pa/pa.h (FUNCTION_PROFILER): Now does nothing. * pa.h (FUNCTION_PROFILER): Now does nothing.
(PROFILE_HOOK): Define. (PROFILE_HOOK): Define.
(hppa_profile_hook): Declare. (hppa_profile_hook): Declare.
(PROFILE_BEFORE_PROLOGUE): Delete. (PROFILE_BEFORE_PROLOGUE): Delete.
(ASM_OUTPUT_REG_PUSH): Delete. (ASM_OUTPUT_REG_PUSH): Delete.
(ASM_OUTPUT_REG_POP): Delete. (ASM_OUTPUT_REG_POP): Delete.
* config/pa/pa.md (call_profiler): Turn it into a call insn, and * pa.md (call_profiler): Turn it into a call insn, and don't `use'
don't `use' r24. Accept function name operand, and use this and a r24. Accept function name operand, and use this and a locally
locally generated label to calculate pc-rel offset to func start. generated label to calculate pc-rel offset to func start.
2001-04-02 Kaveh R. Ghazi <ghazi@caip.rutgers.edu> 2001-04-02 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
...@@ -4476,8 +4490,6 @@ Thu Feb 1 07:22:41 2001 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> ...@@ -4476,8 +4490,6 @@ Thu Feb 1 07:22:41 2001 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
2001-01-31 Alan Modra <alan@linuxcare.com.au> 2001-01-31 Alan Modra <alan@linuxcare.com.au>
* (hppa_init_pic_save): Emit the pic offset table
reg save after last_parm_insn.
* pa.c (hppa_init_pic_save): New function. * pa.c (hppa_init_pic_save): New function.
* pa.h (hppa_init_pic_save): Declare. * pa.h (hppa_init_pic_save): Declare.
* pa.md (call, call_value, sibcall, sibcall_value): Use * pa.md (call, call_value, sibcall, sibcall_value): Use
......
...@@ -162,7 +162,7 @@ override_options () ...@@ -162,7 +162,7 @@ override_options ()
warning ("PIC code generation is not supported in the portable runtime model\n"); warning ("PIC code generation is not supported in the portable runtime model\n");
} }
if (flag_pic && (TARGET_NO_SPACE_REGS || TARGET_FAST_INDIRECT_CALLS)) if (flag_pic && TARGET_FAST_INDIRECT_CALLS)
{ {
warning ("PIC code generation is not compatible with fast indirect calls\n"); warning ("PIC code generation is not compatible with fast indirect calls\n");
} }
...@@ -3402,15 +3402,17 @@ return_addr_rtx (count, frameaddr) ...@@ -3402,15 +3402,17 @@ return_addr_rtx (count, frameaddr)
rtx saved_rp; rtx saved_rp;
rtx ins; rtx ins;
saved_rp = gen_reg_rtx (Pmode); if (TARGET_64BIT)
return gen_rtx_MEM (Pmode, plus_constant (frameaddr, -16));
if (TARGET_NO_SPACE_REGS)
return gen_rtx_MEM (Pmode, plus_constant (frameaddr, -20));
/* First, we start off with the normal return address pointer from /* First, we start off with the normal return address pointer from
-20[frameaddr]. */ -20[frameaddr]. */
if (TARGET_64BIT) saved_rp = gen_reg_rtx (Pmode);
return gen_rtx_MEM (Pmode, plus_constant (frameaddr, -16)); emit_move_insn (saved_rp, plus_constant (frameaddr, -20));
else
emit_move_insn (saved_rp, plus_constant (frameaddr, -5 * UNITS_PER_WORD));
/* Get pointer to the instruction stream. We have to mask out the /* Get pointer to the instruction stream. We have to mask out the
privilege level from the two low order bits of the return address privilege level from the two low order bits of the return address
...@@ -3461,7 +3463,7 @@ return_addr_rtx (count, frameaddr) ...@@ -3461,7 +3463,7 @@ return_addr_rtx (count, frameaddr)
but rather the return address that leads back into user code. but rather the return address that leads back into user code.
That return address is stored at -24[frameaddr]. */ That return address is stored at -24[frameaddr]. */
emit_move_insn (saved_rp, plus_constant (frameaddr, -6 * UNITS_PER_WORD)); emit_move_insn (saved_rp, plus_constant (frameaddr, -24));
emit_label (label); emit_label (label);
return gen_rtx_MEM (Pmode, memory_address (Pmode, saved_rp)); return gen_rtx_MEM (Pmode, memory_address (Pmode, saved_rp));
...@@ -5559,9 +5561,7 @@ output_millicode_call (insn, call_dest) ...@@ -5559,9 +5561,7 @@ output_millicode_call (insn, call_dest)
rtx xoperands[4]; rtx xoperands[4];
rtx seq_insn; rtx seq_insn;
xoperands[3] = gen_rtx_REG (SImode, 31); xoperands[3] = gen_rtx_REG (Pmode, TARGET_64BIT ? 2 : 31);
if (TARGET_64BIT)
xoperands[3] = gen_rtx_REG (SImode, 2);
/* Handle common case -- empty delay slot or no jump in the delay slot, /* Handle common case -- empty delay slot or no jump in the delay slot,
and we're sure that the branch will reach the beginning of the $CODE$ and we're sure that the branch will reach the beginning of the $CODE$
...@@ -5597,18 +5597,32 @@ output_millicode_call (insn, call_dest) ...@@ -5597,18 +5597,32 @@ output_millicode_call (insn, call_dest)
delay_insn_deleted = 1; delay_insn_deleted = 1;
} }
/* If we're allowed to use be/ble instructions, then this is the /* PIC long millicode call sequence. */
best sequence to use for a long millicode call. */ if (flag_pic)
if (TARGET_NO_SPACE_REGS || TARGET_FAST_INDIRECT_CALLS
|| ! (flag_pic || TARGET_PORTABLE_RUNTIME))
{ {
xoperands[0] = call_dest; xoperands[0] = call_dest;
output_asm_insn ("ldil L%%%0,%3", xoperands); xoperands[1] = gen_label_rtx ();
output_asm_insn ("{ble|be,l} R%%%0(%%sr4,%3)", xoperands); /* Get our address + 8 into %r1. */
output_asm_insn ("{bl|b,l} .+8,%%r1", xoperands);
/* Add %r1 to the offset of our target from the next insn. */
output_asm_insn ("addil L%%%0-%1,%%r1", xoperands);
ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, "L",
CODE_LABEL_NUMBER (xoperands[1]));
output_asm_insn ("ldo R%%%0-%1(%%r1),%%r1", xoperands);
/* Get the return address into %r31. */
output_asm_insn ("blr 0,%3", xoperands);
/* Branch to our target which is in %r1. */
output_asm_insn ("bv,n %%r0(%%r1)", xoperands);
/* Empty delay slot. Note this insn gets fetched twice and
executed once. To be safe we use a nop. */
output_asm_insn ("nop", xoperands); output_asm_insn ("nop", xoperands);
} }
/* Pure portable runtime doesn't allow be/ble; we also don't have /* Pure portable runtime doesn't allow be/ble; we also don't have
PIC support int he assembler/linker, so this sequence is needed. */ PIC support in the assembler/linker, so this sequence is needed. */
else if (TARGET_PORTABLE_RUNTIME) else if (TARGET_PORTABLE_RUNTIME)
{ {
xoperands[0] = call_dest; xoperands[0] = call_dest;
...@@ -5625,30 +5639,14 @@ output_millicode_call (insn, call_dest) ...@@ -5625,30 +5639,14 @@ output_millicode_call (insn, call_dest)
/* Empty delay slot. Note this insn gets fetched twice and /* Empty delay slot. Note this insn gets fetched twice and
executed once. To be safe we use a nop. */ executed once. To be safe we use a nop. */
output_asm_insn ("nop", xoperands); output_asm_insn ("nop", xoperands);
return "";
} }
/* PIC long millicode call sequence. */ /* If we're allowed to use be/ble instructions, then this is the
best sequence to use for a long millicode call. */
else else
{ {
xoperands[0] = call_dest; xoperands[0] = call_dest;
xoperands[1] = gen_label_rtx (); output_asm_insn ("ldil L%%%0,%3", xoperands);
/* Get our address + 8 into %r1. */ output_asm_insn ("{ble|be,l} R%%%0(%%sr4,%3)", xoperands);
output_asm_insn ("{bl|b,l} .+8,%%r1", xoperands);
/* Add %r1 to the offset of our target from the next insn. */
output_asm_insn ("addil L%%%0-%1,%%r1", xoperands);
ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, "L",
CODE_LABEL_NUMBER (xoperands[1]));
output_asm_insn ("ldo R%%%0-%1(%%r1),%%r1", xoperands);
/* Get the return address into %r31. */
output_asm_insn ("blr 0,%3", xoperands);
/* Branch to our target which is in %r1. */
output_asm_insn ("bv,n %%r0(%%r1)", xoperands);
/* Empty delay slot. Note this insn gets fetched twice and
executed once. To be safe we use a nop. */
output_asm_insn ("nop", xoperands); output_asm_insn ("nop", xoperands);
} }
......
...@@ -106,13 +106,9 @@ extern int target_flags; ...@@ -106,13 +106,9 @@ extern int target_flags;
#define MASK_DISABLE_FPREGS 2 #define MASK_DISABLE_FPREGS 2
#define TARGET_DISABLE_FPREGS (target_flags & MASK_DISABLE_FPREGS) #define TARGET_DISABLE_FPREGS (target_flags & MASK_DISABLE_FPREGS)
/* Generate code which assumes that calls through function pointers will /* Generate code which assumes that all space register are equivalent.
never cross a space boundary. Such assumptions are generally safe for Triggers aggressive unscaled index addressing and faster
building kernels and statically linked executables. Code compiled with builtin_return_address. */
this option will fail miserably if the executable is dynamically linked
or uses nested functions!
This is also used to trigger aggressive unscaled index addressing. */
#define MASK_NO_SPACE_REGS 4 #define MASK_NO_SPACE_REGS 4
#define TARGET_NO_SPACE_REGS (target_flags & MASK_NO_SPACE_REGS) #define TARGET_NO_SPACE_REGS (target_flags & MASK_NO_SPACE_REGS)
...@@ -148,7 +144,12 @@ extern int target_flags; ...@@ -148,7 +144,12 @@ extern int target_flags;
#define MASK_LONG_LOAD_STORE 512 #define MASK_LONG_LOAD_STORE 512
#define TARGET_LONG_LOAD_STORE (target_flags & MASK_LONG_LOAD_STORE) #define TARGET_LONG_LOAD_STORE (target_flags & MASK_LONG_LOAD_STORE)
/* Use a faster sequence for indirect calls. */ /* Use a faster sequence for indirect calls. This assumes that calls
through function pointers will never cross a space boundary, and
that the executable is not dynamically linked. Such assumptions
are generally safe for building kernels and statically linked
executables. Code compiled with this option will fail miserably if
the executable is dynamically linked or uses nested functions! */
#define MASK_FAST_INDIRECT_CALLS 1024 #define MASK_FAST_INDIRECT_CALLS 1024
#define TARGET_FAST_INDIRECT_CALLS (target_flags & MASK_FAST_INDIRECT_CALLS) #define TARGET_FAST_INDIRECT_CALLS (target_flags & MASK_FAST_INDIRECT_CALLS)
......
...@@ -3942,21 +3942,18 @@ ...@@ -3942,21 +3942,18 @@
(const_int 0))) (const_int 0)))
(const_int 4) (const_int 4)
;; NO_SPACE_REGS ;; Out of reach PIC
(ne (symbol_ref "TARGET_NO_SPACE_REGS || TARGET_FAST_INDIRECT_CALLS") (ne (symbol_ref "flag_pic")
(const_int 0)) (const_int 0))
(const_int 8) (const_int 24)
;; Out of reach, but not PIC or PORTABLE_RUNTIME ;; Out of reach PORTABLE_RUNTIME
;; same as NO_SPACE_REGS code (ne (symbol_ref "TARGET_PORTABLE_RUNTIME")
(and (eq (symbol_ref "TARGET_PORTABLE_RUNTIME")
(const_int 0)) (const_int 0))
(eq (symbol_ref "flag_pic") (const_int 20)]
(const_int 0)))
(const_int 8)]
;; Out of range and either PIC or PORTABLE_RUNTIME ;; Out of reach, can use ble
(const_int 24)))]) (const_int 12)))])
(define_expand "muldi3" (define_expand "muldi3"
[(set (match_operand:DI 0 "register_operand" "") [(set (match_operand:DI 0 "register_operand" "")
...@@ -4049,21 +4046,18 @@ ...@@ -4049,21 +4046,18 @@
(const_int 0))) (const_int 0)))
(const_int 4) (const_int 4)
;; NO_SPACE_REGS ;; Out of reach PIC
(ne (symbol_ref "TARGET_NO_SPACE_REGS || TARGET_FAST_INDIRECT_CALLS") (ne (symbol_ref "flag_pic")
(const_int 0)) (const_int 0))
(const_int 8) (const_int 24)
;; Out of reach, but not PIC or PORTABLE_RUNTIME ;; Out of reach PORTABLE_RUNTIME
;; same as NO_SPACE_REGS code (ne (symbol_ref "TARGET_PORTABLE_RUNTIME")
(and (eq (symbol_ref "TARGET_PORTABLE_RUNTIME")
(const_int 0)) (const_int 0))
(eq (symbol_ref "flag_pic") (const_int 20)]
(const_int 0)))
(const_int 8)]
;; Out of range and either PIC or PORTABLE_RUNTIME ;; Out of reach, can use ble
(const_int 24)))]) (const_int 12)))])
(define_expand "udivsi3" (define_expand "udivsi3"
[(set (reg:SI 26) (match_operand:SI 1 "move_operand" "")) [(set (reg:SI 26) (match_operand:SI 1 "move_operand" ""))
...@@ -4107,21 +4101,18 @@ ...@@ -4107,21 +4101,18 @@
(const_int 0))) (const_int 0)))
(const_int 4) (const_int 4)
;; NO_SPACE_REGS ;; Out of reach PIC
(ne (symbol_ref "TARGET_NO_SPACE_REGS || TARGET_FAST_INDIRECT_CALLS") (ne (symbol_ref "flag_pic")
(const_int 0)) (const_int 0))
(const_int 8) (const_int 24)
;; Out of reach, but not PIC or PORTABLE_RUNTIME ;; Out of reach PORTABLE_RUNTIME
;; same as NO_SPACE_REGS code (ne (symbol_ref "TARGET_PORTABLE_RUNTIME")
(and (eq (symbol_ref "TARGET_PORTABLE_RUNTIME")
(const_int 0)) (const_int 0))
(eq (symbol_ref "flag_pic") (const_int 20)]
(const_int 0)))
(const_int 8)]
;; Out of range and either PIC or PORTABLE_RUNTIME ;; Out of reach, can use ble
(const_int 24)))]) (const_int 12)))])
(define_expand "modsi3" (define_expand "modsi3"
[(set (reg:SI 26) (match_operand:SI 1 "move_operand" "")) [(set (reg:SI 26) (match_operand:SI 1 "move_operand" ""))
...@@ -4162,21 +4153,18 @@ ...@@ -4162,21 +4153,18 @@
(const_int 0))) (const_int 0)))
(const_int 4) (const_int 4)
;; NO_SPACE_REGS ;; Out of reach PIC
(ne (symbol_ref "TARGET_NO_SPACE_REGS || TARGET_FAST_INDIRECT_CALLS") (ne (symbol_ref "flag_pic")
(const_int 0)) (const_int 0))
(const_int 8) (const_int 24)
;; Out of reach, but not PIC or PORTABLE_RUNTIME ;; Out of reach PORTABLE_RUNTIME
;; same as NO_SPACE_REGS code (ne (symbol_ref "TARGET_PORTABLE_RUNTIME")
(and (eq (symbol_ref "TARGET_PORTABLE_RUNTIME")
(const_int 0)) (const_int 0))
(eq (symbol_ref "flag_pic") (const_int 20)]
(const_int 0)))
(const_int 8)]
;; Out of range and either PIC or PORTABLE_RUNTIME ;; Out of reach, can use ble
(const_int 24)))]) (const_int 12)))])
(define_expand "umodsi3" (define_expand "umodsi3"
[(set (reg:SI 26) (match_operand:SI 1 "move_operand" "")) [(set (reg:SI 26) (match_operand:SI 1 "move_operand" ""))
...@@ -4217,21 +4205,18 @@ ...@@ -4217,21 +4205,18 @@
(const_int 0))) (const_int 0)))
(const_int 4) (const_int 4)
;; NO_SPACE_REGS ;; Out of reach PIC
(ne (symbol_ref "TARGET_NO_SPACE_REGS || TARGET_FAST_INDIRECT_CALLS") (ne (symbol_ref "flag_pic")
(const_int 0)) (const_int 0))
(const_int 8) (const_int 24)
;; Out of reach, but not PIC or PORTABLE_RUNTIME ;; Out of reach PORTABLE_RUNTIME
;; same as NO_SPACE_REGS code (ne (symbol_ref "TARGET_PORTABLE_RUNTIME")
(and (eq (symbol_ref "TARGET_PORTABLE_RUNTIME")
(const_int 0)) (const_int 0))
(eq (symbol_ref "flag_pic") (const_int 20)]
(const_int 0)))
(const_int 8)]
;; Out of range and either PIC or PORTABLE_RUNTIME ;; Out of reach, can use ble
(const_int 24)))]) (const_int 12)))])
;;- and instructions ;;- and instructions
;; We define DImode `and` so with DImode `not` we can get ;; We define DImode `and` so with DImode `not` we can get
...@@ -5803,7 +5788,7 @@ ...@@ -5803,7 +5788,7 @@
rtx xoperands[2]; rtx xoperands[2];
/* First the special case for kernels, level 0 systems, etc. */ /* First the special case for kernels, level 0 systems, etc. */
if (TARGET_NO_SPACE_REGS || TARGET_FAST_INDIRECT_CALLS) if (TARGET_FAST_INDIRECT_CALLS)
return \"ble 0(%%sr4,%%r22)\;copy %%r31,%%r2\"; return \"ble 0(%%sr4,%%r22)\;copy %%r31,%%r2\";
/* Now the normal case -- we can reach $$dyncall directly or /* Now the normal case -- we can reach $$dyncall directly or
...@@ -5838,8 +5823,8 @@ ...@@ -5838,8 +5823,8 @@
[(set_attr "type" "dyncall") [(set_attr "type" "dyncall")
(set (attr "length") (set (attr "length")
(cond [ (cond [
;; First NO_SPACE_REGS ;; First FAST_INDIRECT_CALLS
(ne (symbol_ref "TARGET_NO_SPACE_REGS || TARGET_FAST_INDIRECT_CALLS") (ne (symbol_ref "TARGET_FAST_INDIRECT_CALLS")
(const_int 0)) (const_int 0))
(const_int 8) (const_int 8)
...@@ -5850,19 +5835,18 @@ ...@@ -5850,19 +5835,18 @@
(const_int 0))) (const_int 0)))
(const_int 8) (const_int 8)
;; Out of reach, but not PIC or PORTABLE_RUNTIME ;; Out of reach PIC
(and (eq (symbol_ref "TARGET_PORTABLE_RUNTIME") (ne (symbol_ref "flag_pic")
(const_int 0)) (const_int 0))
(eq (symbol_ref "flag_pic") (const_int 24)
(const_int 0)))
(const_int 12)
;; Out of reach PORTABLE_RUNTIME
(ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (ne (symbol_ref "TARGET_PORTABLE_RUNTIME")
(const_int 0)) (const_int 0))
(const_int 20)] (const_int 20)]
;; Out of range PIC case ;; Out of reach, can use ble
(const_int 24)))]) (const_int 12)))])
(define_expand "call_value" (define_expand "call_value"
[(parallel [(set (match_operand 0 "" "") [(parallel [(set (match_operand 0 "" "")
...@@ -5982,7 +5966,7 @@ ...@@ -5982,7 +5966,7 @@
rtx xoperands[2]; rtx xoperands[2];
/* First the special case for kernels, level 0 systems, etc. */ /* First the special case for kernels, level 0 systems, etc. */
if (TARGET_NO_SPACE_REGS || TARGET_FAST_INDIRECT_CALLS) if (TARGET_FAST_INDIRECT_CALLS)
return \"ble 0(%%sr4,%%r22)\;copy %%r31,%%r2\"; return \"ble 0(%%sr4,%%r22)\;copy %%r31,%%r2\";
/* Now the normal case -- we can reach $$dyncall directly or /* Now the normal case -- we can reach $$dyncall directly or
...@@ -6017,8 +6001,8 @@ ...@@ -6017,8 +6001,8 @@
[(set_attr "type" "dyncall") [(set_attr "type" "dyncall")
(set (attr "length") (set (attr "length")
(cond [ (cond [
;; First NO_SPACE_REGS ;; First FAST_INDIRECT_CALLS
(ne (symbol_ref "TARGET_NO_SPACE_REGS || TARGET_FAST_INDIRECT_CALLS") (ne (symbol_ref "TARGET_FAST_INDIRECT_CALLS")
(const_int 0)) (const_int 0))
(const_int 8) (const_int 8)
...@@ -6029,19 +6013,18 @@ ...@@ -6029,19 +6013,18 @@
(const_int 0))) (const_int 0)))
(const_int 8) (const_int 8)
;; Out of reach, but not PIC or PORTABLE_RUNTIME ;; Out of reach PIC
(and (eq (symbol_ref "TARGET_PORTABLE_RUNTIME") (ne (symbol_ref "flag_pic")
(const_int 0)) (const_int 0))
(eq (symbol_ref "flag_pic") (const_int 24)
(const_int 0)))
(const_int 12)
;; Out of reach PORTABLE_RUNTIME
(ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (ne (symbol_ref "TARGET_PORTABLE_RUNTIME")
(const_int 0)) (const_int 0))
(const_int 20)] (const_int 20)]
;; Out of range PIC case ;; Out of reach, can use ble
(const_int 24)))]) (const_int 12)))])
;; Call subroutine returning any type. ;; Call subroutine returning any type.
...@@ -7109,26 +7092,18 @@ ...@@ -7109,26 +7092,18 @@
(const_int 0))) (const_int 0)))
(const_int 28) (const_int 28)
;; NO_SPACE_REGS ;; Out of reach PIC
(ne (symbol_ref "TARGET_NO_SPACE_REGS || TARGET_FAST_INDIRECT_CALLS") (ne (symbol_ref "flag_pic")
(const_int 0))
(const_int 32)
;; Out of reach, but not PIC or PORTABLE_RUNTIME
;; same as NO_SPACE_REGS code
(and (eq (symbol_ref "TARGET_PORTABLE_RUNTIME")
(const_int 0)) (const_int 0))
(eq (symbol_ref "flag_pic") (const_int 44)
(const_int 0)))
(const_int 32)
;; PORTABLE_RUNTIME ;; Out of reach PORTABLE_RUNTIME
(ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (ne (symbol_ref "TARGET_PORTABLE_RUNTIME")
(const_int 0)) (const_int 0))
(const_int 40)] (const_int 40)]
;; Out of range and PIC ;; Out of reach, can use ble
(const_int 44)))]) (const_int 32)))])
;; On the PA, the PIC register is call clobbered, so it must ;; On the PA, the PIC register is call clobbered, so it must
;; be saved & restored around calls by the caller. If the call ;; be saved & restored around calls by the caller. If the call
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment