This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
making sizeof(void*) different from sizeof(void(*)())
- From: Peter Bigot <bigotp at acm dot org>
- To: gcc at gcc dot gnu dot org
- Date: Sat, 28 Apr 2012 14:32:18 -0500
- Subject: making sizeof(void*) different from sizeof(void(*)())
The MSP430's split address space and ISA make it expensive to place
data above the 64 kB boundary, but cheap to place code there. So I'm
looking for a way to use HImode for data pointers, but PSImode for
function pointers. If gcc supports this, it's not obvious how.
I get partway there with FUNCTION_MODE and some hacks for the case
where the called object is a symbol, but not when it's a
pointer-to-function data object. As an example, bootstrapping fails
in libgcc/unwind-dw2-fde.c because the fde_compare pointer-to-function
object is stored in a HImode register instead of a PSImode register.
The only candidate solution I've seen (and haven't yet tried) is to
somehow assign all functions to be in a special named address space
and use TARGET_ADDR_SPACE_POINTER_MODE to override the normal use of
ptr_mode in build_pointer_type.
I haven't been able to identify an existing back-end that has such a
case, though I'd swear I've seen memory models like this for some
other processor in the past.
Could somebody suggest a workable solution for 4.7.x?
Thanks.
Peter