diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a183c593791..dcc0393c8e6 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +Tue Oct 19 18:42:58 1999 Bernd Schmidt + + * 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 2e6e969828f..27fc21d939a 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: