diff options
author | Richard Stallman <rms@gnu.org> | 1993-08-01 20:11:48 +0000 |
---|---|---|
committer | Richard Stallman <rms@gnu.org> | 1993-08-01 20:11:48 +0000 |
commit | 19b2fd27ea262649afb3869fa0b1e98153121829 (patch) | |
tree | 1a2969b301109c1ab2c9f6ba3c640b73726dc15a /gcc | |
parent | 89ef1046347b12a5e4a989650dbcb8cbcbd6ef1f (diff) | |
download | gcc-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.c | 16 |
1 files changed, 10 insertions, 6 deletions
@@ -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; |