aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Earnshaw <rearnsha@arm.com>2003-03-20 22:04:56 +0000
committerRichard Earnshaw <rearnsha@gcc.gnu.org>2003-03-20 22:04:56 +0000
commit228692e24fc8aa6aa3dbf470f4bc25b93e031dde (patch)
tree3802129a0f15fe0c9e8aa4d81b93e8e305869851 /gcc
parenta260bce67642765094ec0bbfa3687876c7a2f51c (diff)
downloadgcc-228692e24fc8aa6aa3dbf470f4bc25b93e031dde.zip
gcc-228692e24fc8aa6aa3dbf470f4bc25b93e031dde.tar.gz
gcc-228692e24fc8aa6aa3dbf470f4bc25b93e031dde.tar.bz2
re PR target/10066 ([arm-linux] libjava build error on arm-linux)
PR 10066 * arm.md (UNSPEC_PIC_BASE): New constant. (pic_add_dot_plus_four): Wrap with unspec. (pic_add_dot_plus_eight): Likewise. From-SVN: r64626
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/config/arm/arm.md14
2 files changed, 18 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 6f248a8..9ad15c8 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2003-03-20 Richard Earnshaw <rearnsha@arm.com>
+
+ PR 10066
+ * arm.md (UNSPEC_PIC_BASE): New constant.
+ (pic_add_dot_plus_four): Wrap with unspec.
+ (pic_add_dot_plus_eight): Likewise.
+
2003-03-20 Kazu Hirata <kazu@cs.umass.edu>
* config/h8300/h8300.md (*insv_si_1_n): New.
diff --git a/gcc/config/arm/arm.md b/gcc/config/arm/arm.md
index 7ad63f2..4e11128 100644
--- a/gcc/config/arm/arm.md
+++ b/gcc/config/arm/arm.md
@@ -56,7 +56,11 @@
(UNSPEC_PIC_SYM 3) ; A symbol that has been treated properly for pic
; usage, that is, we will add the pic_register
; value to it before trying to dereference it.
- (UNSPEC_PRLG_STK 4) ; A special barrier that prevents frame accesses
+ (UNSPEC_PIC_BASE 4) ; Adding the PC value to the offset to the
+ ; GLOBAL_OFFSET_TABLE. The operation is fully
+ ; described by the RTL but must be wrapped to
+ ; prevent combine from trying to rip it apart.
+ (UNSPEC_PRLG_STK 5) ; A special barrier that prevents frame accesses
; being scheduled before the stack adjustment insn.
(UNSPEC_PROLOGUE_USE 6) ; As USE insns are not meaningful after reload,
; this unspec is used to prevent the deletion of
@@ -3825,7 +3829,9 @@
(define_insn "pic_add_dot_plus_four"
[(set (match_operand:SI 0 "register_operand" "+r")
- (plus:SI (match_dup 0) (const (plus:SI (pc) (const_int 4)))))
+ (unspec:SI [(plus:SI (match_dup 0)
+ (const (plus:SI (pc) (const_int 4))))]
+ UNSPEC_PIC_BASE))
(use (label_ref (match_operand 1 "" "")))]
"TARGET_THUMB && flag_pic"
"*
@@ -3838,7 +3844,9 @@
(define_insn "pic_add_dot_plus_eight"
[(set (match_operand:SI 0 "register_operand" "+r")
- (plus:SI (match_dup 0) (const (plus:SI (pc) (const_int 8)))))
+ (unspec:SI [(plus:SI (match_dup 0)
+ (const (plus:SI (pc) (const_int 8))))]
+ UNSPEC_PIC_BASE))
(use (label_ref (match_operand 1 "" "")))]
"TARGET_ARM && flag_pic"
"*