aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorBernd Schmidt <bernds@cygnus.co.uk>1999-10-19 16:47:23 +0000
committerBernd Schmidt <crux@gcc.gnu.org>1999-10-19 16:47:23 +0000
commit9ce71c6fbd07e2d71d9e921e40b53d944f1f64d4 (patch)
treecfb703ae6f1009de22feda8cb2b2c903799b6ca5 /gcc
parent3a2ea2588f030d5d810f454248616d69f10968d2 (diff)
downloadgcc-9ce71c6fbd07e2d71d9e921e40b53d944f1f64d4.zip
gcc-9ce71c6fbd07e2d71d9e921e40b53d944f1f64d4.tar.gz
gcc-9ce71c6fbd07e2d71d9e921e40b53d944f1f64d4.tar.bz2
arm.c: Verify modes on operands in predicates
From-SVN: r30088
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/config/arm/arm.c22
2 files changed, 25 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index a183c59..dcc0393 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+Tue Oct 19 18:42:58 1999 Bernd Schmidt <bernds@cygnus.co.uk>
+
+ * arm.c (fpu_rhs_operand): Verify modes.
+ (fpu_add_operand): Likewise.
+ (di_operand): Likewise.
+ (soft_df_operand): Likewise.
+
Tue Oct 19 15:26:11 1999 Richard Earnshaw (rearnsha@arm.com)
* arm.c (arm_return_in_memory): APCS rules state that the elements
diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c
index 2e6e969..27fc21d 100644
--- a/gcc/config/arm/arm.c
+++ b/gcc/config/arm/arm.c
@@ -2213,8 +2213,12 @@ fpu_rhs_operand (op, mode)
{
if (s_register_operand (op, mode))
return TRUE;
- else if (GET_CODE (op) == CONST_DOUBLE)
- return (const_double_rtx_ok_for_fpu (op));
+
+ if (GET_MODE (op) != mode && mode != VOIDmode)
+ return FALSE;
+
+ if (GET_CODE (op) == CONST_DOUBLE)
+ return const_double_rtx_ok_for_fpu (op);
return FALSE;
}
@@ -2226,7 +2230,11 @@ fpu_add_operand (op, mode)
{
if (s_register_operand (op, mode))
return TRUE;
- else if (GET_CODE (op) == CONST_DOUBLE)
+
+ if (GET_MODE (op) != mode && mode != VOIDmode)
+ return FALSE;
+
+ if (GET_CODE (op) == CONST_DOUBLE)
return (const_double_rtx_ok_for_fpu (op)
|| neg_const_double_rtx_ok_for_fpu (op));
@@ -2261,6 +2269,9 @@ di_operand (op, mode)
if (s_register_operand (op, mode))
return TRUE;
+ if (mode != VOIDmode && GET_MODE (op) != VOIDmode && GET_MODE (op) != DImode)
+ return FALSE;
+
if (GET_CODE (op) == SUBREG)
op = SUBREG_REG (op);
@@ -2291,9 +2302,12 @@ soft_df_operand (op, mode)
if (s_register_operand (op, mode))
return TRUE;
+ if (mode != VOIDmode && GET_MODE (op) != mode)
+ return FALSE;
+
if (GET_CODE (op) == SUBREG)
op = SUBREG_REG (op);
-
+
switch (GET_CODE (op))
{
case CONST_DOUBLE: