Commit 619aeb96 by Jim Wilson Committed by Jim Wilson

Fix for m68k -O0 libstdc++ compiler abort.

	* config/m68k/m68k.h (HARD_REGNO_MODE_OK): For FP regs, add REGNO >= 16
	check.  Add comment to document problems with TARGET_SUN_FPA version
	of this macro.
	* config/m68k/m68k.md (movxf+1): Support 'r'/'r' moves.

From-SVN: r23056
parent 160a655e
Tue Oct 13 17:51:04 1998 Jim Wilson <wilson@cygnus.com>
* config/m68k/m68k.h (HARD_REGNO_MODE_OK): For FP regs, add REGNO >= 16
check. Add comment to document problems with TARGET_SUN_FPA version
of this macro.
* config/m68k/m68k.md (movxf+1): Support 'r'/'r' moves.
Tue Oct 13 17:46:18 1998 Kaveh R. Ghazi <ghazi@caip.rutgers.edu> Tue Oct 13 17:46:18 1998 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* Makefile.in (gencheck.o): Depend on gansidecl.h. * Makefile.in (gencheck.o): Depend on gansidecl.h.
......
...@@ -471,8 +471,8 @@ extern int target_flags; ...@@ -471,8 +471,8 @@ extern int target_flags;
#define HARD_REGNO_MODE_OK(REGNO, MODE) \ #define HARD_REGNO_MODE_OK(REGNO, MODE) \
(((REGNO) < 16 \ (((REGNO) < 16 \
&& !((REGNO) < 8 && (REGNO) + GET_MODE_SIZE ((MODE)) / 4 > 8)) \ && !((REGNO) < 8 && (REGNO) + GET_MODE_SIZE (MODE) / 4 > 8)) \
|| ((REGNO) < 24 \ || ((REGNO) >= 16 && (REGNO) < 24 \
&& TARGET_68881 \ && TARGET_68881 \
&& (GET_MODE_CLASS (MODE) == MODE_FLOAT \ && (GET_MODE_CLASS (MODE) == MODE_FLOAT \
|| GET_MODE_CLASS (MODE) == MODE_COMPLEX_FLOAT))) || GET_MODE_CLASS (MODE) == MODE_COMPLEX_FLOAT)))
...@@ -486,6 +486,11 @@ extern int target_flags; ...@@ -486,6 +486,11 @@ extern int target_flags;
(apparently) hold whatever you feel like putting in them. (apparently) hold whatever you feel like putting in them.
If using the fpa, don't put a double in d7/a0. */ If using the fpa, don't put a double in d7/a0. */
/* ??? This is confused. The check to prohibit d7/a0 overlaps should always
be enabled regardless of whether TARGET_FPA is specified. It isn't clear
what the other d/a register checks are for. Every check using REGNO
actually needs to use a range, e.g. 24>=X<56 not <56. There is probably
no one using this code anymore. */
#define HARD_REGNO_MODE_OK(REGNO, MODE) \ #define HARD_REGNO_MODE_OK(REGNO, MODE) \
(((REGNO) < 16 \ (((REGNO) < 16 \
&& !(TARGET_FPA \ && !(TARGET_FPA \
......
...@@ -1224,8 +1224,8 @@ ...@@ -1224,8 +1224,8 @@
}") }")
(define_insn "" (define_insn ""
[(set (match_operand:XF 0 "nonimmediate_operand" "=f,m,f,!r,!f") [(set (match_operand:XF 0 "nonimmediate_operand" "=f,m,f,!r,!f,!r")
(match_operand:XF 1 "nonimmediate_operand" "m,f,f,f,r"))] (match_operand:XF 1 "nonimmediate_operand" "m,f,f,f,r,!r"))]
"TARGET_68881" "TARGET_68881"
"* "*
{ {
...@@ -1247,6 +1247,8 @@ ...@@ -1247,6 +1247,8 @@
return \"fmove%.x %1,%0\"; return \"fmove%.x %1,%0\";
return \"fmove%.x %f1,%0\"; return \"fmove%.x %f1,%0\";
} }
if (FP_REG_P (operands[1]))
{
if (REG_P (operands[0])) if (REG_P (operands[0]))
{ {
output_asm_insn (\"fmove%.x %f1,%-\;move%.l %+,%0\", operands); output_asm_insn (\"fmove%.x %f1,%-\;move%.l %+,%0\", operands);
...@@ -1255,7 +1257,10 @@ ...@@ -1255,7 +1257,10 @@
operands[0] = gen_rtx_REG (SImode, REGNO (operands[0]) + 1); operands[0] = gen_rtx_REG (SImode, REGNO (operands[0]) + 1);
return \"move%.l %+,%0\"; return \"move%.l %+,%0\";
} }
/* Must be memory destination. */
return \"fmove%.x %f1,%0\"; return \"fmove%.x %f1,%0\";
}
return output_move_double (operands);
} }
") ")
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment