You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Turns out our 64-bit move to rsi becomes a 32-bit move into esi? But esi is used as base pointer in this function; we have now clobbered it and will crash a few lines down.
The 64-bit move looks like this (this is from "Before Expand ISel Pseudo-instructions"):
Extended Description
To reproduce:
clang -cc1 -triple i386-pc-win32 -mstackrealign -target-cpu pentium4 -fms-extensions -S -o - b.ii
We're miscompiling this statement:
updateAnimations(SMILTime(m_presetStartTime), m_presetStartTime ? true : false);
In Clang's asm printout, we have this:
Note that the last instruction tries to move xmm1 to a 64-bit register, but we're targeting i386.
Disassembling the object file shows different instructions:
000000AE: F2 0F 10 42 20 movsd xmm0,mmword ptr [edx+20h]
000000B3: 0F 57 C9 xorps xmm1,xmm1
000000B6: F2 0F C2 C8 04 cmpneqsd xmm1,xmm0
000000BB: 66 0F 7E CE movd esi,xmm1
Turns out our 64-bit move to rsi becomes a 32-bit move into esi? But esi is used as base pointer in this function; we have now clobbered it and will crash a few lines down.
The 64-bit move looks like this (this is from "Before Expand ISel Pseudo-instructions"):
after register allocation, we think we're moving into rsi:
There's something strange going on here :)
(This is reduced from WebCore::SMILTimeContainer::begin.)
The text was updated successfully, but these errors were encountered: