rgoguen@bbn.com (Robert J Goguen) (10/22/88)
Folks
I'm porting gcc to the 3B2. The following code causes
gcc-cc1 to abort in expr.c line 1042 because I don't have a movdi defined.
-----------------------------------------------------------------
struck junk {
int x;
int y;
} d0 ;
main()
{
d0.x = 1 ;
d0.y = 1;
printit(d0);
}
printit(d)
struct junk d0;
{
printf("x = %d y = %d\n",d.x,d.y);
}
-----------------------------------------------------------------
My md file doesn't have a "movdi" pattern. When gcc-cc1 gets in
the emit_move_insn code is has the MODE set as Dimode. Since I don't have
a movdi defined mov_optab->handlers[(int) mode].insn_code == CODE_FOR_nothing
and gcc-cc1 aborts().
Is there something I'm doing wrong? Do I have to define a movdi
pattern? Or as the manual suggests, it is easy to code around this by adding
another field to the junk struct. If I add another variable to the junk struct
this code compiles file and doesn't crash gcc-cc1.
Here is a piece of the code in gcc-cc1 that is aborting.
rtx
emit_move_insn (x, y)
rtx x, y;
{
enum machine_mode mode = GET_MODE (x);
:
:
:
:
if (mov_optab->handlers[(int) mode].insn_code != CODE_FOR_nothing)
return
emit_insn (GEN_FCN (mov_optab->handlers[(int) mode].insn_code) (x, y));
else
abort (); <<<===== I end up here and gcc-cc1 aborts!!
}
:
:
For any help I would be grateful.
Thanks
Bob Goguen