aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Stallman <rms@gnu.org>1993-08-01 20:11:48 +0000
committerRichard Stallman <rms@gnu.org>1993-08-01 20:11:48 +0000
commit19b2fd27ea262649afb3869fa0b1e98153121829 (patch)
tree1a2969b301109c1ab2c9f6ba3c640b73726dc15a /gcc
parent89ef1046347b12a5e4a989650dbcb8cbcbd6ef1f (diff)
downloadgcc-19b2fd27ea262649afb3869fa0b1e98153121829.zip
gcc-19b2fd27ea262649afb3869fa0b1e98153121829.tar.gz
gcc-19b2fd27ea262649afb3869fa0b1e98153121829.tar.bz2
(do_tablejump): Use PIC_CASE_VECTOR_ADDRESS if defined.
From-SVN: r5050
Diffstat (limited to 'gcc')
-rw-r--r--gcc/expr.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/gcc/expr.c b/gcc/expr.c
index 85f78a7..c032024 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -8145,12 +8145,16 @@ do_tablejump (index, mode, range, table_label, default_label)
GET_MODE_SIZE, because this indicates how large insns are. The other
uses should all be Pmode, because they are addresses. This code
could fail if addresses and insns are not the same size. */
- index = memory_address_noforce
- (CASE_VECTOR_MODE,
- gen_rtx (PLUS, Pmode,
- gen_rtx (MULT, Pmode, index,
- GEN_INT (GET_MODE_SIZE (CASE_VECTOR_MODE))),
- gen_rtx (LABEL_REF, Pmode, table_label)));
+ index = gen_rtx (PLUS, Pmode,
+ gen_rtx (MULT, Pmode, index,
+ GEN_INT (GET_MODE_SIZE (CASE_VECTOR_MODE))),
+ gen_rtx (LABEL_REF, Pmode, table_label));
+#ifdef PIC_CASE_VECTOR_ADDRESS
+ if (flag_pic)
+ index = PIC_CASE_VECTOR_ADDRESS (index);
+ else
+#endif
+ index = memory_address_noforce (CASE_VECTOR_MODE, index);
temp = gen_reg_rtx (CASE_VECTOR_MODE);
vector = gen_rtx (MEM, CASE_VECTOR_MODE, index);
RTX_UNCHANGING_P (vector) = 1;