<html><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><br>On Dec 7, 2010, at 3:44 PM, Eric Christopher wrote:<br><br><blockquote type="cite"><br>On Dec 7, 2010, at 3:08 PM, Evan Cheng wrote:<br><br><blockquote type="cite">Fix a bad prologue / epilogue codegen bug where the compiler would emit illegal<br>vpush instructions to save / restore VFP / NEON registers like this:<br>vpush {d8,d10,d11}<br>vpop {d8,d10,d11}<br><br>vpush and vpop do not allow gaps in the register list.<br><a href="rdar://8728956">rdar://8728956</a><br><br></blockquote><br>Thanks for fixing this!<br><br>This was somewhat hard to follow, I had to read it a couple of times to make sure I knew the looping order. It could use a couple of comments as to what's going on, something like:<br><br>"If NoGap is enabled then split up the pushes to ensure that the registers are adjacent, e.g.<br> vpush {d8, d10, d11} becomes the two pushes vpush {d8 } ; vpush { d10, d11 }"<br><br>Might be clearer what's going on if we just did a second pass through the Regs vector after grabbing all of the matching registers?<br><br>while (!Regs.empty())<br> …<br><br>and then just pop regs as we iterate through?<br><br>Thoughts?<br></blockquote><br><div>Enh, that wouldn't be any better :)</div><div><br></div><div>The comments would still be awesome though.</div><div><br></div><div>-eric</div></body></html>