Index: /trunk/src/VBox/VMM/VMMAll/IEMAllAImpl.asm
===================================================================
--- /trunk/src/VBox/VMM/VMMAll/IEMAllAImpl.asm	(revision 38024)
+++ /trunk/src/VBox/VMM/VMMAll/IEMAllAImpl.asm	(revision 38025)
@@ -28,144 +28,18 @@
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
-;
-; We employ some macro assembly here to hid the calling convention differences.
-;
-%ifdef RT_ARCH_AMD64
- %macro PROLOGUE_1_ARGS 0
- %endmacro
- %macro EPILOGUE_1_ARGS 0
- %endmacro
- %macro PROLOGUE_2_ARGS 0
- %endmacro
- %macro EPILOGUE_2_ARGS 0
- %endmacro
- %macro PROLOGUE_3_ARGS 0
- %endmacro
- %macro EPILOGUE_3_ARGS 0
- %endmacro
- %macro PROLOGUE_4_ARGS 0
- %endmacro
- %macro EPILOGUE_4_ARGS 0
- %endmacro
-
- %ifdef ASM_CALL64_GCC
-  %define A0        rdi
-  %define A0_32     edi
-  %define A0_16     di
-  %define A0_8      dil
-
-  %define A1        rsi
-  %define A1_32     esi
-  %define A1_16     si
-  %define A1_8      sil
-
-  %define A2        rdx
-  %define A2_32     edx
-  %define A2_16     dx
-  %define A2_8      dl
-
-  %define A3        rcx
-  %define A3_32     ecx
-  %define A3_16     cx
- %endif
-
- %ifdef ASM_CALL64_MSC
-  %define A0        rcx
-  %define A0_32     ecx
-  %define A0_16     cx
-  %define A0_8      cl
-
-  %define A1        rdx
-  %define A1_32     edx
-  %define A1_16     dx
-  %define A1_8      dl
-
-  %define A2        r8
-  %define A2_32     r8d
-  %define A2_16     r8w
-  %define A2_8      r8b
-
-  %define A3        r9
-  %define A3_32     r9d
-  %define A3_16     r9w
- %endif
-
- %define T0         rax
- %define T0_32      eax
- %define T0_16      ax
- %define T0_8       al
-
- %define T1         r11
- %define T1_32      r11d
- %define T1_16      r11w
- %define T1_8       r11b
-
+;;
+; RET XX / RET wrapper for fastcall.
+;
+%macro RET_FASTCALL 1
+%ifdef RT_ARCH_X86                  
+ %ifdef RT_OS_WINDOWS                                 
+    ret %1
+ %else
+    ret
+ %endif        
 %else
- ; x86
- %macro PROLOGUE_1_ARGS 0
-        push    edi
- %endmacro
- %macro EPILOGUE_1_ARGS 0
-        pop     edi
- %endmacro
-
- %macro PROLOGUE_2_ARGS 0
-        push    edi
- %endmacro
- %macro EPILOGUE_2_ARGS 0
-        pop     edi
- %endmacro
-
- %macro PROLOGUE_3_ARGS 0
-        push    ebx
-        mov     ebx, [esp + 4 + 4]
-        push    edi
- %endmacro
- %macro EPILOGUE_3_ARGS 0
-        pop     edi
-        pop     ebx
- %endmacro
-
- %macro PROLOGUE_4_ARGS 0
-        push    ebx
-        push    edi
-        push    esi
-        mov     ebx, [esp + 12 + 4 + 0]
-        mov     esi, [esp + 12 + 4 + 4]
- %endmacro
- %macro EPILOGUE_4_ARGS 0
-        pop     esi
-        pop     edi
-        pop     ebx
- %endmacro
-
- %define A0         ecx
- %define A0_32      ecx
- %define A0_16       cx
- %define A0_8        cl
-
- %define A1         edx
- %define A1_32      edx
- %define A1_16      dx
- %define A1_8       dl
-
- %define A2         ebx
- %define A2_32      ebx
- %define A2_16      bx
- %define A2_8       bl
-
- %define A3         esi
- %define A3_32      esi
- %define A3_16      si
-
- %define T0         eax
- %define T0_32      eax
- %define T0_16      ax
- %define T0_8       al
-
- %define T1         edi
- %define T1_32      edi
- %define T1_16      di
+    ret
 %endif
+%endmacro
 
 ;;
@@ -204,4 +78,150 @@
 NAME_FASTCALL(%1,%2,@):
 %endmacro
+
+
+;
+; We employ some macro assembly here to hid the calling convention differences.
+;
+%ifdef RT_ARCH_AMD64
+ %macro PROLOGUE_1_ARGS 0
+ %endmacro
+ %macro EPILOGUE_1_ARGS 0
+ %endmacro
+ %macro PROLOGUE_2_ARGS 0
+ %endmacro
+ %macro EPILOGUE_2_ARGS 0
+ %endmacro
+ %macro PROLOGUE_3_ARGS 0
+ %endmacro
+ %macro EPILOGUE_3_ARGS 0
+ %endmacro
+ %macro PROLOGUE_4_ARGS 0
+ %endmacro
+ %macro EPILOGUE_4_ARGS 0
+ %endmacro
+
+ %ifdef ASM_CALL64_GCC
+  %define A0        rdi
+  %define A0_32     edi
+  %define A0_16     di
+  %define A0_8      dil
+
+  %define A1        rsi
+  %define A1_32     esi
+  %define A1_16     si
+  %define A1_8      sil
+
+  %define A2        rdx
+  %define A2_32     edx
+  %define A2_16     dx
+  %define A2_8      dl
+
+  %define A3        rcx
+  %define A3_32     ecx
+  %define A3_16     cx
+ %endif
+
+ %ifdef ASM_CALL64_MSC
+  %define A0        rcx
+  %define A0_32     ecx
+  %define A0_16     cx
+  %define A0_8      cl
+
+  %define A1        rdx
+  %define A1_32     edx
+  %define A1_16     dx
+  %define A1_8      dl
+
+  %define A2        r8
+  %define A2_32     r8d
+  %define A2_16     r8w
+  %define A2_8      r8b
+
+  %define A3        r9
+  %define A3_32     r9d
+  %define A3_16     r9w
+ %endif
+
+ %define T0         rax
+ %define T0_32      eax
+ %define T0_16      ax
+ %define T0_8       al
+
+ %define T1         r11
+ %define T1_32      r11d
+ %define T1_16      r11w
+ %define T1_8       r11b
+
+%else
+ ; x86
+ %macro PROLOGUE_1_ARGS 0
+        push    edi
+ %endmacro
+ %macro EPILOGUE_1_ARGS 1
+        pop     edi
+        RET_FASTCALL %1
+ %endmacro
+
+ %macro PROLOGUE_2_ARGS 0
+        push    edi
+ %endmacro
+ %macro EPILOGUE_2_ARGS 1
+        pop     edi
+        RET_FASTCALL %1
+ %endmacro
+
+ %macro PROLOGUE_3_ARGS 0
+        push    ebx
+        mov     ebx, [esp + 4 + 4]
+        push    edi
+ %endmacro
+ %macro EPILOGUE_3_ARGS 1
+        pop     edi
+        pop     ebx
+        RET_FASTCALL %1
+ %endmacro
+
+ %macro PROLOGUE_4_ARGS 0
+        push    ebx
+        push    edi
+        push    esi
+        mov     ebx, [esp + 12 + 4 + 0]
+        mov     esi, [esp + 12 + 4 + 4]
+ %endmacro
+ %macro EPILOGUE_4_ARGS 1
+        pop     esi
+        pop     edi
+        pop     ebx
+        RET_FASTCALL %1
+ %endmacro
+
+ %define A0         ecx
+ %define A0_32      ecx
+ %define A0_16       cx
+ %define A0_8        cl
+
+ %define A1         edx
+ %define A1_32      edx
+ %define A1_16      dx
+ %define A1_8       dl
+
+ %define A2         ebx
+ %define A2_32      ebx
+ %define A2_16      bx
+ %define A2_8       bl
+
+ %define A3         esi
+ %define A3_32      esi
+ %define A3_16      si
+
+ %define T0         eax
+ %define T0_32      eax
+ %define T0_16      ax
+ %define T0_8       al
+
+ %define T1         edi
+ %define T1_32      edi
+ %define T1_16      di
+%endif
 
 
@@ -269,6 +289,5 @@
         %1      byte [A0], A1_8
         IEM_SAVE_FLAGS                 A2, %3, %4
-        EPILOGUE_3_ARGS
-        ret
+        EPILOGUE_3_ARGS 4
 ENDPROC iemAImpl_ %+ %1 %+ _u8
 
@@ -278,6 +297,5 @@
         %1      word [A0], A1_16
         IEM_SAVE_FLAGS                 A2, %3, %4
-        EPILOGUE_3_ARGS
-        ret
+        EPILOGUE_3_ARGS 4
 ENDPROC iemAImpl_ %+ %1 %+ _u16
 
@@ -287,6 +305,5 @@
         %1      dword [A0], A1_32
         IEM_SAVE_FLAGS                 A2, %3, %4
-        EPILOGUE_3_ARGS
-        ret
+        EPILOGUE_3_ARGS 4
 ENDPROC iemAImpl_ %+ %1 %+ _u32
 
@@ -297,6 +314,5 @@
         %1      qword [A0], A1
         IEM_SAVE_FLAGS                 A2, %3, %4
-        EPILOGUE_3_ARGS
-        ret
+        EPILOGUE_3_ARGS 8
 ENDPROC iemAImpl_ %+ %1 %+ _u64
  %else ; stub it for now - later, replace with hand coded stuff.
@@ -314,6 +330,5 @@
         lock %1 byte [A0], A1_8
         IEM_SAVE_FLAGS                 A2, %3, %4
-        EPILOGUE_3_ARGS
-        ret
+        EPILOGUE_3_ARGS 4
 ENDPROC iemAImpl_ %+ %1 %+ _u8_locked
 
@@ -323,6 +338,5 @@
         lock %1 word [A0], A1_16
         IEM_SAVE_FLAGS                 A2, %3, %4
-        EPILOGUE_3_ARGS
-        ret
+        EPILOGUE_3_ARGS 4
 ENDPROC iemAImpl_ %+ %1 %+ _u16_locked
 
@@ -332,6 +346,5 @@
         lock %1 dword [A0], A1_32
         IEM_SAVE_FLAGS                 A2, %3, %4
-        EPILOGUE_3_ARGS
-        ret
+        EPILOGUE_3_ARGS  4
 ENDPROC iemAImpl_ %+ %1 %+ _u32_locked
 
@@ -342,11 +355,10 @@
         lock %1 qword [A0], A1
         IEM_SAVE_FLAGS                 A2, %3, %4
-        EPILOGUE_3_ARGS
-        ret
+        EPILOGUE_3_ARGS 8
 ENDPROC iemAImpl_ %+ %1 %+ _u64_locked
   %else ; stub it for now - later, replace with hand coded stuff.
 BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u64_locked, 16
         int3
-        ret
+        ret 8
 ENDPROC iemAImpl_ %+ %1 %+ _u64_locked
   %endif ; !RT_ARCH_AMD64
@@ -388,6 +400,5 @@
         %1      word [A0], A1_16
         IEM_SAVE_FLAGS                 A2, %3, %4
-        EPILOGUE_3_ARGS
-        ret
+        EPILOGUE_3_ARGS 4
 ENDPROC iemAImpl_ %+ %1 %+ _u16
 
@@ -397,6 +408,5 @@
         %1      dword [A0], A1_32
         IEM_SAVE_FLAGS                 A2, %3, %4
-        EPILOGUE_3_ARGS
-        ret
+        EPILOGUE_3_ARGS 4
 ENDPROC iemAImpl_ %+ %1 %+ _u32
 
@@ -407,11 +417,10 @@
         %1      qword [A0], A1
         IEM_SAVE_FLAGS                 A2, %3, %4
-        EPILOGUE_3_ARGS
-        ret
+        EPILOGUE_3_ARGS 8
 ENDPROC iemAImpl_ %+ %1 %+ _u64
  %else ; stub it for now - later, replace with hand coded stuff.
 BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u64, 16
         int3
-        ret
+        ret 8
 ENDPROC iemAImpl_ %+ %1 %+ _u64
   %endif ; !RT_ARCH_AMD64
@@ -424,6 +433,5 @@
         lock %1 word [A0], A1_16
         IEM_SAVE_FLAGS                 A2, %3, %4
-        EPILOGUE_3_ARGS
-        ret
+        EPILOGUE_3_ARGS 4
 ENDPROC iemAImpl_ %+ %1 %+ _u16_locked
 
@@ -433,6 +441,5 @@
         lock %1 dword [A0], A1_32
         IEM_SAVE_FLAGS                 A2, %3, %4
-        EPILOGUE_3_ARGS
-        ret
+        EPILOGUE_3_ARGS 4
 ENDPROC iemAImpl_ %+ %1 %+ _u32_locked
 
@@ -443,11 +450,10 @@
         lock %1 qword [A0], A1
         IEM_SAVE_FLAGS                 A2, %3, %4
-        EPILOGUE_3_ARGS
-        ret
+        EPILOGUE_3_ARGS 8
 ENDPROC iemAImpl_ %+ %1 %+ _u64_locked
   %else ; stub it for now - later, replace with hand coded stuff.
 BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u64_locked, 16
         int3
-        ret
+        ret 8
 ENDPROC iemAImpl_ %+ %1 %+ _u64_locked
   %endif ; !RT_ARCH_AMD64
@@ -480,6 +486,5 @@
         mov     [A0], T0_16
         IEM_SAVE_FLAGS                 A2, %2, %3
-        EPILOGUE_3_ARGS
-        ret
+        EPILOGUE_3_ARGS 4
 ENDPROC iemAImpl_ %+ %1 %+ _u16
 
@@ -490,6 +495,5 @@
         mov     [A0], T0_32
         IEM_SAVE_FLAGS                 A2, %2, %3
-        EPILOGUE_3_ARGS
-        ret
+        EPILOGUE_3_ARGS 4
 ENDPROC iemAImpl_ %+ %1 %+ _u32
 
@@ -501,11 +505,10 @@
         mov     [A0], T0
         IEM_SAVE_FLAGS                 A2, %2, %3
-        EPILOGUE_3_ARGS
-        ret
+        EPILOGUE_3_ARGS 8
 ENDPROC iemAImpl_ %+ %1 %+ _u64
  %else ; stub it for now - later, replace with hand coded stuff.
 BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u64, 16
         int3
-        ret
+        ret 8
 ENDPROC iemAImpl_ %+ %1 %+ _u64
  %endif ; !RT_ARCH_AMD64
@@ -526,6 +529,5 @@
         mov     [A0], A1_16
         IEM_SAVE_FLAGS       A2, (X86_EFL_OF | X86_EFL_CF), (X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF)
-        EPILOGUE_3_ARGS
-        ret
+        EPILOGUE_3_ARGS 4
 ENDPROC iemAImpl_imul_two_u16
 
@@ -536,6 +538,5 @@
         mov     [A0], A1_32
         IEM_SAVE_FLAGS       A2, (X86_EFL_OF | X86_EFL_CF), (X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF)
-        EPILOGUE_3_ARGS
-        ret
+        EPILOGUE_3_ARGS 4
 ENDPROC iemAImpl_imul_two_u32
 
@@ -550,6 +551,5 @@
         int3 ;; @todo implement me
 %endif
-        EPILOGUE_3_ARGS
-        ret
+        EPILOGUE_3_ARGS 8
 ENDPROC iemAImpl_imul_two_u64
 
@@ -567,6 +567,5 @@
         xchg    [A0], T0_8
         mov     [A1], T0_8
-        EPILOGUE_2_ARGS
-        ret
+        EPILOGUE_2_ARGS 0
 ENDPROC iemAImpl_xchg_u8
 
@@ -576,6 +575,5 @@
         xchg    [A0], T0_16
         mov     [A1], T0_16
-        EPILOGUE_2_ARGS
-        ret
+        EPILOGUE_2_ARGS 0
 ENDPROC iemAImpl_xchg_u16
 
@@ -585,6 +583,5 @@
         xchg    [A0], T0_32
         mov     [A1], T0_32
-        EPILOGUE_2_ARGS
-        ret
+        EPILOGUE_2_ARGS 0
 ENDPROC iemAImpl_xchg_u32
 
@@ -595,8 +592,8 @@
         xchg    [A0], T0
         mov     [A1], T0
-        EPILOGUE_2_ARGS
-        ret
+        EPILOGUE_2_ARGS 0
 %else
         int3
+        ret 0
 %endif
 ENDPROC iemAImpl_xchg_u64
@@ -618,6 +615,5 @@
         mov     [A1], T0_8
         IEM_SAVE_FLAGS       A2, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF), 0
-        EPILOGUE_3_ARGS
-        ret
+        EPILOGUE_3_ARGS 4
 ENDPROC iemAImpl_xadd_u8
 
@@ -629,6 +625,5 @@
         mov     [A1], T0_16
         IEM_SAVE_FLAGS       A2, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF), 0
-        EPILOGUE_3_ARGS
-        ret
+        EPILOGUE_3_ARGS 4
 ENDPROC iemAImpl_xadd_u16
 
@@ -640,6 +635,5 @@
         mov     [A1], T0_32
         IEM_SAVE_FLAGS       A2, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF), 0
-        EPILOGUE_3_ARGS
-        ret
+        EPILOGUE_3_ARGS 4
 ENDPROC iemAImpl_xadd_u32
 
@@ -652,8 +646,8 @@
         mov     [A1], T0
         IEM_SAVE_FLAGS       A2, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF), 0
-        EPILOGUE_3_ARGS
-        ret
+        EPILOGUE_3_ARGS 4
 %else
         int3
+        ret 4
 %endif
 ENDPROC iemAImpl_xadd_u64
@@ -666,6 +660,5 @@
         mov     [A1], T0_8
         IEM_SAVE_FLAGS       A2, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF), 0
-        EPILOGUE_3_ARGS
-        ret
+        EPILOGUE_3_ARGS 4
 ENDPROC iemAImpl_xadd_u8_locked
 
@@ -677,6 +670,5 @@
         mov     [A1], T0_16
         IEM_SAVE_FLAGS       A2, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF), 0
-        EPILOGUE_3_ARGS
-        ret
+        EPILOGUE_3_ARGS 4
 ENDPROC iemAImpl_xadd_u16_locked
 
@@ -688,6 +680,5 @@
         mov     [A1], T0_32
         IEM_SAVE_FLAGS       A2, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF), 0
-        EPILOGUE_3_ARGS
-        ret
+        EPILOGUE_3_ARGS 4
 ENDPROC iemAImpl_xadd_u32_locked
 
@@ -700,8 +691,8 @@
         mov     [A1], T0
         IEM_SAVE_FLAGS       A2, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF), 0
-        EPILOGUE_3_ARGS
-        ret
+        EPILOGUE_3_ARGS 4
 %else
         int3
+        ret 4
 %endif
 ENDPROC iemAImpl_xadd_u64_locked
@@ -729,6 +720,5 @@
         %1      byte [A0]
         IEM_SAVE_FLAGS       A1, %2, %3
-        EPILOGUE_2_ARGS
-        ret
+        EPILOGUE_2_ARGS 0
 ENDPROC iemAImpl_ %+ %1 %+ _u8
 
@@ -738,6 +728,5 @@
         lock %1 byte [A0]
         IEM_SAVE_FLAGS       A1, %2, %3
-        EPILOGUE_2_ARGS
-        ret
+        EPILOGUE_2_ARGS 0
 ENDPROC iemAImpl_ %+ %1 %+ _u8_locked
 
@@ -747,6 +736,5 @@
         %1      word [A0]
         IEM_SAVE_FLAGS       A1, %2, %3
-        EPILOGUE_2_ARGS
-        ret
+        EPILOGUE_2_ARGS 0
 ENDPROC iemAImpl_ %+ %1 %+ _u16
 
@@ -756,6 +744,5 @@
         lock %1 word [A0]
         IEM_SAVE_FLAGS       A1, %2, %3
-        EPILOGUE_2_ARGS
-        ret
+        EPILOGUE_2_ARGS 0
 ENDPROC iemAImpl_ %+ %1 %+ _u16_locked
 
@@ -765,6 +752,5 @@
         %1      dword [A0]
         IEM_SAVE_FLAGS       A1, %2, %3
-        EPILOGUE_2_ARGS
-        ret
+        EPILOGUE_2_ARGS 0
 ENDPROC iemAImpl_ %+ %1 %+ _u32
 
@@ -774,6 +760,5 @@
         lock %1 dword [A0]
         IEM_SAVE_FLAGS       A1, %2, %3
-        EPILOGUE_2_ARGS
-        ret
+        EPILOGUE_2_ARGS 0
 ENDPROC iemAImpl_ %+ %1 %+ _u32_locked
 
@@ -784,6 +769,5 @@
         %1      qword [A0]
         IEM_SAVE_FLAGS       A1, %2, %3
-        EPILOGUE_2_ARGS
-        ret
+        EPILOGUE_2_ARGS 0
 ENDPROC iemAImpl_ %+ %1 %+ _u64
 
@@ -793,6 +777,5 @@
         lock %1 qword [A0]
         IEM_SAVE_FLAGS       A1, %2, %3
-        EPILOGUE_2_ARGS
-        ret
+        EPILOGUE_2_ARGS 0
 ENDPROC iemAImpl_ %+ %1 %+ _u64_locked
  %else
@@ -800,9 +783,9 @@
 BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u64, 8
         int3
-        ret
+        ret 0
 ENDPROC iemAImpl_ %+ %1 %+ _u64
 BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u64_locked, 8
         int3
-        ret
+        ret 0
 ENDPROC iemAImpl_ %+ %1 %+ _u64_locked
  %endif
@@ -845,6 +828,5 @@
  %endif
         IEM_SAVE_FLAGS       A2, %2, %3
-        EPILOGUE_3_ARGS
-        ret
+        EPILOGUE_3_ARGS 4
 ENDPROC iemAImpl_ %+ %1 %+ _u8
 
@@ -860,6 +842,5 @@
  %endif
         IEM_SAVE_FLAGS       A2, %2, %3
-        EPILOGUE_3_ARGS
-        ret
+        EPILOGUE_3_ARGS 4
 ENDPROC iemAImpl_ %+ %1 %+ _u16
 
@@ -875,6 +856,5 @@
  %endif
         IEM_SAVE_FLAGS       A2, %2, %3
-        EPILOGUE_3_ARGS
-        ret
+        EPILOGUE_3_ARGS 4
 ENDPROC iemAImpl_ %+ %1 %+ _u32
 
@@ -891,11 +871,10 @@
  %endif
         IEM_SAVE_FLAGS       A2, %2, %3
-        EPILOGUE_3_ARGS
-        ret
+        EPILOGUE_3_ARGS 4
 ENDPROC iemAImpl_ %+ %1 %+ _u64
  %else ; stub it for now - later, replace with hand coded stuff.
 BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u64, 12
         int3
-        ret
+        ret 4
 ENDPROC iemAImpl_ %+ %1 %+ _u64
   %endif ; !RT_ARCH_AMD64
@@ -941,6 +920,5 @@
  %endif
         IEM_SAVE_FLAGS       A3, %2, %3
-        EPILOGUE_4_ARGS
-        ret
+        EPILOGUE_4_ARGS 8
 ENDPROC iemAImpl_ %+ %1 %+ _u16
 
@@ -957,6 +935,5 @@
  %endif
         IEM_SAVE_FLAGS       A3, %2, %3
-        EPILOGUE_4_ARGS
-        ret
+        EPILOGUE_4_ARGS 8
 ENDPROC iemAImpl_ %+ %1 %+ _u32
 
@@ -974,11 +951,10 @@
  %endif
         IEM_SAVE_FLAGS       A3, %2, %3
-        EPILOGUE_4_ARGS
-        ret
+        EPILOGUE_4_ARGS 12
 ENDPROC iemAImpl_ %+ %1 %+ _u64
  %else ; stub it for now - later, replace with hand coded stuff.
 BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u64, 20
         int3
-        ret
+        ret 12
 ENDPROC iemAImpl_ %+ %1 %+ _u64
   %endif ; !RT_ARCH_AMD64
@@ -1018,7 +994,6 @@
         mov     [A0], ax
         IEM_SAVE_FLAGS       A2, %2, %3
-        EPILOGUE_3_ARGS
         xor     eax, eax
-        ret
+        EPILOGUE_3_ARGS 4
 ENDPROC iemAImpl_ %+ %1 %+ _u8
 
@@ -1038,7 +1013,6 @@
  %endif
         IEM_SAVE_FLAGS       A3, %2, %3
-        EPILOGUE_4_ARGS
         xor     eax, eax
-        ret
+        EPILOGUE_4_ARGS 8
 ENDPROC iemAImpl_ %+ %1 %+ _u16
 
@@ -1058,7 +1032,6 @@
  %endif
         IEM_SAVE_FLAGS       A3, %2, %3
-        EPILOGUE_4_ARGS
         xor     eax, eax
-        ret
+        EPILOGUE_4_ARGS 8
 ENDPROC iemAImpl_ %+ %1 %+ _u32
 
@@ -1079,12 +1052,11 @@
  %endif
         IEM_SAVE_FLAGS       A3, %2, %3
-        EPILOGUE_4_ARGS
         xor     eax, eax
-        ret
+        EPILOGUE_4_ARGS 12
 ENDPROC iemAImpl_ %+ %1 %+ _u64
  %else ; stub it for now - later, replace with hand coded stuff.
 BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u64, 20
         int3
-        ret
+        ret 12
 ENDPROC iemAImpl_ %+ %1 %+ _u64
   %endif ; !RT_ARCH_AMD64
@@ -1132,6 +1104,6 @@
 
 .return:
-        EPILOGUE_3_ARGS
-        ret
+        EPILOGUE_3_ARGS 4
+
 .div_zero:
         mov     eax, -1
@@ -1166,6 +1138,6 @@
 
 .return:
-        EPILOGUE_4_ARGS
-        ret
+        EPILOGUE_4_ARGS 8
+        
 .div_zero:
         mov     eax, -1
@@ -1201,6 +1173,6 @@
 
 .return:
-        EPILOGUE_4_ARGS
-        ret
+        EPILOGUE_4_ARGS 8
+
 .div_zero:
         mov     eax, -1
@@ -1237,6 +1209,6 @@
 
 .return:
-        EPILOGUE_4_ARGS
-        ret
+        EPILOGUE_4_ARGS 12
+        
 .div_zero:
         mov     eax, -1
