This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
PowerPC PIC code addressibility tweak
- From: David Edelsohn <dje at watson dot ibm dot com>
- To: gcc-patches at gcc dot gnu dot org
- Date: Wed, 30 Oct 2002 10:59:58 -0500
- Subject: PowerPC PIC code addressibility tweak
The PowerPC architecture recommends a preferred form for a
branch-and-link instruction that will not return, but used to obtain
addressibility for PIC code. This form does not corrupt the link register
history stack. Darwin already uses this form. This patch converts SVR4
PIC code to use this form as well, as pointed out by Tege.
David
* config/rs6000/rs6000.md (load_toc_v4_PIC_1): Use preferred form
for addressibility.
(load_toc_v4_PIC_1b): Same.
Index: rs6000.md
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/rs6000/rs6000.md,v
retrieving revision 1.218
diff -c -p -r1.218 rs6000.md
*** rs6000.md 19 Oct 2002 04:36:30 -0000 1.218
--- rs6000.md 30 Oct 2002 15:52:10 -0000
***************
*** 10272,10278 ****
(match_operand:SI 1 "immediate_operand" "s"))
(unspec [(match_dup 1)] 7)]
"TARGET_ELF && DEFAULT_ABI != ABI_AIX && flag_pic == 2"
! "bl %1\\n%1:"
[(set_attr "type" "branch")
(set_attr "length" "4")])
--- 10272,10278 ----
(match_operand:SI 1 "immediate_operand" "s"))
(unspec [(match_dup 1)] 7)]
"TARGET_ELF && DEFAULT_ABI != ABI_AIX && flag_pic == 2"
! "bcl 20,31,%1\\n%1:"
[(set_attr "type" "branch")
(set_attr "length" "4")])
***************
*** 10281,10287 ****
(match_operand:SI 1 "immediate_operand" "s"))
(unspec [(match_dup 1) (match_operand 2 "immediate_operand" "s")] 6)]
"TARGET_ELF && DEFAULT_ABI != ABI_AIX && flag_pic == 2"
! "bl %1\\n\\t.long %2-%1+4\\n%1:"
[(set_attr "type" "branch")
(set_attr "length" "8")])
--- 10281,10287 ----
(match_operand:SI 1 "immediate_operand" "s"))
(unspec [(match_dup 1) (match_operand 2 "immediate_operand" "s")] 6)]
"TARGET_ELF && DEFAULT_ABI != ABI_AIX && flag_pic == 2"
! "bcl 20,31,%1\\n\\t.long %2-%1+4\\n%1:"
[(set_attr "type" "branch")
(set_attr "length" "8")])