From b1978a904a9dc3e009c7f422e985269b2837bf2c Mon Sep 17 00:00:00 2001 From: John David Anglin Date: Thu, 15 Oct 2009 23:22:44 +0000 Subject: [PATCH] re PR target/41702 (FAIL: abi/demangle/abi_text/09.cc execution test) PR target/41702 * pa.md (casesi): Use sign extended index in call to gen_casesi64p. (casesi64p): Update pattern to reflect above. From-SVN: r152882 --- gcc/ChangeLog | 7 +++++++ gcc/config/pa/pa.md | 25 ++++++++++++------------- 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 211fc0788c7..d0e8faab622 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2009-10-15 John David Anglin + + PR target/41702 + * pa.md (casesi): Use sign extended index in call to + gen_casesi64p. + (casesi64p): Update pattern to reflect above. + 2009-10-15 Steve Ellcey PR rtl-optimization/41697 diff --git a/gcc/config/pa/pa.md b/gcc/config/pa/pa.md index 20f64449097..d10a40d55e1 100644 --- a/gcc/config/pa/pa.md +++ b/gcc/config/pa/pa.md @@ -7120,17 +7120,6 @@ operands[0] = index; } - /* In 64bit mode we must make sure to wipe the upper bits of the register - just in case the addition overflowed or we had random bits in the - high part of the register. */ - if (TARGET_64BIT) - { - rtx index = gen_reg_rtx (DImode); - - emit_insn (gen_extendsidi2 (index, operands[0])); - operands[0] = gen_rtx_SUBREG (SImode, index, 4); - } - if (!INT_5_BITS (operands[2])) operands[2] = force_reg (SImode, operands[2]); @@ -7149,6 +7138,17 @@ emit_jump_insn (gen_cbranchsi4 (test, operands[0], operands[2], operands[4])); } + /* In 64bit mode we must make sure to wipe the upper bits of the register + just in case the addition overflowed or we had random bits in the + high part of the register. */ + if (TARGET_64BIT) + { + rtx index = gen_reg_rtx (DImode); + + emit_insn (gen_extendsidi2 (index, operands[0])); + operands[0] = index; + } + if (TARGET_BIG_SWITCH) { if (TARGET_64BIT) @@ -7209,8 +7209,7 @@ ;;; 64-bit code, 32-bit relative branch table. (define_insn "casesi64p" [(set (pc) (mem:DI (plus:DI - (mult:DI (sign_extend:DI - (match_operand:SI 0 "register_operand" "r")) + (mult:DI (match_operand:DI 0 "register_operand" "r") (const_int 8)) (label_ref (match_operand 1 "" ""))))) (clobber (match_scratch:DI 2 "=&r")) -- 2.30.2