aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJim Wilson <wilson@gcc.gnu.org>1996-08-05 14:27:22 -0700
committerJim Wilson <wilson@gcc.gnu.org>1996-08-05 14:27:22 -0700
commit519164a9ede028adf015270894441fb30433d969 (patch)
tree17584a61cabfdf339af8116200b0e9cb6a61cb65
parenta5049cf050b2b2f581c10201683176524fae15c3 (diff)
downloadgcc-519164a9ede028adf015270894441fb30433d969.zip
gcc-519164a9ede028adf015270894441fb30433d969.tar.gz
gcc-519164a9ede028adf015270894441fb30433d969.tar.bz2
(arith_reg_operand): Reject SUBREG of an invalid hard reg.
From-SVN: r12594
-rw-r--r--gcc/config/sh/sh.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/gcc/config/sh/sh.c b/gcc/config/sh/sh.c
index 6b8cc72..834e60b 100644
--- a/gcc/config/sh/sh.c
+++ b/gcc/config/sh/sh.c
@@ -2198,13 +2198,17 @@ arith_reg_operand (op, mode)
{
if (register_operand (op, mode))
{
+ int regno;
+
if (GET_CODE (op) == REG)
- return (REGNO (op) != T_REG
- && REGNO (op) != PR_REG
- && REGNO (op) != FPUL_REG
- && REGNO (op) != MACH_REG
- && REGNO (op) != MACL_REG);
- return 1;
+ regno = REGNO (op);
+ else if (GET_CODE (op) == SUBREG && GET_CODE (SUBREG_REG (op)) == REG)
+ regno = REGNO (SUBREG_REG (op));
+ else
+ return 1;
+
+ return (regno != T_REG && regno != PR_REG && regno != FPUL_REG
+ && regno != MACH_REG && regno != MACL_REG);
}
return 0;
}