> vects[A0_VEC] = __builtin_pointer32 (timer_a0_handler); Note that the builtin would be needed for run-time conversion between pointers of different sizes, i.e. casts. Why? Well, gcc doesn't "just know" how to do such conversions. For example, TPF has a 31 bit address. To convert it to 64, you clear the MSB and zero extend. To convert back, you truncate and set the MSB (if you clear the MSB, you end up with a 24 bit address, it's a "size flag"). In theory, 64 bit addresses should always have the LSB set too.
But a compile-time assigment of a symbol to a pointer should "just work" as long as the assembler supports it (I fixed that bug some months ago).