917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync; $Id$
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync;; @file
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync; Instruction Test Environment - Common Bits.
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync;
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync;
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync; Copyright (C) 2006-2013 Oracle Corporation
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync;
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync; This file is part of VirtualBox Open Source Edition (OSE), as
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync; available from http://www.virtualbox.org. This file is free software;
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync; you can redistribute it and/or modify it under the terms of the GNU
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync; General Public License (GPL) as published by the Free Software
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync; Foundation, in version 2 as it comes in the "COPYING" file of the
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync;
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync%ifndef ___env_common_mac
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync%define ___env_common_mac
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync
2532c528b686eb371278fc8d8b26b1fdba7960b0vboxsync%include "iprt/x86.mac"
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync;*******************************************************************************
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync;* Defined Constants And Macros *
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync;*******************************************************************************
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync%ifdef RT_ARCH_AMD64
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync %define MY_PUSH_FLAGS pushfq
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync %define MY_POP_FLAGS popfq
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync %define MY_PUSH_FLAGS_SIZE 8
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync %macro MY_PUSH_ALL 0
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync push rbp
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync mov rbp, rsp
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync push rax
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync push rbx
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync push rcx
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync push rdx
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync push rsi
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync push rdi
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync push r8
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync push r9
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync push r10
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync push r11
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync push r12
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync push r13
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync push r14
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync push r15
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync pushfq
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync %endm
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync %macro MY_POP_ALL 0
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync popfq
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync pop r15
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync pop r14
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync pop r13
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync pop r12
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync pop r11
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync pop r10
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync pop r9
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync pop r8
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync pop rdi
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync pop rsi
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync pop rdx
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync pop rcx
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync pop rbx
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync pop rax
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync pop rbp
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync %endm
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync%else
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync %define MY_PUSH_FLAGS pushfd
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync %define MY_POP_FLAGS popfd
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync %define MY_PUSH_FLAGS_SIZE 4
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync %macro MY_PUSH_ALL 0
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync push eBP
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync mov xBP, xSP
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync push eax
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync push ebx
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync push ecx
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync push edx
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync push esi
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync push edi
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync pushfd
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync %endm
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync %macro MY_POP_ALL 0
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync popfd
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync pop edi
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync pop esi
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync pop edx
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync pop ecx
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync pop ebx
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync pop eax
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync pop ebp
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync %endm
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync%endif
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync
f372af8e6ee2a011213b11cc69f4a29530ff7ce5vboxsync
f372af8e6ee2a011213b11cc69f4a29530ff7ce5vboxsync;*******************************************************************************
f372af8e6ee2a011213b11cc69f4a29530ff7ce5vboxsync;* Internal Functions *
f372af8e6ee2a011213b11cc69f4a29530ff7ce5vboxsync;*******************************************************************************
f372af8e6ee2a011213b11cc69f4a29530ff7ce5vboxsync
c4b8dd273d2becff4145cf4c634b566e2dd633e6vboxsyncVBINSTST_BEGINCODE
f372af8e6ee2a011213b11cc69f4a29530ff7ce5vboxsync
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync;;
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync; Report bad register value.
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync;
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync; Primary purpose is save all registers and convert from our stack-based to
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync; the correct calling convention for the environment.
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync;
72e9ef1022a910facbd4a232500026befd944d95vboxsync; This function will clean up the stack upon return (to save space in the caller).
72e9ef1022a910facbd4a232500026befd944d95vboxsync;
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync; @param uExpected
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync; @param uActual
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync; @param uRegisterNo
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync;
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsyncVBINSTST_BEGINPROC Common_BadValue
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync MY_PUSH_ALL
c4b8dd273d2becff4145cf4c634b566e2dd633e6vboxsync mov xAX, xSP ; 16-byte align the stack and reserve space for arguments and stuff.
c4b8dd273d2becff4145cf4c634b566e2dd633e6vboxsync sub xSP, 40h
c4b8dd273d2becff4145cf4c634b566e2dd633e6vboxsync and xSP, ~15
c4b8dd273d2becff4145cf4c634b566e2dd633e6vboxsync mov [xSP + 38h], xAX
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync%ifdef ASM_CALL64_GCC
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync mov r8d, [VBINSTST_NAME(g_uVBInsTstSubTestIndicator) wrt rip]
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync mov rcx, [rbp + 10h] ; expected
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync mov rdx, [rbp + 18h] ; actual
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync mov rsi, [rbp + 20h] ; reg#
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync lea rdi, [.szFmt wrt rip]
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync VBINSTST_CALL_FN_FAILURE_4
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync%elifdef ASM_CALL64_MSC
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync mov r10d, [VBINSTST_NAME(g_uVBInsTstSubTestIndicator) wrt rip]
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync mov [rsp + 20h], r10
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync mov r9, [rbp + 10h] ; expected
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync mov r8, [rbp + 18h] ; actual
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync mov rdx, [rbp + 20h] ; reg#
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync lea rcx, [.szFmt wrt rip]
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync VBINSTST_CALL_FN_FAILURE_4
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync
08fc4eb537ed24136b05660d0aa038b336516961vboxsync%elifdef ASM_CALL64_BS2
08fc4eb537ed24136b05660d0aa038b336516961vboxsync mov sBX, [VBINSTST_NAME(g_uVBInsTstSubTestIndicator) xWrtRIP]
08fc4eb537ed24136b05660d0aa038b336516961vboxsync mov sCX, [xBP + xCB + xCB] ; expected
08fc4eb537ed24136b05660d0aa038b336516961vboxsync mov sAX, [xBP + xCB + xCB + sCB*1] ; actual
08fc4eb537ed24136b05660d0aa038b336516961vboxsync mov sDX, [xBP + xCB + xCB + sCB*2] ; reg#
08fc4eb537ed24136b05660d0aa038b336516961vboxsync lea sSI, [.szFmt xWrtRIP]
08fc4eb537ed24136b05660d0aa038b336516961vboxsync mov qword [xSP + xCB + 3*sCB], sBX
08fc4eb537ed24136b05660d0aa038b336516961vboxsync mov qword [xSP + xCB + 2*sCB], sCX
08fc4eb537ed24136b05660d0aa038b336516961vboxsync mov qword [xSP + xCB + 1*sCB], sAX
08fc4eb537ed24136b05660d0aa038b336516961vboxsync mov qword [xSP + xCB], sDX
08fc4eb537ed24136b05660d0aa038b336516961vboxsync mov [xSP], sSI
08fc4eb537ed24136b05660d0aa038b336516961vboxsync VBINSTST_CALL_FN_FAILURE_4
08fc4eb537ed24136b05660d0aa038b336516961vboxsync
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync%else
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync mov sBX, [VBINSTST_NAME(g_uVBInsTstSubTestIndicator)]
08fc4eb537ed24136b05660d0aa038b336516961vboxsync mov sCX, [xBP + xCB + xCB] ; expected
08fc4eb537ed24136b05660d0aa038b336516961vboxsync mov sAX, [xBP + xCB + xCB + sCB*1] ; actual
08fc4eb537ed24136b05660d0aa038b336516961vboxsync mov sDX, [xBP + xCB + xCB + sCB*2] ; reg#
c4b8dd273d2becff4145cf4c634b566e2dd633e6vboxsync mov [xSP + xCB + 3*sCB], sBX
c4b8dd273d2becff4145cf4c634b566e2dd633e6vboxsync mov [xSP + xCB + 2*sCB], sCX
c4b8dd273d2becff4145cf4c634b566e2dd633e6vboxsync mov [xSP + xCB + 1*sCB], sAX
c4b8dd273d2becff4145cf4c634b566e2dd633e6vboxsync mov [xSP + xCB], sDX
c4b8dd273d2becff4145cf4c634b566e2dd633e6vboxsync mov [xSP], RTCCPTR_PRE .szFmt
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync VBINSTST_CALL_FN_FAILURE_4
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync%endif
c4b8dd273d2becff4145cf4c634b566e2dd633e6vboxsync
c4b8dd273d2becff4145cf4c634b566e2dd633e6vboxsync mov xSP, [xSP + 38h]
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync MY_POP_ALL
72e9ef1022a910facbd4a232500026befd944d95vboxsync ret 3*sCB
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync%if ARCH_BITS == 64
08fc4eb537ed24136b05660d0aa038b336516961vboxsync.szFmt: db 'Bad register 0x%RX32 value 0x%RX64, expected 0x%RX64 (line %RU64)', 13, 0
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync%else
08fc4eb537ed24136b05660d0aa038b336516961vboxsync.szFmt: db 'Bad register 0x%RX32 value 0x%RX32, expected 0x%RX32 (line %RU32)', 13, 0
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync%endif
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsyncVBINSTST_ENDPROC Common_BadValue
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync
f372af8e6ee2a011213b11cc69f4a29530ff7ce5vboxsync
7528d4a15800321b4013826ce35ad184898dba21vboxsync%ifdef VBINSTST_CAN_DO_TRAPS
7528d4a15800321b4013826ce35ad184898dba21vboxsync
7528d4a15800321b4013826ce35ad184898dba21vboxsync;;
7528d4a15800321b4013826ce35ad184898dba21vboxsync; Report a missing TRAP.
7528d4a15800321b4013826ce35ad184898dba21vboxsync;
7528d4a15800321b4013826ce35ad184898dba21vboxsync; Primary purpose is save all registers and convert from our stack-based to
7528d4a15800321b4013826ce35ad184898dba21vboxsync; the correct calling convention for the environment.
7528d4a15800321b4013826ce35ad184898dba21vboxsync;
7528d4a15800321b4013826ce35ad184898dba21vboxsync; This function will clean up the stack upon return (to save space in the caller).
7528d4a15800321b4013826ce35ad184898dba21vboxsync;
7528d4a15800321b4013826ce35ad184898dba21vboxsync; @param uExpected
7528d4a15800321b4013826ce35ad184898dba21vboxsync;
7528d4a15800321b4013826ce35ad184898dba21vboxsyncVBINSTST_BEGINPROC Common_MissingTrap
7528d4a15800321b4013826ce35ad184898dba21vboxsync MY_PUSH_ALL
7528d4a15800321b4013826ce35ad184898dba21vboxsync mov xAX, xSP ; 16-byte align the stack and reserve space for arguments and stuff.
7528d4a15800321b4013826ce35ad184898dba21vboxsync sub xSP, 40h
7528d4a15800321b4013826ce35ad184898dba21vboxsync and xSP, ~15
7528d4a15800321b4013826ce35ad184898dba21vboxsync mov [xSP + 38h], xAX
7528d4a15800321b4013826ce35ad184898dba21vboxsync
7528d4a15800321b4013826ce35ad184898dba21vboxsync %ifdef ASM_CALL64_GCC
7528d4a15800321b4013826ce35ad184898dba21vboxsync mov rdx, [VBINSTST_NAME(g_uVBInsTstSubTestIndicator) wrt rip]
7528d4a15800321b4013826ce35ad184898dba21vboxsync movzx rsi, byte [rbp + 10h] ; expected
7528d4a15800321b4013826ce35ad184898dba21vboxsync lea rdi, [.szFmt wrt rip]
7528d4a15800321b4013826ce35ad184898dba21vboxsync VBINSTST_CALL_FN_FAILURE_2
7528d4a15800321b4013826ce35ad184898dba21vboxsync
7528d4a15800321b4013826ce35ad184898dba21vboxsync %elifdef ASM_CALL64_MSC
7528d4a15800321b4013826ce35ad184898dba21vboxsync mov r8d, [VBINSTST_NAME(g_uVBInsTstSubTestIndicator) wrt rip]
7528d4a15800321b4013826ce35ad184898dba21vboxsync movzx rdx, byte [rbp + 10h] ; expected
7528d4a15800321b4013826ce35ad184898dba21vboxsync lea rcx, [.szFmt wrt rip]
7528d4a15800321b4013826ce35ad184898dba21vboxsync VBINSTST_CALL_FN_FAILURE_2
7528d4a15800321b4013826ce35ad184898dba21vboxsync
7528d4a15800321b4013826ce35ad184898dba21vboxsync %elifdef ASM_CALL64_BS2
7528d4a15800321b4013826ce35ad184898dba21vboxsync mov sBX, [VBINSTST_NAME(g_uVBInsTstSubTestIndicator) xWrtRIP]
7528d4a15800321b4013826ce35ad184898dba21vboxsync mov sDX, [xBP + xCB + xCB] ; expected
7528d4a15800321b4013826ce35ad184898dba21vboxsync lea sSI, [.szFmt xWrtRIP]
7528d4a15800321b4013826ce35ad184898dba21vboxsync mov qword [xSP + xCB + 1*sCB], sBX
7528d4a15800321b4013826ce35ad184898dba21vboxsync mov qword [xSP + xCB], sDX
7528d4a15800321b4013826ce35ad184898dba21vboxsync mov [xSP], sSI
7528d4a15800321b4013826ce35ad184898dba21vboxsync VBINSTST_CALL_FN_FAILURE_2
7528d4a15800321b4013826ce35ad184898dba21vboxsync
7528d4a15800321b4013826ce35ad184898dba21vboxsync %else
7528d4a15800321b4013826ce35ad184898dba21vboxsync mov sBX, [VBINSTST_NAME(g_uVBInsTstSubTestIndicator)]
7528d4a15800321b4013826ce35ad184898dba21vboxsync mov sDX, [xBP + xCB + xCB] ; expected
7528d4a15800321b4013826ce35ad184898dba21vboxsync mov [xSP + xCB + 1*sCB], sBX
7528d4a15800321b4013826ce35ad184898dba21vboxsync mov [xSP + xCB], sDX
7528d4a15800321b4013826ce35ad184898dba21vboxsync mov [xSP], RTCCPTR_PRE .szFmt
7528d4a15800321b4013826ce35ad184898dba21vboxsync VBINSTST_CALL_FN_FAILURE_2
7528d4a15800321b4013826ce35ad184898dba21vboxsync %endif
7528d4a15800321b4013826ce35ad184898dba21vboxsync
7528d4a15800321b4013826ce35ad184898dba21vboxsync mov xSP, [xSP + 38h]
7528d4a15800321b4013826ce35ad184898dba21vboxsync MY_POP_ALL
7528d4a15800321b4013826ce35ad184898dba21vboxsync ret 1*sCB
7528d4a15800321b4013826ce35ad184898dba21vboxsync %if ARCH_BITS == 64
7528d4a15800321b4013826ce35ad184898dba21vboxsync.szFmt: db 'Missing trap %RX8 (line %RU64)', 13, 0
7528d4a15800321b4013826ce35ad184898dba21vboxsync %else
7528d4a15800321b4013826ce35ad184898dba21vboxsync.szFmt: db 'Missing trap %RX8 (line %RU32)', 13, 0
7528d4a15800321b4013826ce35ad184898dba21vboxsync %endif
7528d4a15800321b4013826ce35ad184898dba21vboxsyncVBINSTST_ENDPROC Common_MissingTrap
7528d4a15800321b4013826ce35ad184898dba21vboxsync
7528d4a15800321b4013826ce35ad184898dba21vboxsync %macro Common_MissingTrapTemplate 1
7528d4a15800321b4013826ce35ad184898dba21vboxsync VBINSTST_BEGINPROC Common_MissingTrap_%1
7528d4a15800321b4013826ce35ad184898dba21vboxsync push %1
7528d4a15800321b4013826ce35ad184898dba21vboxsync call VBINSTST_NAME(Common_MissingTrap)
7528d4a15800321b4013826ce35ad184898dba21vboxsync ret
7528d4a15800321b4013826ce35ad184898dba21vboxsync VBINSTST_ENDPROC Common_MissingTrap_%1
7528d4a15800321b4013826ce35ad184898dba21vboxsync %endmacro
7528d4a15800321b4013826ce35ad184898dba21vboxsync Common_MissingTrapTemplate X86_XCPT_DE
7528d4a15800321b4013826ce35ad184898dba21vboxsync Common_MissingTrapTemplate X86_XCPT_DB
7528d4a15800321b4013826ce35ad184898dba21vboxsync Common_MissingTrapTemplate X86_XCPT_NMI
7528d4a15800321b4013826ce35ad184898dba21vboxsync Common_MissingTrapTemplate X86_XCPT_BP
7528d4a15800321b4013826ce35ad184898dba21vboxsync Common_MissingTrapTemplate X86_XCPT_OF
7528d4a15800321b4013826ce35ad184898dba21vboxsync Common_MissingTrapTemplate X86_XCPT_BR
7528d4a15800321b4013826ce35ad184898dba21vboxsync Common_MissingTrapTemplate X86_XCPT_UD
7528d4a15800321b4013826ce35ad184898dba21vboxsync Common_MissingTrapTemplate X86_XCPT_NM
7528d4a15800321b4013826ce35ad184898dba21vboxsync ;Common_MissingTrapTemplate X86_XCPT_DF
7528d4a15800321b4013826ce35ad184898dba21vboxsync ;Common_MissingTrapTemplate X86_XCPT_CO_SEG_OVERRUN
7528d4a15800321b4013826ce35ad184898dba21vboxsync Common_MissingTrapTemplate X86_XCPT_TS
7528d4a15800321b4013826ce35ad184898dba21vboxsync Common_MissingTrapTemplate X86_XCPT_NP
7528d4a15800321b4013826ce35ad184898dba21vboxsync Common_MissingTrapTemplate X86_XCPT_SS
7528d4a15800321b4013826ce35ad184898dba21vboxsync Common_MissingTrapTemplate X86_XCPT_GP
7528d4a15800321b4013826ce35ad184898dba21vboxsync Common_MissingTrapTemplate X86_XCPT_PF
7528d4a15800321b4013826ce35ad184898dba21vboxsync Common_MissingTrapTemplate X86_XCPT_MF
7528d4a15800321b4013826ce35ad184898dba21vboxsync Common_MissingTrapTemplate X86_XCPT_AC
7528d4a15800321b4013826ce35ad184898dba21vboxsync ;Common_MissingTrapTemplate X86_XCPT_MC
7528d4a15800321b4013826ce35ad184898dba21vboxsync Common_MissingTrapTemplate X86_XCPT_XF
7528d4a15800321b4013826ce35ad184898dba21vboxsync
7528d4a15800321b4013826ce35ad184898dba21vboxsync%endif ; VBINSTST_CAN_DO_TRAPS
7528d4a15800321b4013826ce35ad184898dba21vboxsync
f372af8e6ee2a011213b11cc69f4a29530ff7ce5vboxsync
f372af8e6ee2a011213b11cc69f4a29530ff7ce5vboxsync;
f372af8e6ee2a011213b11cc69f4a29530ff7ce5vboxsync; Global data variables used by Common_SetupMemReadUxx.
8541678784dbe432feebe6d9c1528525e1771397vboxsync; For address calculation reasons, these must be qword aligned.
f372af8e6ee2a011213b11cc69f4a29530ff7ce5vboxsync;
08fc4eb537ed24136b05660d0aa038b336516961vboxsyncVBINSTST_BEGINDATA
c3c798dbbffa7f6912b2331490beb83ce43e108dvboxsync align 64
8541678784dbe432feebe6d9c1528525e1771397vboxsync dd 09d8af498h, 09ab3e5f8h
f372af8e6ee2a011213b11cc69f4a29530ff7ce5vboxsyncVBINSTST_GLOBALNAME_EX g_u64Data, data hidden
f372af8e6ee2a011213b11cc69f4a29530ff7ce5vboxsync dq 0
8541678784dbe432feebe6d9c1528525e1771397vboxsync dd 07d7af797h, 096b36562h
f372af8e6ee2a011213b11cc69f4a29530ff7ce5vboxsyncVBINSTST_GLOBALNAME_EX g_u32Data, data hidden
f372af8e6ee2a011213b11cc69f4a29530ff7ce5vboxsync dd 0
8541678784dbe432feebe6d9c1528525e1771397vboxsync dd 012305987h
f372af8e6ee2a011213b11cc69f4a29530ff7ce5vboxsyncVBINSTST_GLOBALNAME_EX g_u16Data, data hidden
f372af8e6ee2a011213b11cc69f4a29530ff7ce5vboxsync dw 0
8541678784dbe432feebe6d9c1528525e1771397vboxsync dw 05865h
8541678784dbe432feebe6d9c1528525e1771397vboxsync dw 03863h
8541678784dbe432feebe6d9c1528525e1771397vboxsync dw 02679h
f372af8e6ee2a011213b11cc69f4a29530ff7ce5vboxsyncVBINSTST_GLOBALNAME_EX g_u8Data, data hidden
f372af8e6ee2a011213b11cc69f4a29530ff7ce5vboxsync db 0
f372af8e6ee2a011213b11cc69f4a29530ff7ce5vboxsync db 90h
8541678784dbe432feebe6d9c1528525e1771397vboxsync dw 0865ah
8541678784dbe432feebe6d9c1528525e1771397vboxsync dd 058daffe2h
f372af8e6ee2a011213b11cc69f4a29530ff7ce5vboxsync
08fc4eb537ed24136b05660d0aa038b336516961vboxsyncVBINSTST_BEGINCODE
f372af8e6ee2a011213b11cc69f4a29530ff7ce5vboxsync
f372af8e6ee2a011213b11cc69f4a29530ff7ce5vboxsync;;
f372af8e6ee2a011213b11cc69f4a29530ff7ce5vboxsync; Sets up g_u8Data.
f372af8e6ee2a011213b11cc69f4a29530ff7ce5vboxsync; @param uValue
f372af8e6ee2a011213b11cc69f4a29530ff7ce5vboxsyncVBINSTST_BEGINPROC Common_SetupMemReadU8
f372af8e6ee2a011213b11cc69f4a29530ff7ce5vboxsync push sAX
f372af8e6ee2a011213b11cc69f4a29530ff7ce5vboxsync mov ax, [xSP + sCB + xCB]
c6383709c15c809f8cfb09b5cfe670760f06e2b9vboxsync mov [VBINSTST_NAME(g_u8Data) xWrtRIP], ax
f372af8e6ee2a011213b11cc69f4a29530ff7ce5vboxsync pop sAX
f372af8e6ee2a011213b11cc69f4a29530ff7ce5vboxsync ret sCB
f372af8e6ee2a011213b11cc69f4a29530ff7ce5vboxsyncVBINSTST_ENDPROC Common_SetupMemReadU8
f372af8e6ee2a011213b11cc69f4a29530ff7ce5vboxsync
f372af8e6ee2a011213b11cc69f4a29530ff7ce5vboxsync;;
f372af8e6ee2a011213b11cc69f4a29530ff7ce5vboxsync; Sets up g_u16Data.
f372af8e6ee2a011213b11cc69f4a29530ff7ce5vboxsync; @param uValue
f372af8e6ee2a011213b11cc69f4a29530ff7ce5vboxsyncVBINSTST_BEGINPROC Common_SetupMemReadU16
f372af8e6ee2a011213b11cc69f4a29530ff7ce5vboxsync push sAX
f372af8e6ee2a011213b11cc69f4a29530ff7ce5vboxsync mov ax, [xSP + sCB + xCB]
c6383709c15c809f8cfb09b5cfe670760f06e2b9vboxsync mov [VBINSTST_NAME(g_u16Data) xWrtRIP], ax
f372af8e6ee2a011213b11cc69f4a29530ff7ce5vboxsync pop sAX
f372af8e6ee2a011213b11cc69f4a29530ff7ce5vboxsync ret sCB
f372af8e6ee2a011213b11cc69f4a29530ff7ce5vboxsyncVBINSTST_ENDPROC Common_SetupMemReadU16
f372af8e6ee2a011213b11cc69f4a29530ff7ce5vboxsync
f372af8e6ee2a011213b11cc69f4a29530ff7ce5vboxsync;;
f372af8e6ee2a011213b11cc69f4a29530ff7ce5vboxsync; Sets up g_u32Data.
f372af8e6ee2a011213b11cc69f4a29530ff7ce5vboxsync; @param uValue
f372af8e6ee2a011213b11cc69f4a29530ff7ce5vboxsyncVBINSTST_BEGINPROC Common_SetupMemReadU32
f372af8e6ee2a011213b11cc69f4a29530ff7ce5vboxsync push sAX
f372af8e6ee2a011213b11cc69f4a29530ff7ce5vboxsync mov eax, [xSP + sCB + xCB]
c6383709c15c809f8cfb09b5cfe670760f06e2b9vboxsync mov [VBINSTST_NAME(g_u32Data) xWrtRIP], eax
f372af8e6ee2a011213b11cc69f4a29530ff7ce5vboxsync pop sAX
f372af8e6ee2a011213b11cc69f4a29530ff7ce5vboxsync ret sCB
f372af8e6ee2a011213b11cc69f4a29530ff7ce5vboxsyncVBINSTST_ENDPROC Common_SetupMemReadU32
f372af8e6ee2a011213b11cc69f4a29530ff7ce5vboxsync
f372af8e6ee2a011213b11cc69f4a29530ff7ce5vboxsync;;
f372af8e6ee2a011213b11cc69f4a29530ff7ce5vboxsync; Sets up g_u64Data.
f372af8e6ee2a011213b11cc69f4a29530ff7ce5vboxsync; @param uValue
f372af8e6ee2a011213b11cc69f4a29530ff7ce5vboxsyncVBINSTST_BEGINPROC Common_SetupMemReadU64
f372af8e6ee2a011213b11cc69f4a29530ff7ce5vboxsync push sAX
f372af8e6ee2a011213b11cc69f4a29530ff7ce5vboxsync%ifdef RT_ARCH_AMD64
f372af8e6ee2a011213b11cc69f4a29530ff7ce5vboxsync mov rax, [xSP + sCB + xCB]
c6383709c15c809f8cfb09b5cfe670760f06e2b9vboxsync mov [VBINSTST_NAME(g_u64Data) xWrtRIP], rax
f372af8e6ee2a011213b11cc69f4a29530ff7ce5vboxsync%else
f372af8e6ee2a011213b11cc69f4a29530ff7ce5vboxsync mov eax, [xSP + sCB + xCB]
c6383709c15c809f8cfb09b5cfe670760f06e2b9vboxsync mov [VBINSTST_NAME(g_u64Data) xWrtRIP], eax
f372af8e6ee2a011213b11cc69f4a29530ff7ce5vboxsync mov eax, [xSP + sCB + xCB + 4]
c6383709c15c809f8cfb09b5cfe670760f06e2b9vboxsync mov [VBINSTST_NAME(g_u64Data) + 4 xWrtRIP], eax
f372af8e6ee2a011213b11cc69f4a29530ff7ce5vboxsync%endif
f372af8e6ee2a011213b11cc69f4a29530ff7ce5vboxsync pop sAX
f372af8e6ee2a011213b11cc69f4a29530ff7ce5vboxsync ret sCB
f372af8e6ee2a011213b11cc69f4a29530ff7ce5vboxsyncVBINSTST_ENDPROC Common_SetupMemReadU64
f372af8e6ee2a011213b11cc69f4a29530ff7ce5vboxsync
f372af8e6ee2a011213b11cc69f4a29530ff7ce5vboxsync
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync%endif
917f4ee9f101c9786cf09ea0fe7923a7f6dfe40cvboxsync