I originally intended to submit the first part of this patch set a few weeks ago as it was simpler, but here is the full fix. The first part is a really simple follow-up fix to an off-by-one error H.J. originally fixed with r252099, but in the process of testing I discovered a more complex problem when we add a ms_abi to sysv_abi call that resulted in a bad INSN because I didn't check for a non-immediate offset.
I originally wrote a different solution where I added a mechanism to struct ix86_frame to track and reuse a scratch register in the pro/epilogue, but then I realized that I didn't need that if I just emitted the SSE saves or stub call after the SP realignment and prior to allocating the remainder of the frame. However, I still need to use a scratch register sometimes in the epilogue, so I've added a simplified mechanism to choose_baseaddr to manage that, but not to track and reuse it for subsequent calls. Unfortunately, this sat for so long that there's two duplicates in Bugzilla now (pr82485 and pr82712). Regression tested with {,-m32} and I've started one for x32 even though it *shouldn't* affect it (in theory). Thanks, Daniel