I never use signed vars (why would i want to limit my self to a predetermined split), so this is not a problem that i face. Still implementing a macro or function to do this is would be much more efficient then that multiplication nonsense.
I could see how there might be issues with signed vars. seeing as it is spans 16 bits and has to manage the split, it would have to do some interesting stuff to move that all around, and not end up shoving data in to the + side. I would have to look at the asm and memory sim to see what is actually happening (when are they going to get some real debugging tools to work with these). Anyway while on this topic people might find this of interest.
http://www.microchipc.com/Hi-Tech_C_speed_optimization/
I am a little paranoid when it come to data size and clock cycles if you could not tell.
EDIT:
fyi the shift you have to do for signed is called Arithmetic Shift.