I'm working with a target that has 32-bit word addressing,
so there is a define of BITS_PER_UNIT = 32.

This causes a problem:  an error saying that there is
no emulation for 'DI'.  DImode has a precision of 128 bits,
which is clearly incorrect.  (All the other integer modes
were incorrect as well.)

DI is defined in machmode.def as
  INT_MODE (DI, 8).

This is sort-of correct, DI is an 8 byte or 2 word value.

When this is used to generate insn-modes.c, its size is
generated as 8*BITS_PER_UNIT, not 2*BITS_PER_UNIT,
because, it seems, genmodes assumes that size in bits is
is bytesize*BITS_PER_UNIT.  In emit_mode_precision() in
genmodes.c the assumption is pretty clear.

I built the c4x target, since that's the only example of
a target with BITS_PER_UNIT set.  It looks like this target
is defunct and slated for removal.  It gets the same error.

If BITS_PER_UNIT should alway be bytesize, then it seems
unnecessary to have the definition of BITS_PER_UNIT.  Or
it looks like genmodes.c needs to have another define,
BYTES_PER_UNIT, so that it can correctly convert from
bytesize to the number of units for the target.  Or the
definition of integer sizes should be directly in bits,
without any reference to bytesize.

Is there a different way to define word-addressed targets?
Or should I just pretend it has byte addressing?

--
Michael Eager    [EMAIL PROTECTED]
1960 Park Blvd., Palo Alto, CA 94306  650-325-8077

Reply via email to