• fschneider@chromium.org's avatar
    Re-enable using push instructions for syncing the virtual frame. · 53bee811
    fschneider@chromium.org authored
    This change fixes the problem with the original version of this approach
    (r3032) that may lead to a corrupted stack if we would invoke spilling during 
    syncing a large SMI constant (unsafe SMIs) in the virtual frame.
    
    The new code for storing unsafe SMI constants does not use an extra temporary 
    register. This prevents the compiler from ever having to spill during a 
    virutal frame sync operation.
    
    For storing a large SMI constant we previously generated:
    
      mov ecx, (large_smi & 0x0000ffff)
      xor ecx, (large_smi & 0xffff0000)
      push ecx
    
    we now generate:
    
      push (large_smi & 0x0000ffff)
      or   [esp], (large_smi & 0xffff0000)
    
    Not using a temporary register avoids spilling within an nvocation 
    of VirtualFrame::SyncRange.
    
    Review URL: http://codereview.chromium.org/391079
    
    git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@3313 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
    53bee811
register-allocator-ia32.cc 3.8 KB