diff options
author | Kaz Kojima <kkojima@gcc.gnu.org> | 2005-10-21 14:09:31 +0000 |
---|---|---|
committer | Kaz Kojima <kkojima@gcc.gnu.org> | 2005-10-21 14:09:31 +0000 |
commit | 6058b2fa2cc5799e442cc8c7a02bff0b170b6025 (patch) | |
tree | 39f9a75c2ec368a77dcd5189f93b6ef4dceb0fc8 /gcc | |
parent | de19a50ee491251b17eb9aa2ed2f22361a37c211 (diff) | |
download | gcc-6058b2fa2cc5799e442cc8c7a02bff0b170b6025.zip gcc-6058b2fa2cc5799e442cc8c7a02bff0b170b6025.tar.gz gcc-6058b2fa2cc5799e442cc8c7a02bff0b170b6025.tar.bz2 |
sh.c (prepare_move_operands): Handle the address constant which is a tls symbolic address plus a constant.
* config/sh/sh.c (prepare_move_operands): Handle the address
constant which is a tls symbolic address plus a constant.
From-SVN: r105736
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/config/sh/sh.c | 14 |
2 files changed, 18 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6ff0307..d7a6e59 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2005-10-21 Kaz Kojima <kkojima@gcc.gnu.org> + + * config/sh/sh.c (prepare_move_operands): Handle the address + constant which is a tls symbolic address plus a constant. + 2005-10-21 Andrew Pinski <pinskia@physics.uc.edu> PR driver/24473 diff --git a/gcc/config/sh/sh.c b/gcc/config/sh/sh.c index 3e0caf1..e11d557 100644 --- a/gcc/config/sh/sh.c +++ b/gcc/config/sh/sh.c @@ -1238,11 +1238,21 @@ prepare_move_operands (rtx operands[], enum machine_mode mode) if (mode == Pmode || mode == ptr_mode) { - rtx op0, op1; + rtx op0, op1, opc; enum tls_model tls_kind; op0 = operands[0]; op1 = operands[1]; + if (GET_CODE (op1) == CONST + && GET_CODE (XEXP (op1, 0)) == PLUS + && tls_symbolic_operand (XEXP (XEXP (op1, 0), 0), Pmode)) + { + opc = XEXP (XEXP (op1, 0), 1); + op1 = XEXP (XEXP (op1, 0), 0); + } + else + opc = NULL_RTX; + if ((tls_kind = tls_symbolic_operand (op1, Pmode))) { rtx tga_op1, tga_ret, tmp, tmp2; @@ -1308,6 +1318,8 @@ prepare_move_operands (rtx operands[], enum machine_mode mode) default: gcc_unreachable (); } + if (opc) + emit_insn (gen_addsi3 (op1, op1, force_reg (SImode, opc))); operands[1] = op1; } } |