title: Is this a valid x86 assembly instruction?
body: <p>I just downloaded the latest version of SmartMusic (http://www.smartmusic.com) and tried running it for the first time.<br>
  The thing is, there is an unhandled Win32 exception at the splash screen.<br>
  Being a geek/hacker (in the original sense of the word) I of course wanted to find out why things were that way, so I opened my Visual Studio debugger to take a look at the assembly and run it under a debugger.<br>
  The unhandled exception is an 'Illegal Instruction' and the instruction that is tripping it up is:<br>
  <code>cvtdq2ps    xmm0,xmm0</code><br>
  Now, I don't really know much assembly, but this looks like a valid instruction to me (<a href="http://siyobik.info/main/reference/instruction/CVTDQ2PS" rel="nofollow">here</a> is some information on it) so I was wondering if anyone knows how this is wrong and how (if possible) to fix it.<br>
  (i would rather fix something and just get it over with than spend an hour on the phone with tech support and just get "we'll have somebody look at it thanks for calling have a nice day <code>*</code>click<code>*</code>")<br>
  By the way, I have tried reinstalling it, so it's not that :) </p>
  
  <p>here's the code before and after the exception</p>
  
  <pre><code>je          004DBAEA  
  mov         edx,dword ptr [esp+8]  
  push        edx  
  call        007806A0  
  mov         eax,dword ptr [esi+4]  
  mov         ecx,dword ptr [eax+3EF0h]  
  test        ecx,ecx  
  je          004DBAFC  
  call        007506A0  
  mov         eax,dword ptr [esi+1CCh]  
  mov         ecx,dword ptr [esi+4]  
  mov         edx,dword ptr [ecx]  
  push        eax  
  mov         eax,dword ptr [edx+218h]  
  call        eax  
  mov         ecx,dword ptr [esi+4]  
  mov         edx,dword ptr [ecx]  
  movd        xmm0,dword ptr [esi+1B8h]  
  mov         eax,dword ptr [edx+26Ch]  
  push        ecx  
  cvtdq2ps    xmm0,xmm0   ; this is the instruction it chokes on
  movss       dword ptr [esp],xmm0  
  call        eax  
  mov         ecx,dword ptr [esi+4]  
  movss       xmm0,dword ptr [esi+1ACh]  
  movss       dword ptr [ecx+4ACh],xmm0  
  xor         eax,eax  
  cmp         dword ptr [esi+1B0h],eax  
  setne       al  
  cmp         eax,1  
  mov         dword ptr [esi+1B0h],eax  
  mov         eax,dword ptr [esi+4]  
  sete        dl  
  mov         byte ptr [eax+0ED2h],dl  
  mov         edx,dword ptr [esi+4]  
  xor         eax,eax  
  cmp         dword ptr [esi+1B4h],eax  
  setne       al  
  cmp         eax,1
  </code></pre>