This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
BITS_PER_UNIT larger than 8 -- word addressing
- From: Michael Eager <eager at eagercon dot com>
- To: GCC <gcc at gcc dot gnu dot org>
- Date: Mon, 26 Nov 2007 18:30:49 -0800
- Subject: BITS_PER_UNIT larger than 8 -- word addressing
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 eager@eagercon.com
1960 Park Blvd., Palo Alto, CA 94306 650-325-8077