> (insn 28 26 29 1 /mnt/disk2/src/gcc/gcc/libgcc2.c:464 (set (mem/i:HI > (reg/f:HI 8 si [orig:30 D.1371 ] [30]) [5 <result>+0 S2 A16]) > (subreg:HI (reg/v:DI 31 [ u ]) 0)) 1 {*movhi} (nil) > (nil))
This is a tricky one. You need to split up the moves early enough to let reload be flexible, but not so early that you lose optimization opportunities. One thing I've tried in similar cases is not allowing subregs for all move constraints, forcing gcc to do the subreg and the mem in different insns. > BTW DJ, I've changed the register model to treat al, ah, etc. as > first-class registers, with ax, dx:ax as simply groupings a la > HARD_REGNO_NREGS. Yup, that's what I do these days.