• L
    KVM: VMX: Let gcc to choose which registers to save (i386) · ff593e5a
    Laurent Vivier 提交于
    This patch lets GCC to determine which registers to save when we
    switch to/from a VCPU in the case of intel i386.
    
    * Original code saves following registers:
    
        eax, ebx, ecx, edx, edi, esi, ebp (using popa)
    
    * Patched code:
    
      - informs GCC that we modify following registers
        using the clobber description:
    
        ebx, edi, rsi
    
      - doesn't save eax because it is an output operand (vmx->fail)
    
      - cannot put ecx in clobber description because it is an input operand,
        but as we modify it and we want to keep its value (vcpu), we must
        save it (pop/push)
    
      - ebp is saved (pop/push) because GCC seems to ignore its use the clobber
        description.
    
      - edx is saved (pop/push) because it is reserved by GCC (REGPARM) and
        cannot be put in the clobber description.
    
      - line "mov (%%esp), %3 \n\t" has been removed because %3
        is ecx and ecx is restored just after.
    Signed-off-by: NLaurent Vivier <Laurent.Vivier@bull.net>
    Signed-off-by: NAvi Kivity <avi@qumranet.com>
    ff593e5a
vmx.c 64.9 KB