base/dispatch-x86ish.S: Capture the `xmm0' address in a register.
[catacomb] / base / dispatch-x86ish.S
index c3725fc..94f44ee 100644 (file)
@@ -132,16 +132,17 @@ FUNC(dispatch_x86ish_xmmregisters_p)
 
        // Save the floating point and SIMD registers, and try to clobber
        // xmm0.
+       lea     DX, [SP + 160]
        fxsave  [SP]
-       mov     eax, [SP + 160]
-       xor     dword ptr [SP + 160], 0xaaaa5555
+       mov     eax, [DX]
+       xor     dword ptr [DX], 0xaaaa5555
        fxrstor [SP]
 
        // Save them again, and read back the low word of xmm0.  Undo the
        // clobbering and restore.
        fxsave  [SP]
-       mov     ecx, [SP + 160]
-       mov     [SP + 160], eax
+       mov     ecx, [DX]
+       mov     [DX], eax
        fxrstor [SP]
 
        // The register are live if we read different things.