diff options
Diffstat (limited to 'src/VBox/VMM/testcase/tstX86-1A.asm')
| -rw-r--r-- | src/VBox/VMM/testcase/tstX86-1A.asm | 171 |
1 files changed, 89 insertions, 82 deletions
diff --git a/src/VBox/VMM/testcase/tstX86-1A.asm b/src/VBox/VMM/testcase/tstX86-1A.asm index 054f1ba1..176d3646 100644 --- a/src/VBox/VMM/testcase/tstX86-1A.asm +++ b/src/VBox/VMM/testcase/tstX86-1A.asm @@ -1521,7 +1521,7 @@ BEGINPROC x861_Test2 %endif .failed3: - add xSP, 20h + xS + add xSP, 20h + xCB jmp .return @@ -1941,7 +1941,7 @@ SaveFPUAndGRegsToStack: push xAX push xDI - lea xDI, [xSP + xS * 5] + lea xDI, [xSP + xCB * 5] mov xCX, 512 / 4 mov eax, 0cccccccch cld @@ -1953,69 +1953,69 @@ SaveFPUAndGRegsToStack: popf ; Save the FPU state. - mov dword [xSP + xS + X86FXSTATE.FPUIP], 0 - mov dword [xSP + xS + X86FXSTATE.FPUCS], 0 - mov dword [xSP + xS + X86FXSTATE.FPUDP], 0 - mov dword [xSP + xS + X86FXSTATE.FPUDS], 0 - arch_fxsave [xSP + xS] + mov dword [xSP + xCB + X86FXSTATE.FPUIP], 0 + mov dword [xSP + xCB + X86FXSTATE.FPUCS], 0 + mov dword [xSP + xCB + X86FXSTATE.FPUDP], 0 + mov dword [xSP + xCB + X86FXSTATE.FPUDS], 0 + arch_fxsave [xSP + xCB] ; Save GRegs (80h bytes). %ifdef RT_ARCH_AMD64 - mov [xSP + 512 + xS + 000h], xAX - mov [xSP + 512 + xS + 008h], xBX - mov [xSP + 512 + xS + 010h], xCX - mov [xSP + 512 + xS + 018h], xDX - mov [xSP + 512 + xS + 020h], xDI - mov [xSP + 512 + xS + 028h], xSI - mov [xSP + 512 + xS + 030h], xBP - mov [xSP + 512 + xS + 038h], r8 - mov [xSP + 512 + xS + 040h], r9 - mov [xSP + 512 + xS + 048h], r10 - mov [xSP + 512 + xS + 050h], r11 - mov [xSP + 512 + xS + 058h], r12 - mov [xSP + 512 + xS + 060h], r13 - mov [xSP + 512 + xS + 068h], r14 - mov [xSP + 512 + xS + 070h], r15 + mov [xSP + 512 + xCB + 000h], xAX + mov [xSP + 512 + xCB + 008h], xBX + mov [xSP + 512 + xCB + 010h], xCX + mov [xSP + 512 + xCB + 018h], xDX + mov [xSP + 512 + xCB + 020h], xDI + mov [xSP + 512 + xCB + 028h], xSI + mov [xSP + 512 + xCB + 030h], xBP + mov [xSP + 512 + xCB + 038h], r8 + mov [xSP + 512 + xCB + 040h], r9 + mov [xSP + 512 + xCB + 048h], r10 + mov [xSP + 512 + xCB + 050h], r11 + mov [xSP + 512 + xCB + 058h], r12 + mov [xSP + 512 + xCB + 060h], r13 + mov [xSP + 512 + xCB + 068h], r14 + mov [xSP + 512 + xCB + 070h], r15 pushf pop rax - mov [xSP + 512 + xS + 078h], rax - mov rax, [xSP + 512 + xS + 000h] + mov [xSP + 512 + xCB + 078h], rax + mov rax, [xSP + 512 + xCB + 000h] %else - mov [xSP + 512 + xS + 000h], eax - mov [xSP + 512 + xS + 004h], eax - mov [xSP + 512 + xS + 008h], ebx - mov [xSP + 512 + xS + 00ch], ebx - mov [xSP + 512 + xS + 010h], ecx - mov [xSP + 512 + xS + 014h], ecx - mov [xSP + 512 + xS + 018h], edx - mov [xSP + 512 + xS + 01ch], edx - mov [xSP + 512 + xS + 020h], edi - mov [xSP + 512 + xS + 024h], edi - mov [xSP + 512 + xS + 028h], esi - mov [xSP + 512 + xS + 02ch], esi - mov [xSP + 512 + xS + 030h], ebp - mov [xSP + 512 + xS + 034h], ebp - mov [xSP + 512 + xS + 038h], eax - mov [xSP + 512 + xS + 03ch], eax - mov [xSP + 512 + xS + 040h], eax - mov [xSP + 512 + xS + 044h], eax - mov [xSP + 512 + xS + 048h], eax - mov [xSP + 512 + xS + 04ch], eax - mov [xSP + 512 + xS + 050h], eax - mov [xSP + 512 + xS + 054h], eax - mov [xSP + 512 + xS + 058h], eax - mov [xSP + 512 + xS + 05ch], eax - mov [xSP + 512 + xS + 060h], eax - mov [xSP + 512 + xS + 064h], eax - mov [xSP + 512 + xS + 068h], eax - mov [xSP + 512 + xS + 06ch], eax - mov [xSP + 512 + xS + 070h], eax - mov [xSP + 512 + xS + 074h], eax + mov [xSP + 512 + xCB + 000h], eax + mov [xSP + 512 + xCB + 004h], eax + mov [xSP + 512 + xCB + 008h], ebx + mov [xSP + 512 + xCB + 00ch], ebx + mov [xSP + 512 + xCB + 010h], ecx + mov [xSP + 512 + xCB + 014h], ecx + mov [xSP + 512 + xCB + 018h], edx + mov [xSP + 512 + xCB + 01ch], edx + mov [xSP + 512 + xCB + 020h], edi + mov [xSP + 512 + xCB + 024h], edi + mov [xSP + 512 + xCB + 028h], esi + mov [xSP + 512 + xCB + 02ch], esi + mov [xSP + 512 + xCB + 030h], ebp + mov [xSP + 512 + xCB + 034h], ebp + mov [xSP + 512 + xCB + 038h], eax + mov [xSP + 512 + xCB + 03ch], eax + mov [xSP + 512 + xCB + 040h], eax + mov [xSP + 512 + xCB + 044h], eax + mov [xSP + 512 + xCB + 048h], eax + mov [xSP + 512 + xCB + 04ch], eax + mov [xSP + 512 + xCB + 050h], eax + mov [xSP + 512 + xCB + 054h], eax + mov [xSP + 512 + xCB + 058h], eax + mov [xSP + 512 + xCB + 05ch], eax + mov [xSP + 512 + xCB + 060h], eax + mov [xSP + 512 + xCB + 064h], eax + mov [xSP + 512 + xCB + 068h], eax + mov [xSP + 512 + xCB + 06ch], eax + mov [xSP + 512 + xCB + 070h], eax + mov [xSP + 512 + xCB + 074h], eax pushf pop eax - mov [xSP + 512 + xS + 078h], eax - mov [xSP + 512 + xS + 07ch], eax - mov eax, [xSP + 512 + xS + 000h] + mov [xSP + 512 + xCB + 078h], eax + mov [xSP + 512 + xCB + 07ch], eax + mov eax, [xSP + 512 + xCB + 000h] %endif ret @@ -2028,7 +2028,7 @@ SaveFPUAndGRegsToStack: ; ZF reflects the eax value to save a couple of instructions... ; CompareFPUAndGRegsOnStack: - lea xSP, [xSP - (1024 - xS)] + lea xSP, [xSP - (1024 - xCB)] call SaveFPUAndGRegsToStack push xSI @@ -2036,7 +2036,7 @@ CompareFPUAndGRegsOnStack: push xCX mov xCX, 640 - lea xSI, [xSP + xS*3] + lea xSI, [xSP + xCB*3] lea xDI, [xSI + 1024] cld @@ -2044,7 +2044,7 @@ CompareFPUAndGRegsOnStack: je .ok ;int3 - lea xAX, [xSP + xS*3] + lea xAX, [xSP + xCB*3] xchg xAX, xSI sub xAX, xSI @@ -2059,7 +2059,7 @@ CompareFPUAndGRegsOnStack: pop xCX pop xDI pop xSI - lea xSP, [xSP + (1024 - xS)] + lea xSP, [xSP + (1024 - xCB)] or eax, eax ret @@ -2072,7 +2072,7 @@ CompareFPUAndGRegsOnStack: ; ZF reflects the eax value to save a couple of instructions... ; CompareFPUAndGRegsOnStackIgnoreOpAndIp: - lea xSP, [xSP - (1024 - xS)] + lea xSP, [xSP - (1024 - xCB)] call SaveFPUAndGRegsToStack push xSI @@ -2080,7 +2080,7 @@ CompareFPUAndGRegsOnStackIgnoreOpAndIp: push xCX mov xCX, 640 - lea xSI, [xSP + xS*3] + lea xSI, [xSP + xCB*3] lea xDI, [xSI + 1024] mov word [xSI + X86FXSTATE.FOP], 0 ; ignore @@ -2093,7 +2093,7 @@ CompareFPUAndGRegsOnStackIgnoreOpAndIp: je .ok ;int3 - lea xAX, [xSP + xS*3] + lea xAX, [xSP + xCB*3] xchg xAX, xSI sub xAX, xSI @@ -2108,7 +2108,7 @@ CompareFPUAndGRegsOnStackIgnoreOpAndIp: pop xCX pop xDI pop xSI - lea xSP, [xSP + (1024 - xS)] + lea xSP, [xSP + (1024 - xCB)] or eax, eax ret @@ -2478,9 +2478,16 @@ extern NAME(RTTestISub) %endif call NAME(RTTestISub) %else + %ifdef RT_OS_DARWIN + sub esp, 12 + push %%s_szName + call NAME(RTTestISub) + add esp, 16 + %else push %%s_szName call NAME(RTTestISub) add esp, 4 + %endif %endif jmp %%done %%s_szName: @@ -2493,7 +2500,7 @@ extern NAME(RTTestISub) ; Checks the opcode and CS:IP FPU. ; ; @returns ZF=1 on success, ZF=0 on failure. -; @param xSP + xS fxsave image followed by fnstenv. +; @param xSP + xCB fxsave image followed by fnstenv. ; @param xCX Opcode address (no prefixes). ; CheckOpcodeCsIp: @@ -2503,15 +2510,15 @@ CheckOpcodeCsIp: ; Check the IP. %ifdef RT_ARCH_AMD64 - cmp rcx, [xBP + xS*2 + X86FXSTATE.FPUIP] + cmp rcx, [xBP + xCB*2 + X86FXSTATE.FPUIP] %else - cmp ecx, [xBP + xS*2 + X86FXSTATE.FPUIP] + cmp ecx, [xBP + xCB*2 + X86FXSTATE.FPUIP] %endif jne .failure1 .check_fpucs: mov ax, cs - cmp ax, [xBP + xS*2 + 512 + X86FSTENV32P.FPUCS] + cmp ax, [xBP + xCB*2 + 512 + X86FSTENV32P.FPUCS] jne .failure2 ; Check the opcode. This may be disabled. @@ -2519,13 +2526,13 @@ CheckOpcodeCsIp: mov al, [xCX + 1] and ax, 07ffh - cmp ax, [xBP + xS*2 + X86FXSTATE.FOP] + cmp ax, [xBP + xCB*2 + X86FXSTATE.FOP] je .success - cmp ax, [xBP + xS*2 + 512 + X86FSTENV32P.FOP] + cmp ax, [xBP + xCB*2 + 512 + X86FSTENV32P.FOP] je .success ; xor ax, ax -; cmp ax, [xBP + xS*2 + X86FXSTATE.FOP] +; cmp ax, [xBP + xCB*2 + X86FXSTATE.FOP] ; jne .failure3 .success: @@ -2539,11 +2546,11 @@ CheckOpcodeCsIp: ; AMD64 doesn't seem to store anything at IP and DP, so use the ; fnstenv image instead even if that only contains the lower 32-bit. xor eax, eax - cmp xAX, [xBP + xS*2 + X86FXSTATE.FPUIP] + cmp xAX, [xBP + xCB*2 + X86FXSTATE.FPUIP] jne .failure1_for_real - cmp xAX, [xBP + xS*2 + X86FXSTATE.FPUDP] + cmp xAX, [xBP + xCB*2 + X86FXSTATE.FPUDP] jne .failure1_for_real - cmp ecx, [xBP + xS*2 + 512 + X86FSTENV32P.FPUIP] + cmp ecx, [xBP + xCB*2 + 512 + X86FSTENV32P.FPUIP] je .check_fpucs .failure1_for_real: mov eax, 10000000 @@ -2637,7 +2644,7 @@ BEGINCODE ; Checks the opcode, CS:IP and DS:DP of the FPU. ; ; @returns ZF=1 on success, ZF=0+EAX on failure. -; @param xSP + xS fxsave image followed by fnstenv. +; @param xSP + xCB fxsave image followed by fnstenv. ; @param xCX Opcode address (no prefixes). ; @param xDX Memory address (DS relative). ; @@ -2648,15 +2655,15 @@ CheckOpcodeCsIpDsDp: ; Check the memory operand. %ifdef RT_ARCH_AMD64 - cmp rdx, [xBP + xS*2 + X86FXSTATE.FPUDP] + cmp rdx, [xBP + xCB*2 + X86FXSTATE.FPUDP] %else - cmp edx, [xBP + xS*2 + X86FXSTATE.FPUDP] + cmp edx, [xBP + xCB*2 + X86FXSTATE.FPUDP] %endif jne .failure1 .check_fpuds: mov ax, ds - cmp ax, [xBP + xS*2 + 512 + X86FSTENV32P.FPUDS] + cmp ax, [xBP + xCB*2 + 512 + X86FSTENV32P.FPUDS] jne .failure2 .success: @@ -2669,11 +2676,11 @@ CheckOpcodeCsIpDsDp: ; AMD may leave all fields as ZERO in the FXSAVE image - figure ; if there is a flag controlling this anywhere... xor eax, eax - cmp xAX, [xBP + xS*2 + X86FXSTATE.FPUDP] + cmp xAX, [xBP + xCB*2 + X86FXSTATE.FPUDP] jne .failure1_for_real - cmp xAX, [xBP + xS*2 + X86FXSTATE.FPUIP] + cmp xAX, [xBP + xCB*2 + X86FXSTATE.FPUIP] jne .failure1_for_real - cmp edx, [xBP + xS*2 + 512 + X86FSTENV32P.FPUDP] + cmp edx, [xBP + xCB*2 + 512 + X86FSTENV32P.FPUDP] je .check_fpuds .failure1_for_real: mov eax, 60000000 |
