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