From: H. P. A. <hp...@zy...> - 2013-02-20 17:34:33
|
On 02/20/2013 09:23 AM, H. Peter Anvin wrote: > On 02/19/2013 09:39 PM, Ben Rudiak-Gould wrote: >> This adds "np" to a bunch of SSE-style instructions that should have >> it, "norep" (which was implemented but unused) on quasi-SSE >> instructions that use F2 and F3 as instruction extensions but 66 for >> operand size, "nof3" (newly implemented) on a few instructions, >> "norexw" on some instructions that have only 32-bit and 64-bit >> versions, and one NOLONG. It also removes some incorrect "np"s, >> changes some "f3"s to "f3i"s, and fixes the decoding of the >> XCHG/NOP/PAUSE mess: F390 is always PAUSE even when rex.b=1 (at least >> according to XED). > > It should have been REX.R not REX.B, to prevent: > > [rep] xchg r8,rax > > ... from being treated as NOP or PAUSE. > Ah, but despite the documentation it is REX.B, not REX.R. And yes, I can confirm this applies to PAUSE but *NOT* NOP, at least on Sandy Bridge, i.e.: F3 49 90 - PAUSE (no swap) 49 90 - XCHG R8,RAX (registers do swap) Odd, but that's how it works. -hpa -- H. Peter Anvin, Intel Open Source Technology Center I work for Intel. I don't speak on their behalf. |