<Filename>SwapBytes32.c</Filename>\r
<Filename>SwapBytes64.c</Filename>\r
<Filename>SwitchStack.c</Filename>\r
- <Filename SupArchList="IA32">x86LowLevel.c</Filename>\r
+ <Filename SupArchList="IA32">x86DisablePaging32.c</Filename>\r
+ <Filename SupArchList="IA32">x86DisablePaging64.c</Filename>\r
+ <Filename SupArchList="IA32">x86EnablePaging32.c</Filename>\r
+ <Filename SupArchList="IA32">x86EnablePaging64.c</Filename>\r
+ <Filename SupArchList="IA32">x86FxRestore.c</Filename>\r
+ <Filename SupArchList="IA32">x86FxSave.c</Filename>\r
+ <Filename SupArchList="IA32">x86GetInterruptState.c</Filename>\r
+ <Filename SupArchList="IA32">x86MemoryFence.c</Filename>\r
+ <Filename SupArchList="IA32">x86Msr.c</Filename>\r
+ <Filename SupArchList="IA32">x86ReadGdtr.c</Filename>\r
+ <Filename SupArchList="IA32">x86ReadIdtr.c</Filename>\r
<Filename SupArchList="IA32">x86Thunk.c</Filename>\r
+ <Filename SupArchList="IA32">x86WriteGdtr.c</Filename>\r
+ <Filename SupArchList="IA32">x86WriteIdtr.c</Filename>\r
<Filename SupArchList="IA32">Unaligned.c</Filename>\r
<Filename SupArchList="IA32">Ia32/Non-existing.c</Filename>\r
<Filename SupArchList="IA32">Ia32/InternalSwitchStack.c</Filename>\r
<Filename SupArchList="IA32">Ia32/CpuIdEx.asm</Filename>\r
<Filename SupArchList="IA32">Ia32/ReadEflags.asm</Filename>\r
<Filename SupArchList="IA32">Ia32/ReadMsr64.asm</Filename>\r
- <Filename SupArchList="IA32">Ia32/WriteMsr32.asm</Filename>\r
<Filename SupArchList="IA32">Ia32/WriteMsr64.asm</Filename>\r
<Filename SupArchList="IA32">Ia32/ReadCr0.asm</Filename>\r
<Filename SupArchList="IA32">Ia32/ReadCr2.asm</Filename>\r
<Filename SupArchList="IA32">Ia32/CpuIdEx.S</Filename>\r
<Filename SupArchList="IA32">Ia32/ReadEflags.S</Filename>\r
<Filename SupArchList="IA32">Ia32/ReadMsr64.S</Filename>\r
- <Filename SupArchList="IA32">Ia32/WriteMsr32.S</Filename>\r
<Filename SupArchList="IA32">Ia32/WriteMsr64.S</Filename>\r
<Filename SupArchList="IA32">Ia32/ReadCr0.S</Filename>\r
<Filename SupArchList="IA32">Ia32/ReadCr2.S</Filename>\r
<Filename SupArchList="IA32">Ia32/CpuBreakpoint.S</Filename>\r
<Filename SupArchList="IA32">Ia32/CpuFlushTlb.S</Filename>\r
<Filename SupArchList="IA32">Ia32/Thunk16.S</Filename>\r
- <Filename SupArchList="X64">x86LowLevel.c</Filename>\r
+ <Filename SupArchList="X64">x86DisablePaging32.c</Filename>\r
+ <Filename SupArchList="X64">x86DisablePaging64.c</Filename>\r
+ <Filename SupArchList="X64">x86EnablePaging32.c</Filename>\r
+ <Filename SupArchList="X64">x86EnablePaging64.c</Filename>\r
+ <Filename SupArchList="X64">x86FxRestore.c</Filename>\r
+ <Filename SupArchList="X64">x86FxSave.c</Filename>\r
+ <Filename SupArchList="X64">x86GetInterruptState.c</Filename>\r
+ <Filename SupArchList="X64">x86MemoryFence.c</Filename>\r
+ <Filename SupArchList="X64">x86Msr.c</Filename>\r
+ <Filename SupArchList="X64">x86ReadGdtr.c</Filename>\r
+ <Filename SupArchList="X64">x86ReadIdtr.c</Filename>\r
<Filename SupArchList="X64">x86Thunk.c</Filename>\r
+ <Filename SupArchList="X64">x86WriteGdtr.c</Filename>\r
+ <Filename SupArchList="X64">x86WriteIdtr.c</Filename>\r
<Filename SupArchList="X64">Unaligned.c</Filename>\r
<Filename SupArchList="X64">Math64.c</Filename>\r
<Filename SupArchList="X64">X64/Non-existing.c</Filename>\r
<Filename SupArchList="X64">X64/CpuId.asm</Filename>\r
<Filename SupArchList="X64">X64/CpuIdEx.asm</Filename>\r
<Filename SupArchList="X64">X64/ReadEflags.asm</Filename>\r
- <Filename SupArchList="X64">X64/ReadMsr32.asm</Filename>\r
<Filename SupArchList="X64">X64/ReadMsr64.asm</Filename>\r
- <Filename SupArchList="X64">X64/WriteMsr32.asm</Filename>\r
<Filename SupArchList="X64">X64/WriteMsr64.asm</Filename>\r
<Filename SupArchList="X64">X64/ReadCr0.asm</Filename>\r
<Filename SupArchList="X64">X64/ReadCr2.asm</Filename>\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
-\r
.global _InternalMathARShiftU64\r
-_InternalMathARShiftU64: \r
- movb 12(%esp),%cl\r
- movl 8(%esp),%eax\r
+\r
+#------------------------------------------------------------------------------\r
+# UINT64\r
+# EFIAPI\r
+# InternalMathARShiftU64 (\r
+# IN UINT64 Operand,\r
+# IN UINTN Count\r
+# );\r
+#------------------------------------------------------------------------------\r
+_InternalMathARShiftU64:\r
+ movb 12(%esp), %cl\r
+ movl 8(%esp), %eax\r
cltd\r
- testb $32,%cl\r
+ testb $32, %cl\r
cmovz %eax, %edx\r
cmovz 4(%esp), %eax\r
- shrdl %cl,%edx,%eax\r
- sar %cl,%edx\r
+ shrdl %cl, %edx, %eax\r
+ sar %cl, %edx\r
ret\r
-\r
-\r
-\r
.model flat,C\r
.code\r
\r
+;------------------------------------------------------------------------------\r
+; UINT64\r
+; EFIAPI\r
+; InternalMathARShiftU64 (\r
+; IN UINT64 Operand,\r
+; IN UINTN Count\r
+; );\r
+;------------------------------------------------------------------------------\r
InternalMathARShiftU64 PROC\r
mov cl, [esp + 12]\r
mov eax, [esp + 8]\r
ret\r
InternalMathARShiftU64 ENDP\r
\r
- END
\ No newline at end of file
+ END\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
- \r
+.global _CpuBreakpoint\r
\r
#------------------------------------------------------------------------------\r
# VOID\r
# VOID\r
# );\r
#------------------------------------------------------------------------------\r
-.global _CpuBreakpoint\r
-_CpuBreakpoint: \r
+_CpuBreakpoint:\r
int $3\r
ret\r
-\r
-\r
-\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
+.global _CpuFlushTlb\r
\r
#------------------------------------------------------------------------------\r
# VOID\r
# VOID\r
# );\r
#------------------------------------------------------------------------------\r
-.global _CpuFlushTlb\r
-_CpuFlushTlb: \r
+_CpuFlushTlb:\r
movl %cr3, %eax\r
movl %eax, %cr3\r
ret\r
-\r
-\r
-\r
;------------------------------------------------------------------------------\r
\r
.386p\r
- .model flat\r
+ .model flat,C\r
.code\r
\r
;------------------------------------------------------------------------------\r
; VOID\r
; );\r
;------------------------------------------------------------------------------\r
-_CpuFlushTlb PROC\r
+CpuFlushTlb PROC\r
mov eax, cr3\r
mov cr3, eax\r
ret\r
-_CpuFlushTlb ENDP\r
+CpuFlushTlb ENDP\r
\r
END\r
#\r
#------------------------------------------------------------------------------\r
\r
+.globl _AsmCpuid\r
\r
#------------------------------------------------------------------------------\r
# VOID\r
# OUT UINT32 *RegisterOutEdx OPTIONAL\r
# )\r
#------------------------------------------------------------------------------\r
-.globl _AsmCpuid\r
_AsmCpuid:\r
- pushl %ebx\r
- pushl %ebp\r
+ push %ebx\r
+ push %ebp\r
movl %esp, %ebp\r
movl 12(%ebp), %eax\r
cpuid\r
- pushl %ecx\r
+ push %ecx\r
movl 16(%ebp), %ecx\r
jecxz L1\r
movl %eax, (%ecx)\r
-L1: \r
+L1:\r
movl 20(%ebp), %ecx\r
jecxz L2\r
movl %ebx, (%ecx)\r
-L2: \r
+L2:\r
movl 24(%ebp), %ecx\r
jecxz L3\r
popl (%ecx)\r
-L3: \r
+L3:\r
movl 28(%ebp), %ecx\r
jecxz L4\r
movl %edx, (%ecx)\r
-L4: \r
+L4:\r
movl 12(%ebp), %eax\r
leave\r
- popl %ebx\r
+ pop %ebx\r
ret\r
-\r
-\r
; OUT UINT32 *RegisterOutEbx OPTIONAL,\r
; OUT UINT32 *RegisterOutEcx OPTIONAL,\r
; OUT UINT32 *RegisterOutEdx OPTIONAL\r
-; )\r
+; );\r
;------------------------------------------------------------------------------\r
AsmCpuid PROC USES ebx\r
push ebp\r
#
#------------------------------------------------------------------------------
- .686:
- .code:
+ .686:
+ .code:
#------------------------------------------------------------------------------
# UINT32
.globl _AsmCpuidEx
_AsmCpuidEx:
push %ebx
- pushl %ebp
+ push %ebp
movl %esp, %ebp
movl 12(%ebp), %eax
movl 16(%ebp), %ecx
cpuid
- pushl %ecx
+ push %ecx
movl 20(%ebp), %ecx
jecxz L1
movl %eax, (%ecx)
-L1:
+L1:
movl 24(%ebp), %ecx
jecxz L2
movl %ebx, (%ecx)
-L2:
+L2:
movl 28(%ebp), %ecx
jecxz L3
popl (%ecx)
-L3:
+L3:
movl 32(%ebp), %edx
jecxz L4
movl %edx, (%ecx)
-L4:
+L4:
movl 12(%ebp), %eax
leave
pop %ebx
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
- \r
+.global _CpuPause\r
\r
#------------------------------------------------------------------------------\r
# VOID\r
# VOID\r
# );\r
#------------------------------------------------------------------------------\r
-.global _CpuPause\r
-_CpuPause: \r
+_CpuPause:\r
pause\r
ret\r
-\r
-\r
-\r
;------------------------------------------------------------------------------\r
\r
.686\r
- .model flat\r
+ .model flat,C\r
.xmm\r
.code\r
\r
; VOID\r
; );\r
;------------------------------------------------------------------------------\r
-_CpuPause PROC\r
+CpuPause PROC\r
pause\r
ret\r
-_CpuPause ENDP\r
+CpuPause ENDP\r
\r
END\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
+.global _CpuSleep\r
\r
#------------------------------------------------------------------------------\r
# VOID\r
# VOID\r
# );\r
#------------------------------------------------------------------------------\r
-.global _CpuSleep\r
-_CpuSleep: \r
+_CpuSleep:\r
hlt\r
ret\r
-\r
-\r
-\r
;------------------------------------------------------------------------------\r
\r
.386\r
- .model flat\r
+ .model flat,C\r
.code\r
\r
;------------------------------------------------------------------------------\r
; VOID\r
; );\r
;------------------------------------------------------------------------------\r
-_CpuSleep PROC\r
+CpuSleep PROC\r
hlt\r
ret\r
-_CpuSleep ENDP\r
+CpuSleep ENDP\r
\r
END\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
+.global _DisableInterrupts\r
\r
#------------------------------------------------------------------------------\r
# VOID\r
# VOID\r
# );\r
#------------------------------------------------------------------------------\r
-.global _DisableInterrupts\r
-_DisableInterrupts: \r
+_DisableInterrupts:\r
cli\r
ret\r
-\r
-\r
-\r
;------------------------------------------------------------------------------\r
\r
.386p\r
- .model flat\r
+ .model flat,C\r
.code\r
\r
;------------------------------------------------------------------------------\r
; VOID\r
; );\r
;------------------------------------------------------------------------------\r
-_DisableInterrupts PROC\r
+DisableInterrupts PROC\r
cli\r
ret\r
-_DisableInterrupts ENDP\r
+DisableInterrupts ENDP\r
\r
END\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
+.global _InternalX86DisablePaging32\r
\r
#------------------------------------------------------------------------------\r
# VOID\r
# IN VOID *NewStack\r
# );\r
#------------------------------------------------------------------------------\r
-.global _InternalX86DisablePaging32\r
-_InternalX86DisablePaging32: \r
- movl 4(%esp),%ebx\r
- movl 8(%esp),%ecx\r
- movl 12(%esp),%edx\r
+_InternalX86DisablePaging32:\r
+ movl 4(%esp), %ebx\r
+ movl 8(%esp), %ecx\r
+ movl 12(%esp), %edx\r
pushfl\r
- popl %edi\r
+ pop %edi\r
cli\r
movl %cr0, %eax\r
- btrl $31,%eax\r
- movl 16(%esp),%esp\r
+ btrl $31, %eax\r
+ movl 16(%esp), %esp\r
movl %eax, %cr0\r
- pushl %edi\r
+ push %edi\r
popfl\r
- pushl %edx\r
- pushl %ecx\r
+ push %edx\r
+ push %ecx\r
call *%ebx\r
jmp .\r
-\r
-\r
-\r
mov ecx, [esp + 8]\r
mov edx, [esp + 12]\r
pushfd\r
- pop edi\r
+ pop edi ; save EFLAGS to edi\r
cli\r
mov eax, cr0\r
btr eax, 31\r
mov esp, [esp + 16]\r
mov cr0, eax\r
push edi\r
- popfd\r
+ popfd ; restore EFLAGS from edi\r
push edx\r
push ecx\r
call ebx\r
- jmp $\r
+ jmp $ ; EntryPoint() should not return\r
InternalX86DisablePaging32 ENDP\r
\r
END\r
#
#------------------------------------------------------------------------------
- .386:
- .code:
-
.global _InternalMathDivU64x32
+
+#------------------------------------------------------------------------------
+# UINT64
+# EFIAPI
+# InternalMathDivU64x32 (
+# IN UINT64 Dividend,
+# IN UINT32 Divisor
+# );
+#------------------------------------------------------------------------------
_InternalMathDivU64x32:
- movl 8(%esp),%eax
- movl 12(%esp),%ecx
- xorl %edx,%edx
+ movl 8(%esp), %eax
+ movl 12(%esp), %ecx
+ xorl %edx, %edx
divl %ecx
- pushl %eax
- movl 8(%esp),%eax
+ push %eax
+ movl 8(%esp), %eax
divl %ecx
- popl %edx
+ pop %edx
ret
.model flat,C\r
.code\r
\r
+;------------------------------------------------------------------------------\r
+; UINT64\r
+; EFIAPI\r
+; InternalMathDivU64x32 (\r
+; IN UINT64 Dividend,\r
+; IN UINT32 Divisor\r
+; );\r
+;------------------------------------------------------------------------------\r
InternalMathDivU64x32 PROC\r
mov eax, [esp + 8]\r
mov ecx, [esp + 12]\r
xor edx, edx\r
div ecx\r
- push eax\r
+ push eax ; save quotient on stack\r
mov eax, [esp + 8]\r
div ecx\r
- pop edx\r
+ pop edx ; restore high-order dword of the quotient\r
ret\r
InternalMathDivU64x32 ENDP\r
\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
-\r
.global _InternalMathDivRemU64x32\r
-_InternalMathDivRemU64x32: \r
- movl 12(%esp),%ecx\r
- movl 8(%esp),%eax\r
- xorl %edx,%edx\r
+\r
+#------------------------------------------------------------------------------\r
+# UINT64\r
+# EFIAPI\r
+# InternalMathDivRemU64x32 (\r
+# IN UINT64 Dividend,\r
+# IN UINT32 Divisor,\r
+# OUT UINT32 *Remainder\r
+# );\r
+#------------------------------------------------------------------------------\r
+_InternalMathDivRemU64x32:\r
+ movl 12(%esp), %ecx\r
+ movl 8(%esp), %eax\r
+ xorl %edx, %edx\r
divl %ecx\r
- pushl %eax\r
- movl 8(%esp),%eax\r
+ push %eax\r
+ movl 8(%esp), %eax\r
divl %ecx\r
- movl 20(%esp),%ecx\r
+ movl 20(%esp), %ecx\r
jecxz L1\r
- movl %edx,(%ecx)\r
-L1: \r
- popl %edx\r
+ movl %edx, (%ecx)\r
+L1:\r
+ pop %edx\r
ret\r
-\r
-\r
-\r
.model flat,C\r
.code\r
\r
+;------------------------------------------------------------------------------\r
+; UINT64\r
+; EFIAPI\r
+; InternalMathDivRemU64x32 (\r
+; IN UINT64 Dividend,\r
+; IN UINT32 Divisor,\r
+; OUT UINT32 *Remainder\r
+; );\r
+;------------------------------------------------------------------------------\r
InternalMathDivRemU64x32 PROC\r
mov ecx, [esp + 12]\r
mov eax, [esp + 8]\r
mov eax, [esp + 8]\r
div ecx\r
mov ecx, [esp + 20]\r
- jecxz @F\r
+ jecxz @F ; abandon remainder if Remainder == NULL\r
mov [ecx], edx\r
@@:\r
pop edx\r
#\r
#------------------------------------------------------------------------------\r
\r
+.global _InternalMathDivRemU64x32, _InternalMathDivRemU64x64\r
\r
-\r
- \r
-\r
-.extern _InternalMathDivRemU64x32\r
-\r
-.global _InternalMathDivRemU64x64\r
-_InternalMathDivRemU64x64: \r
- movl 16(%esp),%ecx\r
- testl %ecx,%ecx\r
- jnz _DivRemU64x64\r
- movl 20(%esp),%ecx\r
+#------------------------------------------------------------------------------\r
+# UINT64\r
+# EFIAPI\r
+# InternalMathDivRemU64x64 (\r
+# IN UINT64 Dividend,\r
+# IN UINT64 Divisor,\r
+# OUT UINT64 *Remainder OPTIONAL\r
+# );\r
+#------------------------------------------------------------------------------\r
+_InternalMathDivRemU64x64:\r
+ movl 16(%esp), %ecx\r
+ testl %ecx, %ecx\r
+ jnz Hard\r
+ movl 20(%esp), %ecx\r
jecxz L1\r
- and $0,4(%ecx)\r
- movl %ecx,16(%esp)\r
-L1: \r
+ and $0, 4(%ecx)\r
+ movl %ecx, 16(%esp)\r
+L1:\r
jmp _InternalMathDivRemU64x32\r
-\r
-\r
-.global _DivRemU64x64\r
-_DivRemU64x64:\r
- push %ebx \r
- push %esi \r
- push %edi \r
+Hard:\r
+ push %ebx\r
+ push %esi\r
+ push %edi\r
mov 20(%esp), %edx\r
mov 16(%esp), %eax\r
- movl %edx,%edi\r
- movl %eax,%esi\r
+ movl %edx, %edi\r
+ movl %eax, %esi\r
mov 24(%esp), %ebx\r
-L2: \r
+L2:\r
shrl %edx\r
- rcrl $1,%eax\r
- shrdl $1,%ecx,%ebx\r
+ rcrl $1, %eax\r
+ shrdl $1, %ecx, %ebx\r
shrl %ecx\r
jnz L2\r
divl %ebx\r
- movl %eax,%ebx\r
- movl 28(%esp),%ecx\r
+ movl %eax, %ebx\r
+ movl 28(%esp), %ecx\r
mull 24(%esp)\r
- imull %ebx,%ecx\r
- addl %ecx,%edx\r
+ imull %ebx, %ecx\r
+ addl %ecx, %edx\r
mov 32(%esp), %ecx\r
jc TooLarge\r
- cmpl %edx,%edi\r
+ cmpl %edx, %edi\r
ja Correct\r
jb TooLarge\r
- cmpl %eax,%esi\r
+ cmpl %eax, %esi\r
jae Correct\r
-TooLarge: \r
+TooLarge:\r
decl %ebx\r
jecxz Return\r
sub 24(%esp), %eax\r
sbb 28(%esp), %edx\r
-Correct: \r
+Correct:\r
jecxz Return\r
- subl %eax,%esi\r
- sbbl %edx,%edi\r
- movl %esi,(%ecx)\r
- movl %edi,4(%ecx)\r
-Return: \r
- movl %ebx,%eax\r
- xorl %edx,%edx\r
- push %edi \r
- push %esi \r
- push %ebx \r
+ subl %eax, %esi\r
+ sbbl %edx, %edi\r
+ movl %esi, (%ecx)\r
+ movl %edi, 4(%ecx)\r
+Return:\r
+ movl %ebx, %eax\r
+ xorl %edx, %edx\r
+ pop %edi\r
+ pop %esi\r
+ pop %ebx\r
ret\r
\r
EXTERN InternalMathDivRemU64x32:PROC\r
\r
+;------------------------------------------------------------------------------\r
+; UINT64\r
+; EFIAPI\r
+; InternalMathDivRemU64x64 (\r
+; IN UINT64 Dividend,\r
+; IN UINT64 Divisor,\r
+; OUT UINT64 *Remainder OPTIONAL\r
+; );\r
+;------------------------------------------------------------------------------\r
InternalMathDivRemU64x64 PROC\r
mov ecx, [esp + 16]\r
test ecx, ecx\r
- jnz _@DivRemU64x64\r
+ jnz _@DivRemU64x64 ; call _@DivRemU64x64 if Divisor > 2^32\r
mov ecx, [esp + 20]\r
jecxz @F\r
and dword ptr [ecx + 4], 0\r
\r
_@DivRemU64x64 PROC USES ebx esi edi\r
mov edx, dword ptr [esp + 20]\r
- mov eax, dword ptr [esp + 16]\r
+ mov eax, dword ptr [esp + 16] ; edx:eax <- dividend\r
mov edi, edx\r
- mov esi, eax\r
- mov ebx, dword ptr [esp + 24]\r
+ mov esi, eax ; edi:esi <- dividend\r
+ mov ebx, dword ptr [esp + 24] ; ecx:ebx <- divisor\r
@@:\r
shr edx, 1\r
rcr eax, 1\r
shr ecx, 1\r
jnz @B\r
div ebx\r
- mov ebx, eax\r
+ mov ebx, eax ; ebx <- quotient\r
mov ecx, [esp + 28]\r
mul dword ptr [esp + 24]\r
imul ecx, ebx\r
add edx, ecx\r
mov ecx, dword ptr [esp + 32]\r
- jc @TooLarge\r
- cmp edi, edx\r
+ jc @TooLarge ; product > 2^64\r
+ cmp edi, edx ; compare high 32 bits\r
ja @Correct\r
- jb @TooLarge\r
+ jb @TooLarge ; product > dividend\r
cmp esi, eax\r
- jae @Correct\r
+ jae @Correct ; product <= dividend\r
@TooLarge:\r
- dec ebx\r
- jecxz @Return\r
+ dec ebx ; adjust quotient by -1\r
+ jecxz @Return ; return if Remainder == NULL\r
sub eax, dword ptr [esp + 24]\r
sbb edx, dword ptr [esp + 28]\r
@Correct:\r
jecxz @Return\r
sub esi, eax\r
- sbb edi, edx\r
+ sbb edi, edx ; edi:esi <- remainder\r
mov [ecx], esi\r
mov [ecx + 4], edi\r
@Return:\r
- mov eax, ebx\r
+ mov eax, ebx ; eax <- quotient\r
xor edx, edx\r
ret\r
_@DivRemU64x64 ENDP\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
+.global _EnableDisableInterrupts\r
\r
#------------------------------------------------------------------------------\r
# VOID\r
# VOID\r
# );\r
#------------------------------------------------------------------------------\r
-.global _EnableDisableInterrupts\r
-_EnableDisableInterrupts: \r
+_EnableDisableInterrupts:\r
sti\r
cli\r
ret\r
-\r
-\r
-\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
+.global _EnableInterrupts\r
\r
#------------------------------------------------------------------------------\r
# VOID\r
# VOID\r
# );\r
#------------------------------------------------------------------------------\r
-.global _EnableInterrupts\r
-_EnableInterrupts: \r
+_EnableInterrupts:\r
sti\r
ret\r
-\r
-\r
-\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
+.global _InternalX86EnablePaging32\r
\r
#------------------------------------------------------------------------------\r
# VOID\r
# IN VOID *NewStack\r
# );\r
#------------------------------------------------------------------------------\r
-.global _InternalX86EnablePaging32\r
-_InternalX86EnablePaging32: \r
- movl 4(%esp),%ebx\r
- movl 8(%esp),%ecx\r
- movl 12(%esp),%edx\r
+_InternalX86EnablePaging32:\r
+ movl 4(%esp), %ebx\r
+ movl 8(%esp), %ecx\r
+ movl 12(%esp), %edx\r
pushfl\r
- popl %edi\r
+ pop %edi\r
cli\r
movl %cr0, %eax\r
- btsl $31,%eax\r
- movl 16(%esp),%esp\r
+ btsl $31, %eax\r
+ movl 16(%esp), %esp\r
movl %eax, %cr0\r
- pushl %edi\r
+ push %edi\r
popfl\r
- pushl %edx\r
- pushl %ecx\r
+ push %edx\r
+ push %ecx\r
call *%ebx\r
jmp .\r
-\r
-\r
-\r
#\r
#------------------------------------------------------------------------------\r
\r
- \r
- #.MODEL flat\r
- \r
+.global _InternalX86EnablePaging64\r
\r
#------------------------------------------------------------------------------\r
# VOID\r
# IN UINT64 NewStack\r
# );\r
#------------------------------------------------------------------------------\r
-.global _InternalX86EnablePaging64\r
_InternalX86EnablePaging64:\r
cli\r
movl $LongStart, (%esp)\r
movl %eax, %cr0 # enable paging\r
lret\r
LongStart: # long mode starts here\r
- .byte 0x67,0x48\r
+ .byte 0x67, 0x48\r
movl (%esp), %ebx # mov rbx, [esp]\r
- .byte 0x67,0x48\r
+ .byte 0x67, 0x48\r
movl 8(%esp), %ecx # mov rcx, [esp + 8]\r
- .byte 0x67,0x48\r
+ .byte 0x67, 0x48\r
movl 0x10(%esp), %edx # mov rdx, [esp + 10h]\r
- .byte 0x67,0x48\r
+ .byte 0x67, 0x48\r
movl 0x18(%esp), %esp # mov rsp, [esp + 18h]\r
.byte 0x48\r
addl $0x-20, %esp # add rsp, -20h\r
.model flat,C\r
.code\r
\r
+;------------------------------------------------------------------------------\r
+; VOID\r
+; EFIAPI\r
+; InternalX86EnablePaging64 (\r
+; IN UINT16 Cs,\r
+; IN UINT64 EntryPoint,\r
+; IN UINT64 Context1, OPTIONAL\r
+; IN UINT64 Context2, OPTIONAL\r
+; IN UINT64 NewStack\r
+; );\r
+;------------------------------------------------------------------------------\r
InternalX86EnablePaging64 PROC\r
cli\r
- mov [esp], @F ; offset for far retf\r
+ mov [esp], @F ; offset for far retf, seg is the 1st arg\r
mov eax, cr4\r
or al, (1 SHL 5)\r
mov cr4, eax ; enable PAE\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
- \r
+.global _AsmFlushCacheLine\r
\r
#------------------------------------------------------------------------------\r
# VOID\r
# IN VOID *LinearAddress\r
# );\r
#------------------------------------------------------------------------------\r
-.global _AsmFlushCacheLine\r
-_AsmFlushCacheLine: \r
- movl 4(%esp),%eax\r
+_AsmFlushCacheLine:\r
+ movl 4(%esp), %eax\r
clflush (%eax)\r
ret\r
-\r
-\r
-\r
;------------------------------------------------------------------------------\r
\r
.586P\r
- .model flat\r
+ .model flat,C\r
.xmm\r
.code\r
\r
; IN VOID *LinearAddress\r
; );\r
;------------------------------------------------------------------------------\r
-_AsmFlushCacheLine PROC\r
+AsmFlushCacheLine PROC\r
mov eax, [esp + 4]\r
clflush [eax]\r
ret\r
-_AsmFlushCacheLine ENDP\r
+AsmFlushCacheLine ENDP\r
\r
END\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
- \r
+.global _InternalX86FxRestore\r
\r
#------------------------------------------------------------------------------\r
# VOID\r
# IN CONST IA32_FX_BUFFER *Buffer\r
# );\r
#------------------------------------------------------------------------------\r
-.global _InternalX86FxRestore\r
-_InternalX86FxRestore: \r
- movl 4(%esp),%eax\r
+_InternalX86FxRestore:\r
+ movl 4(%esp), %eax\r
fxrstor (%eax)\r
ret\r
-\r
-\r
-\r
;\r
;------------------------------------------------------------------------------\r
\r
- .586P\r
+ .586\r
.model flat,C\r
.xmm\r
.code\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
- \r
+.global _InternalX86FxSave\r
\r
#------------------------------------------------------------------------------\r
# VOID\r
# OUT IA32_FX_BUFFER *Buffer\r
# );\r
#------------------------------------------------------------------------------\r
-.global _InternalX86FxSave\r
-_InternalX86FxSave: \r
- movl 4(%esp),%eax\r
+_InternalX86FxSave:\r
+ movl 4(%esp), %eax\r
fxsave (%eax)\r
ret\r
-\r
-\r
-\r
;\r
;------------------------------------------------------------------------------\r
\r
- .586P\r
+ .586\r
.model flat,C\r
.xmm\r
.code\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
+.global _InternalSyncCompareExchange32\r
\r
#------------------------------------------------------------------------------\r
# UINT32\r
# IN UINT32 ExchangeValue\r
# );\r
#------------------------------------------------------------------------------\r
-.global _InternalSyncCompareExchange32\r
-_InternalSyncCompareExchange32: \r
- movl 4(%esp),%ecx\r
- movl 8(%esp),%eax\r
- movl 12(%esp),%edx\r
- lock cmpxchgl %edx,(%ecx)\r
+_InternalSyncCompareExchange32:\r
+ movl 4(%esp), %ecx\r
+ movl 8(%esp), %eax\r
+ movl 12(%esp), %edx\r
+ lock\r
+ cmpxchgl %edx, (%ecx)\r
ret\r
-\r
-\r
-\r
;------------------------------------------------------------------------------\r
; UINT32\r
; EFIAPI\r
-; InterlockedCompareExchange32 (\r
+; InternalSyncCompareExchange32 (\r
; IN UINT32 *Value,\r
; IN UINT32 CompareValue,\r
; IN UINT32 ExchangeValue\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
+.global _InternalSyncCompareExchange64\r
\r
#------------------------------------------------------------------------------\r
# UINT64\r
# IN UINT64 ExchangeValue\r
# );\r
#------------------------------------------------------------------------------\r
-.global _InternalSyncCompareExchange64\r
_InternalSyncCompareExchange64:\r
push %esi\r
push %ebx\r
- movl 12(%esp),%esi\r
- movl 16(%esp),%eax\r
- movl 20(%esp),%edx\r
- movl 24(%esp),%ebx\r
- movl 28(%esp),%ecx\r
- lock \r
+ movl 12(%esp), %esi\r
+ movl 16(%esp), %eax\r
+ movl 20(%esp), %edx\r
+ movl 24(%esp), %ebx\r
+ movl 28(%esp), %ecx\r
+ lock\r
cmpxchg8b (%esi)\r
pop %ebx\r
pop %esi\r
ret\r
-\r
-\r
-\r
;------------------------------------------------------------------------------\r
; UINT64\r
; EFIAPI\r
-; InterlockedCompareExchange64 (\r
+; InternalSyncCompareExchange64 (\r
; IN UINT64 *Value,\r
; IN UINT64 CompareValue,\r
; IN UINT64 ExchangeValue\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
+.global _InternalSyncDecrement\r
\r
#------------------------------------------------------------------------------\r
# UINT32\r
# IN UINT32 *Value\r
# );\r
#------------------------------------------------------------------------------\r
-.global _InternalSyncDecrement\r
-_InternalSyncDecrement: \r
- movl 4(%esp),%eax\r
- lock \r
- decl (%eax)\r
- movl (%eax),%eax\r
+_InternalSyncDecrement:\r
+ movl 4(%esp), %eax\r
+ lock\r
+ decl (%eax)\r
+ movl (%eax), %eax\r
ret\r
-\r
-\r
-\r
;------------------------------------------------------------------------------\r
; UINT32\r
; EFIAPI\r
-; InterlockedDecrement (\r
+; InternalSyncDecrement (\r
; IN UINT32 *Value\r
; );\r
;------------------------------------------------------------------------------\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
+.global _InternalSyncIncrement\r
\r
#------------------------------------------------------------------------------\r
# UINT32\r
# IN UINT32 *Value\r
# );\r
#------------------------------------------------------------------------------\r
-.global _InternalSyncIncrement\r
-_InternalSyncIncrement: \r
- movl 4(%esp),%eax\r
- lock \r
- incl (%eax)\r
- movl (%eax),%eax\r
+_InternalSyncIncrement:\r
+ movl 4(%esp), %eax\r
+ lock\r
+ incl (%eax)\r
+ movl (%eax), %eax\r
ret\r
-\r
-\r
-\r
;------------------------------------------------------------------------------\r
; UINT32\r
; EFIAPI\r
-; InterlockedIncrement (\r
+; InternalSyncIncrement (\r
; IN UINT32 *Value\r
; );\r
;------------------------------------------------------------------------------\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
+.global _AsmInvd\r
\r
#------------------------------------------------------------------------------\r
# VOID\r
# VOID\r
# );\r
#------------------------------------------------------------------------------\r
-.global _AsmInvd\r
-_AsmInvd: \r
+_AsmInvd:\r
invd\r
ret\r
-\r
-\r
-\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
-\r
.global _InternalMathLRotU64\r
+\r
+#------------------------------------------------------------------------------\r
+# UINT64\r
+# EFIAPI\r
+# InternalMathLRotU64 (\r
+# IN UINT64 Operand,\r
+# IN UINTN Count\r
+# );\r
+#------------------------------------------------------------------------------\r
_InternalMathLRotU64:\r
push %ebx\r
- movb 16(%esp),%cl\r
- movl 12(%esp),%edx\r
- movl 8(%esp),%eax\r
- shldl %cl,%edx,%ebx\r
- shldl %cl,%eax,%edx\r
- rorl %cl,%ebx\r
- shldl %cl,%ebx,%eax\r
- testb $32,%cl\r
+ movb 16(%esp), %cl\r
+ movl 12(%esp), %edx\r
+ movl 8(%esp), %eax\r
+ shldl %cl, %edx, %ebx\r
+ shldl %cl, %eax, %edx\r
+ rorl %cl, %ebx\r
+ shldl %cl, %ebx, %eax\r
+ testb $32, %cl\r
cmovnz %eax, %ecx\r
- cmovnz %edx, %eax \r
+ cmovnz %edx, %eax\r
cmovnz %ecx, %edx\r
pop %ebx\r
ret\r
-\r
-\r
-\r
.model flat,C\r
.code\r
\r
+;------------------------------------------------------------------------------\r
+; UINT64\r
+; EFIAPI\r
+; InternalMathLRotU64 (\r
+; IN UINT64 Operand,\r
+; IN UINTN Count\r
+; );\r
+;------------------------------------------------------------------------------\r
InternalMathLRotU64 PROC USES ebx\r
mov cl, [esp + 16]\r
mov edx, [esp + 12]\r
shld edx, eax, cl\r
ror ebx, cl\r
shld eax, ebx, cl\r
- test cl, 32\r
+ test cl, 32 ; Count >= 32?\r
cmovnz ecx, eax\r
cmovnz eax, edx\r
cmovnz edx, ecx\r
#
#------------------------------------------------------------------------------
- .686:
- #.MODEL flat,C
- .code:
-
.global _InternalMathLShiftU64
+
+#------------------------------------------------------------------------------
+# UINT64
+# EFIAPI
+# InternalMathLShiftU64 (
+# IN UINT64 Operand,
+# IN UINTN Count
+# );
+#------------------------------------------------------------------------------
_InternalMathLShiftU64:
movb 12(%esp), %cl
xorl %eax, %eax
testb $32, %cl
cmovz %edx, %eax
cmovz 0x8(%esp), %edx
- shld %cl,%eax,%edx
+ shld %cl, %eax, %edx
shl %cl, %eax
ret
.model flat,C\r
.code\r
\r
+;------------------------------------------------------------------------------\r
+; UINT64\r
+; EFIAPI\r
+; InternalMathLShiftU64 (\r
+; IN UINT64 Operand,\r
+; IN UINTN Count\r
+; );\r
+;------------------------------------------------------------------------------\r
InternalMathLShiftU64 PROC\r
mov cl, [esp + 12]\r
xor eax, eax\r
mov edx, [esp + 4]\r
- test cl, 32\r
+ test cl, 32 ; Count >= 32?\r
cmovz eax, edx\r
cmovz edx, [esp + 8]\r
shld edx, eax, cl\r
#
#------------------------------------------------------------------------------
- .386:
- .code:
+.global _InternalLongJump
-.globl _InternalLongJump
+#------------------------------------------------------------------------------
+# VOID
+# EFIAPI
+# InternalLongJump (
+# IN BASE_LIBRARY_JUMP_BUFFER *JumpBuffer,
+# IN UINTN Value
+# );
+#------------------------------------------------------------------------------
_InternalLongJump:
- popl %eax
- popl %edx
- popl %eax
+ pop %eax
+ pop %edx
+ pop %eax
movl (%edx), %ebx
movl 4(%edx), %esi
movl 8(%edx), %edi
movl 12(%edx), %ebp
movl 16(%edx), %esp
jmp *20(%edx)
-#InternalLongJump ENDP
-
-
.model flat,C\r
.code\r
\r
+;------------------------------------------------------------------------------\r
+; VOID\r
+; EFIAPI\r
+; InternalLongJump (\r
+; IN BASE_LIBRARY_JUMP_BUFFER *JumpBuffer,\r
+; IN UINTN Value\r
+; );\r
+;------------------------------------------------------------------------------\r
InternalLongJump PROC\r
- pop eax\r
- pop edx\r
- pop eax\r
+ pop eax ; skip return address\r
+ pop edx ; edx <- JumpBuffer\r
+ pop eax ; eax <- Value\r
mov ebx, [edx]\r
mov esi, [edx + 4]\r
mov edi, [edx + 8]\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
-\r
.global _InternalMathModU64x32\r
-_InternalMathModU64x32: \r
- movl 8(%esp),%eax\r
- movl 12(%esp),%ecx\r
- xorl %edx,%edx\r
+\r
+#------------------------------------------------------------------------------\r
+# UINT32\r
+# EFIAPI\r
+# InternalMathModU64x32 (\r
+# IN UINT64 Dividend,\r
+# IN UINT32 Divisor\r
+# );\r
+#------------------------------------------------------------------------------\r
+_InternalMathModU64x32:\r
+ movl 8(%esp), %eax\r
+ movl 12(%esp), %ecx\r
+ xorl %edx, %edx\r
divl %ecx\r
- movl 4(%esp),%eax\r
+ movl 4(%esp), %eax\r
divl %ecx\r
- movl %edx,%eax\r
+ movl %edx, %eax\r
ret\r
-\r
-\r
-\r
.model flat,C\r
.code\r
\r
+;------------------------------------------------------------------------------\r
+; UINT32\r
+; EFIAPI\r
+; InternalMathModU64x32 (\r
+; IN UINT64 Dividend,\r
+; IN UINT32 Divisor\r
+; );\r
+;------------------------------------------------------------------------------\r
InternalMathModU64x32 PROC\r
mov eax, [esp + 8]\r
mov ecx, [esp + 12]\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
+.global _AsmMonitor\r
\r
#------------------------------------------------------------------------------\r
# UINT64\r
# IN UINTN Edx\r
# );\r
#------------------------------------------------------------------------------\r
-.global _AsmMonitor\r
-_AsmMonitor: \r
- movl 4(%esp),%eax\r
- movl 8(%esp),%ecx\r
- movl 12(%esp),%edx\r
- monitor %eax,%ecx,%edx\r
+_AsmMonitor:\r
+ movl 4(%esp), %eax\r
+ movl 8(%esp), %ecx\r
+ movl 12(%esp), %edx\r
+ monitor %eax, %ecx, %edx\r
ret\r
-\r
-\r
-\r
;------------------------------------------------------------------------------\r
\r
.686\r
- .model flat\r
+ .model flat,C\r
.code\r
\r
;------------------------------------------------------------------------------\r
-; UINT64\r
+; UINTN\r
; EFIAPI\r
; AsmMonitor (\r
; IN UINTN Eax,\r
; IN UINTN Edx\r
; );\r
;------------------------------------------------------------------------------\r
-_AsmMonitor PROC\r
+AsmMonitor PROC\r
mov eax, [esp + 4]\r
mov ecx, [esp + 8]\r
mov edx, [esp + 12]\r
- DB 0fh, 1, 0c8h\r
+ DB 0fh, 1, 0c8h ; monitor\r
ret\r
-_AsmMonitor ENDP\r
+AsmMonitor ENDP\r
\r
END\r
#
#------------------------------------------------------------------------------
- .386:
- .code:
+ .386:
+ .code:
.global _InternalMathMultU64x32
+
+#------------------------------------------------------------------------------
+# UINT64
+# EFIAPI
+# InternalMathMultU64x32 (
+# IN UINT64 Multiplicand,
+# IN UINT32 Multiplier
+# );
+#------------------------------------------------------------------------------
_InternalMathMultU64x32:
- movl 12(%esp),%ecx
- movl %ecx,%eax
- imull 8(%esp),%ecx
- mull 0x4(%esp)
- addl %ecx,%edx
+ movl 12(%esp), %ecx
+ movl %ecx, %eax
+ imull 8(%esp), %ecx
+ mull 0x4(%esp)
+ addl %ecx, %edx
ret
.model flat,C\r
.code\r
\r
+;------------------------------------------------------------------------------\r
+; UINT64\r
+; EFIAPI\r
+; InternalMathMultU64x32 (\r
+; IN UINT64 Multiplicand,\r
+; IN UINT32 Multiplier\r
+; );\r
+;------------------------------------------------------------------------------\r
InternalMathMultU64x32 PROC\r
mov ecx, [esp + 12]\r
mov eax, ecx\r
- imul ecx, [esp + 8]\r
+ imul ecx, [esp + 8] ; overflow not detectable\r
mul dword ptr [esp + 4]\r
add edx, ecx\r
ret\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
-\r
.global _InternalMathMultU64x64\r
-_InternalMathMultU64x64: \r
+\r
+#------------------------------------------------------------------------------\r
+# UINT64\r
+# EFIAPI\r
+# InternalMathMultU64x64 (\r
+# IN UINT64 Multiplicand,\r
+# IN UINT64 Multiplier\r
+# );\r
+#------------------------------------------------------------------------------\r
+_InternalMathMultU64x64:\r
push %ebx\r
- movl 8(%esp),%ebx\r
- movl 16(%esp),%edx\r
- movl %ebx,%ecx\r
- movl %edx,%eax\r
- imull 20(%esp),%ebx\r
- imull 12(%esp),%edx\r
- addl %edx,%ebx\r
+ movl 8(%esp), %ebx\r
+ movl 16(%esp), %edx\r
+ movl %ebx, %ecx\r
+ movl %edx, %eax\r
+ imull 20(%esp), %ebx\r
+ imull 12(%esp), %edx\r
+ addl %edx, %ebx\r
mull %ecx\r
- addl %ebx,%edx\r
+ addl %ebx, %edx\r
pop %ebx\r
ret\r
-\r
-\r
-\r
.model flat,C\r
.code\r
\r
+;------------------------------------------------------------------------------\r
+; UINT64\r
+; EFIAPI\r
+; InternalMathMultU64x64 (\r
+; IN UINT64 Multiplicand,\r
+; IN UINT64 Multiplier\r
+; );\r
+;------------------------------------------------------------------------------\r
InternalMathMultU64x64 PROC USES ebx\r
mov ebx, [esp + 8]\r
mov edx, [esp + 16]\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
+.global _AsmMwait\r
\r
#------------------------------------------------------------------------------\r
# UINT64\r
# IN UINTN Ecx\r
# );\r
#------------------------------------------------------------------------------\r
-.global _AsmMwait\r
-_AsmMwait: \r
- movl 4(%esp),%eax\r
- movl 8(%esp),%ecx\r
- mwait %eax,%ecx\r
+_AsmMwait:\r
+ movl 4(%esp), %eax\r
+ movl 8(%esp), %ecx\r
+ mwait %eax, %ecx\r
ret\r
-\r
-\r
-\r
;------------------------------------------------------------------------------\r
\r
.686\r
- .model flat\r
+ .model flat,C\r
.code\r
\r
;------------------------------------------------------------------------------\r
-; UINT64\r
+; UINTN\r
; EFIAPI\r
; AsmMwait (\r
; IN UINTN Eax,\r
; IN UINTN Ecx\r
; );\r
;------------------------------------------------------------------------------\r
-_AsmMwait PROC\r
+AsmMwait PROC\r
mov eax, [esp + 4]\r
mov ecx, [esp + 8]\r
- DB 0fh, 1, 0c9h\r
+ DB 0fh, 1, 0c9h ; mwait\r
ret\r
-_AsmMwait ENDP\r
+AsmMwait ENDP\r
\r
END\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
-\r
.global _InternalMathRRotU64\r
+\r
+#------------------------------------------------------------------------------\r
+# UINT64\r
+# EFIAPI\r
+# InternalMathRRotU64 (\r
+# IN UINT64 Operand,\r
+# IN UINTN Count\r
+# );\r
+#------------------------------------------------------------------------------\r
_InternalMathRRotU64:\r
push %ebx\r
- movb 16(%esp),%cl\r
- movl 8(%esp),%eax\r
- movl 12(%esp),%edx\r
- shrdl %cl,%eax,%ebx\r
- shrdl %cl,%edx,%eax\r
- roll %cl,%ebx\r
- shrdl %cl,%ebx,%edx\r
- testb $32,%cl\r
+ movb 16(%esp), %cl\r
+ movl 8(%esp), %eax\r
+ movl 12(%esp), %edx\r
+ shrdl %cl, %eax, %ebx\r
+ shrdl %cl, %edx, %eax\r
+ roll %cl, %ebx\r
+ shrdl %cl, %ebx, %edx\r
+ testb $32, %cl\r
cmovnz %eax, %ecx\r
cmovnz %edx, %eax\r
cmovnz %ecx, %edx\r
pop %ebx\r
ret\r
-\r
-\r
-\r
.model flat,C\r
.code\r
\r
+;------------------------------------------------------------------------------\r
+; UINT64\r
+; EFIAPI\r
+; InternalMathRRotU64 (\r
+; IN UINT64 Operand,\r
+; IN UINTN Count\r
+; );\r
+;------------------------------------------------------------------------------\r
InternalMathRRotU64 PROC USES ebx\r
mov cl, [esp + 16]\r
mov eax, [esp + 8]\r
shrd eax, edx, cl\r
rol ebx, cl\r
shrd edx, ebx, cl\r
- test cl, 32\r
+ test cl, 32 ; Count >= 32?\r
cmovnz ecx, eax\r
cmovnz eax, edx\r
cmovnz edx, ecx\r
#
#------------------------------------------------------------------------------
- .686:
- .code:
+ .686:
+ .code:
.global _InternalMathRShiftU64
+
+#------------------------------------------------------------------------------
+# UINT64
+# EFIAPI
+# InternalMathRShiftU64 (
+# IN UINT64 Operand,
+# IN UINTN Count
+# );
+#------------------------------------------------------------------------------
_InternalMathRShiftU64:
- movb 12(%esp),%cl
- xorl %edx,%edx
- movl 8(%esp),%eax
- testb $32,%cl
+ movb 12(%esp), %cl
+ xorl %edx, %edx
+ movl 8(%esp), %eax
+ testb $32, %cl
cmovz %eax, %edx
cmovz 0x4(%esp), %eax
- shrdl %cl,%edx,%eax
- shr %cl,%edx
+ shrdl %cl, %edx, %eax
+ shr %cl, %edx
ret
.model flat,C\r
.code\r
\r
+;------------------------------------------------------------------------------\r
+; UINT64\r
+; EFIAPI\r
+; InternalMathRShiftU64 (\r
+; IN UINT64 Operand,\r
+; IN UINTN Count\r
+; );\r
+;------------------------------------------------------------------------------\r
InternalMathRShiftU64 PROC\r
mov cl, [esp + 12]\r
xor edx, edx\r
ret\r
InternalMathRShiftU64 ENDP\r
\r
- END
\ No newline at end of file
+ END\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
+.global _AsmReadCr0\r
\r
#------------------------------------------------------------------------------\r
# UINTN\r
# VOID\r
# );\r
#------------------------------------------------------------------------------\r
-.global _AsmReadCr0\r
-_AsmReadCr0: \r
+_AsmReadCr0:\r
movl %cr0, %eax\r
ret\r
-\r
-\r
-\r
;------------------------------------------------------------------------------\r
\r
.386p\r
- .model flat\r
+ .model flat,C\r
.code\r
\r
;------------------------------------------------------------------------------\r
; VOID\r
; );\r
;------------------------------------------------------------------------------\r
-_AsmReadCr0 PROC\r
+AsmReadCr0 PROC\r
mov eax, cr0\r
ret\r
-_AsmReadCr0 ENDP\r
+AsmReadCr0 ENDP\r
\r
END\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
+.global _AsmReadCr2\r
\r
#------------------------------------------------------------------------------\r
# UINTN\r
# VOID\r
# );\r
#------------------------------------------------------------------------------\r
-.global _AsmReadCr2\r
-_AsmReadCr2: \r
+_AsmReadCr2:\r
movl %cr2, %eax\r
ret\r
-\r
-\r
-\r
;------------------------------------------------------------------------------\r
\r
.386p\r
- .model flat\r
+ .model flat,C\r
.code\r
\r
;------------------------------------------------------------------------------\r
; VOID\r
; );\r
;------------------------------------------------------------------------------\r
-_AsmReadCr2 PROC\r
+AsmReadCr2 PROC\r
mov eax, cr2\r
ret\r
-_AsmReadCr2 ENDP\r
+AsmReadCr2 ENDP\r
\r
END\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
+.global _AsmReadCr3\r
\r
#------------------------------------------------------------------------------\r
# UINTN\r
# VOID\r
# );\r
#------------------------------------------------------------------------------\r
-.global _AsmReadCr3\r
-_AsmReadCr3: \r
+_AsmReadCr3:\r
movl %cr3, %eax\r
ret\r
-\r
-\r
-\r
;------------------------------------------------------------------------------\r
\r
.386p\r
- .model flat\r
+ .model flat,C\r
.code\r
\r
;------------------------------------------------------------------------------\r
; VOID\r
; );\r
;------------------------------------------------------------------------------\r
-_AsmReadCr3 PROC\r
+AsmReadCr3 PROC\r
mov eax, cr3\r
ret\r
-_AsmReadCr3 ENDP\r
+AsmReadCr3 ENDP\r
\r
END\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
+.global _AsmReadCr4\r
\r
#------------------------------------------------------------------------------\r
# UINTN\r
# VOID\r
# );\r
#------------------------------------------------------------------------------\r
-.global _AsmReadCr4\r
-_AsmReadCr4: \r
+_AsmReadCr4:\r
movl %cr4, %eax\r
ret\r
-\r
-\r
-\r
;------------------------------------------------------------------------------\r
\r
.586p\r
- .model flat\r
+ .model flat,C\r
.code\r
\r
;------------------------------------------------------------------------------\r
; VOID\r
; );\r
;------------------------------------------------------------------------------\r
-_AsmReadCr4 PROC\r
+AsmReadCr4 PROC\r
mov eax, cr4\r
ret\r
-_AsmReadCr4 ENDP\r
+AsmReadCr4 ENDP\r
\r
END\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
+.global _AsmReadCs\r
\r
#------------------------------------------------------------------------------\r
# UINT16\r
# VOID\r
# );\r
#------------------------------------------------------------------------------\r
-.global _AsmReadCs\r
-_AsmReadCs: \r
- movw %cs,%ax\r
+_AsmReadCs:\r
+ movl %cs, %eax\r
ret\r
-\r
-\r
-\r
;------------------------------------------------------------------------------\r
\r
.386\r
- .model flat\r
+ .model flat,C\r
.code\r
\r
;------------------------------------------------------------------------------\r
; VOID\r
; );\r
;------------------------------------------------------------------------------\r
-_AsmReadCs PROC\r
- mov ax, cs\r
+AsmReadCs PROC\r
+ mov eax, cs\r
ret\r
-_AsmReadCs ENDP\r
+AsmReadCs ENDP\r
\r
END\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
- \r
+.global _AsmReadDr0\r
\r
#------------------------------------------------------------------------------\r
# UINTN\r
# VOID\r
# );\r
#------------------------------------------------------------------------------\r
-.global _AsmReadDr0\r
-_AsmReadDr0: \r
+_AsmReadDr0:\r
movl %dr0, %eax\r
ret\r
-\r
-\r
-\r
;------------------------------------------------------------------------------\r
\r
.586p\r
- .model flat\r
+ .model flat,C\r
.code\r
\r
;------------------------------------------------------------------------------\r
; VOID\r
; );\r
;------------------------------------------------------------------------------\r
-_AsmReadDr0 PROC\r
+AsmReadDr0 PROC\r
mov eax, dr0\r
ret\r
-_AsmReadDr0 ENDP\r
+AsmReadDr0 ENDP\r
\r
END\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
+.global _AsmReadDr1\r
\r
#------------------------------------------------------------------------------\r
# UINTN\r
# VOID\r
# );\r
#------------------------------------------------------------------------------\r
-.global _AsmReadDr1\r
-_AsmReadDr1: \r
+_AsmReadDr1:\r
movl %dr1, %eax\r
ret\r
-\r
-\r
-\r
;------------------------------------------------------------------------------\r
\r
.586p\r
- .model flat\r
+ .model flat,C\r
.code\r
\r
;------------------------------------------------------------------------------\r
; VOID\r
; );\r
;------------------------------------------------------------------------------\r
-_AsmReadDr1 PROC\r
+AsmReadDr1 PROC\r
mov eax, dr1\r
ret\r
-_AsmReadDr1 ENDP\r
+AsmReadDr1 ENDP\r
\r
END\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
+.global _AsmReadDr2\r
\r
#------------------------------------------------------------------------------\r
# UINTN\r
# VOID\r
# );\r
#------------------------------------------------------------------------------\r
-.global _AsmReadDr2\r
-_AsmReadDr2: \r
+_AsmReadDr2:\r
movl %dr2, %eax\r
ret\r
-\r
-\r
-\r
;------------------------------------------------------------------------------\r
\r
.586p\r
- .model flat\r
+ .model flat,C\r
.code\r
\r
;------------------------------------------------------------------------------\r
; VOID\r
; );\r
;------------------------------------------------------------------------------\r
-_AsmReadDr2 PROC\r
+AsmReadDr2 PROC\r
mov eax, dr2\r
ret\r
-_AsmReadDr2 ENDP\r
+AsmReadDr2 ENDP\r
\r
END\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
+.global _AsmReadDr3\r
\r
#------------------------------------------------------------------------------\r
# UINTN\r
# VOID\r
# );\r
#------------------------------------------------------------------------------\r
-.global _AsmReadDr3\r
-_AsmReadDr3: \r
+_AsmReadDr3:\r
movl %dr3, %eax\r
ret\r
-\r
-\r
-\r
;------------------------------------------------------------------------------\r
\r
.586p\r
- .model flat\r
+ .model flat,C\r
.code\r
\r
;------------------------------------------------------------------------------\r
; VOID\r
; );\r
;------------------------------------------------------------------------------\r
-_AsmReadDr3 PROC\r
+AsmReadDr3 PROC\r
mov eax, dr3\r
ret\r
-_AsmReadDr3 ENDP\r
+AsmReadDr3 ENDP\r
\r
END\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
+.global _AsmReadDr4\r
\r
#------------------------------------------------------------------------------\r
# UINTN\r
# VOID\r
# );\r
#------------------------------------------------------------------------------\r
-.global _AsmReadDr4\r
-_AsmReadDr4: \r
+_AsmReadDr4:\r
movl %dr4, %eax\r
ret\r
-\r
-\r
-\r
;------------------------------------------------------------------------------\r
\r
.586p\r
- .model flat\r
+ .model flat,C\r
.code\r
\r
;------------------------------------------------------------------------------\r
; VOID\r
; );\r
;------------------------------------------------------------------------------\r
-_AsmReadDr4 PROC\r
+AsmReadDr4 PROC\r
DB 0fh, 21h, 0e0h\r
ret\r
-_AsmReadDr4 ENDP\r
+AsmReadDr4 ENDP\r
\r
END\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
+.global _AsmReadDr5\r
\r
#------------------------------------------------------------------------------\r
# UINTN\r
# VOID\r
# );\r
#------------------------------------------------------------------------------\r
-.global _AsmReadDr5\r
-_AsmReadDr5: \r
+_AsmReadDr5:\r
movl %dr5, %eax\r
ret\r
-\r
-\r
-\r
;------------------------------------------------------------------------------\r
\r
.586p\r
- .model flat\r
+ .model flat,C\r
.code\r
\r
;------------------------------------------------------------------------------\r
; VOID\r
; );\r
;------------------------------------------------------------------------------\r
-_AsmReadDr5 PROC\r
+AsmReadDr5 PROC\r
DB 0fh, 21h, 0e8h\r
ret\r
-_AsmReadDr5 ENDP\r
+AsmReadDr5 ENDP\r
\r
END\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
+.global _AsmReadDr6\r
\r
#------------------------------------------------------------------------------\r
# UINTN\r
# VOID\r
# );\r
#------------------------------------------------------------------------------\r
-.global _AsmReadDr6\r
-_AsmReadDr6: \r
+_AsmReadDr6:\r
movl %dr6, %eax\r
ret\r
-\r
-\r
-\r
;------------------------------------------------------------------------------\r
\r
.586p\r
- .model flat\r
+ .model flat,C\r
.code\r
\r
;------------------------------------------------------------------------------\r
; VOID\r
; );\r
;------------------------------------------------------------------------------\r
-_AsmReadDr6 PROC\r
+AsmReadDr6 PROC\r
mov eax, dr6\r
ret\r
-_AsmReadDr6 ENDP\r
+AsmReadDr6 ENDP\r
\r
END\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
+.global _AsmReadDr7\r
\r
#------------------------------------------------------------------------------\r
# UINTN\r
# VOID\r
# );\r
#------------------------------------------------------------------------------\r
-.global _AsmReadDr7\r
-_AsmReadDr7: \r
+_AsmReadDr7:\r
movl %dr7, %eax\r
ret\r
-\r
-\r
-\r
;------------------------------------------------------------------------------\r
\r
.586p\r
- .model flat\r
+ .model flat,C\r
.code\r
\r
;------------------------------------------------------------------------------\r
; VOID\r
; );\r
;------------------------------------------------------------------------------\r
-_AsmReadDr7 PROC\r
+AsmReadDr7 PROC\r
mov eax, dr7\r
ret\r
-_AsmReadDr7 ENDP\r
+AsmReadDr7 ENDP\r
\r
END\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
+.global _AsmReadEflags\r
\r
#------------------------------------------------------------------------------\r
# UINT16\r
# VOID\r
# );\r
#------------------------------------------------------------------------------\r
-.global _AsmReadDs\r
-_AsmReadDs: \r
- movw %ds,%ax\r
+_AsmReadDs:\r
+ movl %ds, %eax\r
ret\r
-\r
-\r
-\r
;------------------------------------------------------------------------------\r
\r
.386\r
- .model flat\r
+ .model flat,C\r
.code\r
\r
;------------------------------------------------------------------------------\r
; VOID\r
; );\r
;------------------------------------------------------------------------------\r
-_AsmReadDs PROC\r
- mov ax, ds\r
+AsmReadDs PROC\r
+ mov eax, ds\r
ret\r
-_AsmReadDs ENDP\r
+AsmReadDs ENDP\r
\r
END\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
+.global _AsmReadEflags\r
\r
#------------------------------------------------------------------------------\r
# UINTN\r
# VOID\r
# );\r
#------------------------------------------------------------------------------\r
-.global _AsmReadEflags\r
-_AsmReadEflags: \r
+_AsmReadEflags:\r
pushfl\r
- popl %eax\r
+ pop %eax\r
ret\r
-\r
-\r
-\r
;------------------------------------------------------------------------------\r
\r
.386\r
- .model flat\r
+ .model flat,C\r
.code\r
\r
;------------------------------------------------------------------------------\r
; VOID\r
; );\r
;------------------------------------------------------------------------------\r
-_AsmReadEflags PROC\r
+AsmReadEflags PROC\r
pushfd\r
pop eax\r
ret\r
-_AsmReadEflags ENDP\r
+AsmReadEflags ENDP\r
\r
END\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
+.global _AsmReadEs\r
\r
#------------------------------------------------------------------------------\r
# UINT16\r
# VOID\r
# );\r
#------------------------------------------------------------------------------\r
-.global _AsmReadEs\r
-_AsmReadEs: \r
- movw %es,%ax\r
+_AsmReadEs:\r
+ movl %es, %eax\r
ret\r
-\r
-\r
-\r
;------------------------------------------------------------------------------\r
\r
.386\r
- .model flat\r
+ .model flat,C\r
.code\r
\r
;------------------------------------------------------------------------------\r
; VOID\r
; );\r
;------------------------------------------------------------------------------\r
-_AsmReadEs PROC\r
- mov ax, es\r
+AsmReadEs PROC\r
+ mov eax, es\r
ret\r
-_AsmReadEs ENDP\r
+AsmReadEs ENDP\r
\r
END\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
+.global _AsmReadFs\r
\r
#------------------------------------------------------------------------------\r
# UINT16\r
# VOID\r
# );\r
#------------------------------------------------------------------------------\r
-.global _AsmReadFs\r
-_AsmReadFs: \r
- movw %fs,%ax\r
+_AsmReadFs:\r
+ movl %fs, %eax\r
ret\r
-\r
-\r
-\r
;------------------------------------------------------------------------------\r
\r
.386\r
- .model flat\r
+ .model flat,C\r
.code\r
\r
;------------------------------------------------------------------------------\r
; VOID\r
; );\r
;------------------------------------------------------------------------------\r
-_AsmReadFs PROC\r
- mov ax, fs\r
+AsmReadFs PROC\r
+ mov eax, fs\r
ret\r
-_AsmReadFs ENDP\r
+AsmReadFs ENDP\r
\r
END\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
+.global _InternalX86ReadGdtr\r
\r
#------------------------------------------------------------------------------\r
# VOID\r
# OUT IA32_DESCRIPTOR *Gdtr\r
# );\r
#------------------------------------------------------------------------------\r
-.global _InternalX86ReadGdtr\r
-_InternalX86ReadGdtr: \r
- movl 4(%esp),%eax\r
+_InternalX86ReadGdtr:\r
+ movl 4(%esp), %eax\r
sgdt (%eax)\r
ret\r
-\r
-\r
-\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
+.global _AsmReadGs\r
\r
#------------------------------------------------------------------------------\r
# UINT16\r
# VOID\r
# );\r
#------------------------------------------------------------------------------\r
-.global _AsmReadGs\r
-_AsmReadGs: \r
- movw %gs,%ax\r
+_AsmReadGs:\r
+ movl %gs, %eax\r
ret\r
-\r
-\r
-\r
;------------------------------------------------------------------------------\r
\r
.386\r
- .model flat\r
+ .model flat,C\r
.code\r
\r
;------------------------------------------------------------------------------\r
; VOID\r
; );\r
;------------------------------------------------------------------------------\r
-_AsmReadGs PROC\r
- mov ax, gs\r
+AsmReadGs PROC\r
+ mov eax, gs\r
ret\r
-_AsmReadGs ENDP\r
+AsmReadGs ENDP\r
\r
END\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
+.global _InternalX86ReadIdtr\r
\r
#------------------------------------------------------------------------------\r
# VOID\r
# OUT IA32_DESCRIPTOR *Idtr\r
# );\r
#------------------------------------------------------------------------------\r
-.global _InternalX86ReadIdtr\r
-_InternalX86ReadIdtr: \r
- movl 4(%esp),%eax\r
+_InternalX86ReadIdtr:\r
+ movl 4(%esp), %eax\r
sidt (%eax)\r
ret\r
-\r
-\r
-\r
.model flat,C\r
.code\r
\r
-InternalX86ReadIdtr PROC\r
+;------------------------------------------------------------------------------\r
+; VOID\r
+; EFIAPI\r
+; InternalX86ReadIdtr (\r
+; OUT IA32_DESCRIPTOR *Idtr\r
+; );\r
+;------------------------------------------------------------------------------\r
+InternalX86ReadIdtr PROC\r
mov eax, [esp + 4]\r
sidt fword ptr [eax]\r
ret\r
-InternalX86ReadIdtr ENDP\r
+InternalX86ReadIdtr ENDP\r
\r
END\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
+.global _AsmReadLdtr\r
\r
#------------------------------------------------------------------------------\r
# UINT16\r
# VOID\r
# );\r
#------------------------------------------------------------------------------\r
-.global _AsmReadLdtr\r
-_AsmReadLdtr: \r
+_AsmReadLdtr:\r
sldt %eax\r
ret\r
-\r
-\r
-\r
;------------------------------------------------------------------------------\r
\r
.386\r
- .model flat\r
+ .model flat,C\r
.code\r
\r
;------------------------------------------------------------------------------\r
; VOID\r
; );\r
;------------------------------------------------------------------------------\r
-_AsmReadLdtr PROC\r
+AsmReadLdtr PROC\r
sldt ax\r
ret\r
-_AsmReadLdtr ENDP\r
+AsmReadLdtr ENDP\r
\r
END\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
- \r
+.global _AsmReadMm0\r
\r
#------------------------------------------------------------------------------\r
# UINTN\r
# VOID\r
# );\r
#------------------------------------------------------------------------------\r
-.global _AsmReadMm0\r
-_AsmReadMm0: \r
- pushl %eax\r
- pushl %eax\r
- movq %mm0,(%esp)\r
- popl %eax\r
- popl %edx\r
+_AsmReadMm0:\r
+ push %eax\r
+ push %eax\r
+ movq %mm0, (%esp)\r
+ pop %eax\r
+ pop %edx\r
ret\r
-\r
-\r
-\r
;\r
;------------------------------------------------------------------------------\r
\r
- .586P\r
- .model flat\r
- .xmm\r
+ .586\r
+ .model flat,C\r
+ .mmx\r
.code\r
\r
;------------------------------------------------------------------------------\r
-; UINTN\r
+; UINT64\r
; EFIAPI\r
; AsmReadMm0 (\r
; VOID\r
; );\r
;------------------------------------------------------------------------------\r
-_AsmReadMm0 PROC\r
+AsmReadMm0 PROC\r
push eax\r
push eax\r
movq [esp], mm0\r
pop eax\r
pop edx\r
ret\r
-_AsmReadMm0 ENDP\r
+AsmReadMm0 ENDP\r
\r
END\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
- \r
+.global _AsmReadMm1\r
\r
#------------------------------------------------------------------------------\r
# UINTN\r
# VOID\r
# );\r
#------------------------------------------------------------------------------\r
-.global _AsmReadMm1\r
-_AsmReadMm1: \r
- pushl %eax\r
- pushl %eax\r
- movq %mm1,(%esp)\r
- popl %eax\r
- popl %edx\r
+_AsmReadMm1:\r
+ push %eax\r
+ push %eax\r
+ movq %mm1, (%esp)\r
+ pop %eax\r
+ pop %edx\r
ret\r
-\r
-\r
-\r
;\r
;------------------------------------------------------------------------------\r
\r
- .586P\r
- .model flat\r
- .xmm\r
+ .586\r
+ .model flat,C\r
+ .mmx\r
.code\r
\r
;------------------------------------------------------------------------------\r
-; UINTN\r
+; UINT64\r
; EFIAPI\r
; AsmReadMm1 (\r
; VOID\r
; );\r
;------------------------------------------------------------------------------\r
-_AsmReadMm1 PROC\r
+AsmReadMm1 PROC\r
push eax\r
push eax\r
movq [esp], mm1\r
pop eax\r
pop edx\r
ret\r
-_AsmReadMm1 ENDP\r
+AsmReadMm1 ENDP\r
\r
END\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
- \r
+.global _AsmReadMm2\r
\r
#------------------------------------------------------------------------------\r
# UINTN\r
# VOID\r
# );\r
#------------------------------------------------------------------------------\r
-.global _AsmReadMm2\r
-_AsmReadMm2: \r
- pushl %eax\r
- pushl %eax\r
- movq %mm2,(%esp)\r
- popl %eax\r
- popl %edx\r
+_AsmReadMm2:\r
+ push %eax\r
+ push %eax\r
+ movq %mm2, (%esp)\r
+ pop %eax\r
+ pop %edx\r
ret\r
-\r
-\r
-\r
;\r
;------------------------------------------------------------------------------\r
\r
- .586P\r
- .model flat\r
- .xmm\r
+ .586\r
+ .model flat,C\r
+ .mmx\r
.code\r
\r
;------------------------------------------------------------------------------\r
-; UINTN\r
+; UINT64\r
; EFIAPI\r
; AsmReadMm2 (\r
; VOID\r
; );\r
;------------------------------------------------------------------------------\r
-_AsmReadMm2 PROC\r
+AsmReadMm2 PROC\r
push eax\r
push eax\r
movq [esp], mm2\r
pop eax\r
pop edx\r
ret\r
-_AsmReadMm2 ENDP\r
+AsmReadMm2 ENDP\r
\r
END\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
- \r
+.global _AsmReadMm3\r
\r
#------------------------------------------------------------------------------\r
# UINTN\r
# VOID\r
# );\r
#------------------------------------------------------------------------------\r
-.global _AsmReadMm3\r
-_AsmReadMm3: \r
- pushl %eax\r
- pushl %eax\r
- movq %mm3,(%esp)\r
- popl %eax\r
- popl %edx\r
+_AsmReadMm3:\r
+ push %eax\r
+ push %eax\r
+ movq %mm3, (%esp)\r
+ pop %eax\r
+ pop %edx\r
ret\r
-\r
-\r
-\r
;\r
;------------------------------------------------------------------------------\r
\r
- .586P\r
- .model flat\r
- .xmm\r
+ .586\r
+ .model flat,C\r
+ .mmx\r
.code\r
\r
;------------------------------------------------------------------------------\r
-; UINTN\r
+; UINT64\r
; EFIAPI\r
; AsmReadMm3 (\r
; VOID\r
; );\r
;------------------------------------------------------------------------------\r
-_AsmReadMm3 PROC\r
+AsmReadMm3 PROC\r
push eax\r
push eax\r
movq [esp], mm3\r
pop eax\r
pop edx\r
ret\r
-_AsmReadMm3 ENDP\r
+AsmReadMm3 ENDP\r
\r
END\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
- \r
+.global _AsmReadMm4\r
\r
#------------------------------------------------------------------------------\r
# UINTN\r
# VOID\r
# );\r
#------------------------------------------------------------------------------\r
-.global _AsmReadMm4\r
-_AsmReadMm4: \r
- pushl %eax\r
- pushl %eax\r
- movq %mm4,(%esp)\r
- popl %eax\r
- popl %edx\r
+_AsmReadMm4:\r
+ push %eax\r
+ push %eax\r
+ movq %mm4, (%esp)\r
+ pop %eax\r
+ pop %edx\r
ret\r
-\r
-\r
-\r
;\r
;------------------------------------------------------------------------------\r
\r
- .586P\r
- .model flat\r
- .xmm\r
+ .586\r
+ .model flat,C\r
+ .mmx\r
.code\r
\r
;------------------------------------------------------------------------------\r
-; UINTN\r
+; UINT64\r
; EFIAPI\r
; AsmReadMm4 (\r
; VOID\r
; );\r
;------------------------------------------------------------------------------\r
-_AsmReadMm4 PROC\r
+AsmReadMm4 PROC\r
push eax\r
push eax\r
movq [esp], mm4\r
pop eax\r
pop edx\r
ret\r
-_AsmReadMm4 ENDP\r
+AsmReadMm4 ENDP\r
\r
END\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
- \r
+.global _AsmReadMm5\r
\r
#------------------------------------------------------------------------------\r
# UINTN\r
# VOID\r
# );\r
#------------------------------------------------------------------------------\r
-.global _AsmReadMm5\r
-_AsmReadMm5: \r
- pushl %eax\r
- pushl %eax\r
- movq %mm5,(%esp)\r
- popl %eax\r
- popl %edx\r
+_AsmReadMm5:\r
+ push %eax\r
+ push %eax\r
+ movq %mm5, (%esp)\r
+ pop %eax\r
+ pop %edx\r
ret\r
-\r
-\r
-\r
;\r
;------------------------------------------------------------------------------\r
\r
- .586P\r
- .model flat\r
- .xmm\r
+ .586\r
+ .model flat,C\r
+ .mmx\r
.code\r
\r
;------------------------------------------------------------------------------\r
-; UINTN\r
+; UINT64\r
; EFIAPI\r
; AsmReadMm5 (\r
; VOID\r
; );\r
;------------------------------------------------------------------------------\r
-_AsmReadMm5 PROC\r
+AsmReadMm5 PROC\r
push eax\r
push eax\r
movq [esp], mm5\r
pop eax\r
pop edx\r
ret\r
-_AsmReadMm5 ENDP\r
+AsmReadMm5 ENDP\r
\r
END\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
- \r
+.global _AsmReadMm6\r
\r
#------------------------------------------------------------------------------\r
# UINTN\r
# VOID\r
# );\r
#------------------------------------------------------------------------------\r
-.global _AsmReadMm6\r
-_AsmReadMm6: \r
- pushl %eax\r
- pushl %eax\r
- movq %mm6,(%esp)\r
- popl %eax\r
- popl %edx\r
+_AsmReadMm6:\r
+ push %eax\r
+ push %eax\r
+ movq %mm6, (%esp)\r
+ pop %eax\r
+ pop %edx\r
ret\r
-\r
-\r
-\r
;\r
;------------------------------------------------------------------------------\r
\r
- .586P\r
- .model flat\r
- .xmm\r
+ .586\r
+ .model flat,C\r
+ .mmx\r
.code\r
\r
;------------------------------------------------------------------------------\r
-; UINTN\r
+; UINT64\r
; EFIAPI\r
; AsmReadMm6 (\r
; VOID\r
; );\r
;------------------------------------------------------------------------------\r
-_AsmReadMm6 PROC\r
+AsmReadMm6 PROC\r
push eax\r
push eax\r
movq [esp], mm6\r
pop eax\r
pop edx\r
ret\r
-_AsmReadMm6 ENDP\r
+AsmReadMm6 ENDP\r
\r
END\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
- \r
+.global _AsmReadMm7\r
\r
#------------------------------------------------------------------------------\r
# UINTN\r
# VOID\r
# );\r
#------------------------------------------------------------------------------\r
-.global _AsmReadMm7\r
-_AsmReadMm7: \r
- pushl %eax\r
- pushl %eax\r
- movq %mm7,(%esp)\r
- popl %eax\r
- popl %edx\r
+_AsmReadMm7:\r
+ push %eax\r
+ push %eax\r
+ movq %mm7, (%esp)\r
+ pop %eax\r
+ pop %edx\r
ret\r
-\r
-\r
-\r
;\r
;------------------------------------------------------------------------------\r
\r
- .586P\r
- .model flat\r
- .xmm\r
+ .586\r
+ .model flat,C\r
+ .mmx\r
.code\r
\r
;------------------------------------------------------------------------------\r
-; UINTN\r
+; UINT64\r
; EFIAPI\r
; AsmReadMm7 (\r
; VOID\r
; );\r
;------------------------------------------------------------------------------\r
-_AsmReadMm7 PROC\r
+AsmReadMm7 PROC\r
push eax\r
push eax\r
movq [esp], mm7\r
pop eax\r
pop edx\r
ret\r
-_AsmReadMm7 ENDP\r
+AsmReadMm7 ENDP\r
\r
END\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
-\r
-#------------------------------------------------------------------------------\r
-# UINT32\r
-# EFIAPI\r
-# AsmReadMsr32 (\r
-# IN UINT32 Index\r
-# );\r
-#------------------------------------------------------------------------------\r
-.global _AsmReadMsr32\r
-_AsmReadMsr32: \r
- #\r
- # AsmReadMsr32 shares the same implementation with AsmReadMsr64 and thus no\r
- # code inside this function\r
- #\r
-\r
+.global _AsmReadMsr64\r
\r
#------------------------------------------------------------------------------\r
# UINT64\r
# EFIAPI\r
# AsmReadMsr64 (\r
-# IN UINT64 Index\r
+# IN UINT32 Index\r
# );\r
#------------------------------------------------------------------------------\r
-.global _AsmReadMsr64\r
-_AsmReadMsr64: \r
- movl 4(%esp),%ecx\r
+_AsmReadMsr64:\r
+ movl 4(%esp), %ecx\r
rdmsr\r
ret\r
-\r
-\r
-\r
;\r
;------------------------------------------------------------------------------\r
\r
- .586P\r
- .model flat\r
+ .586p\r
+ .model flat,C\r
.code\r
\r
-;------------------------------------------------------------------------------\r
-; UINT32\r
-; EFIAPI\r
-; AsmReadMsr32 (\r
-; IN UINT32 Index\r
-; );\r
-;------------------------------------------------------------------------------\r
-_AsmReadMsr32 PROC\r
- ;\r
- ; AsmReadMsr32 shares the same implementation with AsmReadMsr64 and thus no\r
- ; code inside this function\r
- ;\r
-_AsmReadMsr32 ENDP\r
-\r
;------------------------------------------------------------------------------\r
; UINT64\r
; EFIAPI\r
; IN UINT64 Index\r
; );\r
;------------------------------------------------------------------------------\r
-_AsmReadMsr64 PROC\r
+AsmReadMsr64 PROC\r
mov ecx, [esp + 4]\r
rdmsr\r
ret\r
-_AsmReadMsr64 ENDP\r
+AsmReadMsr64 ENDP\r
\r
END\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
+.global _AsmReadPmc\r
\r
#------------------------------------------------------------------------------\r
# UINT64\r
# IN UINT32 PmcIndex\r
# );\r
#------------------------------------------------------------------------------\r
-.global _AsmReadPmc\r
-_AsmReadPmc: \r
- movl 4(%esp),%ecx\r
+_AsmReadPmc:\r
+ movl 4(%esp), %ecx\r
rdpmc\r
ret\r
-\r
-\r
-\r
;\r
;------------------------------------------------------------------------------\r
\r
- .586P\r
- .model flat\r
+ .586p\r
+ .model flat,C\r
.code\r
\r
;------------------------------------------------------------------------------\r
; IN UINT32 PmcIndex\r
; );\r
;------------------------------------------------------------------------------\r
-_AsmReadPmc PROC\r
+AsmReadPmc PROC\r
mov ecx, [esp + 4]\r
rdpmc\r
ret\r
-_AsmReadPmc ENDP\r
+AsmReadPmc ENDP\r
\r
END\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
+.global _AsmReadSs\r
\r
#------------------------------------------------------------------------------\r
# UINT16\r
# VOID\r
# );\r
#------------------------------------------------------------------------------\r
-.global _AsmReadSs\r
-_AsmReadSs: \r
- movw %ss,%ax\r
+_AsmReadSs:\r
+ movl %ss, %eax\r
ret\r
-\r
-\r
-\r
;------------------------------------------------------------------------------\r
\r
.386\r
- .model flat\r
+ .model flat,C\r
.code\r
\r
;------------------------------------------------------------------------------\r
; VOID\r
; );\r
;------------------------------------------------------------------------------\r
-_AsmReadSs PROC\r
- mov ax, ss\r
+AsmReadSs PROC\r
+ mov eax, ss\r
ret\r
-_AsmReadSs ENDP\r
+AsmReadSs ENDP\r
\r
END\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
+.global _AsmReadTr\r
\r
#------------------------------------------------------------------------------\r
# UINT16\r
# VOID\r
# );\r
#------------------------------------------------------------------------------\r
-.global _AsmReadTr\r
-_AsmReadTr: \r
+_AsmReadTr:\r
str %eax\r
ret\r
-\r
-\r
-\r
;------------------------------------------------------------------------------\r
\r
.386\r
- .model flat\r
+ .model flat,C\r
.code\r
\r
;------------------------------------------------------------------------------\r
; VOID\r
; );\r
;------------------------------------------------------------------------------\r
-_AsmReadTr PROC\r
+AsmReadTr PROC\r
str ax\r
ret\r
-_AsmReadTr ENDP\r
+AsmReadTr ENDP\r
\r
END\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
+.global _AsmReadTsc\r
\r
#------------------------------------------------------------------------------\r
# UINT64\r
# VOID\r
# );\r
#------------------------------------------------------------------------------\r
-.global _AsmReadTsc\r
-_AsmReadTsc: \r
+_AsmReadTsc:\r
rdtsc\r
ret\r
-\r
-\r
-\r
;\r
;------------------------------------------------------------------------------\r
\r
- .586P\r
- .model flat\r
+ .586p\r
+ .model flat,C\r
.code\r
\r
;------------------------------------------------------------------------------\r
; VOID\r
; );\r
;------------------------------------------------------------------------------\r
-_AsmReadTsc PROC\r
+AsmReadTsc PROC\r
rdtsc\r
ret\r
-_AsmReadTsc ENDP\r
+AsmReadTsc ENDP\r
\r
END\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
-\r
.global _SetJump, _InternalAssertJumpBuffer\r
-_SetJump: \r
+\r
+#------------------------------------------------------------------------------\r
+# UINTN\r
+# EFIAPI\r
+# SetJump (\r
+# OUT BASE_LIBRARY_JUMP_BUFFER *JumpBuffer\r
+# );\r
+#------------------------------------------------------------------------------\r
+_SetJump:\r
pushl 0x4(%esp)\r
call _InternalAssertJumpBuffer\r
- popl %ecx\r
- popl %ecx\r
- movl (%esp),%edx\r
- movl %ebx,(%edx)\r
- movl %esi,4(%edx)\r
- movl %edi,8(%edx)\r
- movl %ebp,12(%edx)\r
- movl %esp,16(%edx)\r
- movl %ecx,20(%edx)\r
- xorl %eax,%eax\r
+ pop %ecx\r
+ pop %ecx\r
+ movl (%esp), %edx\r
+ movl %ebx, (%edx)\r
+ movl %esi, 4(%edx)\r
+ movl %edi, 8(%edx)\r
+ movl %ebp, 12(%edx)\r
+ movl %esp, 16(%edx)\r
+ movl %ecx, 20(%edx)\r
+ xorl %eax, %eax\r
jmp *%ecx\r
-\r
-\r
-\r
\r
InternalAssertJumpBuffer PROTO C\r
\r
+;------------------------------------------------------------------------------\r
+; UINTN\r
+; EFIAPI\r
+; SetJump (\r
+; OUT BASE_LIBRARY_JUMP_BUFFER *JumpBuffer\r
+; );\r
+;------------------------------------------------------------------------------\r
SetJump PROC\r
push [esp + 4]\r
call InternalAssertJumpBuffer\r
#------------------------------------------------------------------------------
+#------------------------------------------------------------------------------
+# UINT64
+# EFIAPI
+# InternalMathSwapBytes64 (
+# IN UINT64 Operand
+# );
+#------------------------------------------------------------------------------
.global _InternalMathSwapBytes64
_InternalMathSwapBytes64:
-
movl 8(%esp), %eax
movl 4(%esp), %edx
bswapl %eax
bswapl %edx
ret
-
-
;\r
;------------------------------------------------------------------------------\r
\r
- .586P\r
+ .586\r
.model flat,C\r
.code\r
\r
+;------------------------------------------------------------------------------\r
+; UINT64\r
+; EFIAPI\r
+; InternalMathSwapBytes64 (\r
+; IN UINT64 Operand\r
+; );\r
+;------------------------------------------------------------------------------\r
InternalMathSwapBytes64 PROC\r
mov eax, [esp + 8]\r
mov edx, [esp + 4]\r
#\r
#------------------------------------------------------------------------------\r
\r
-.global _m16Start, _m16Size, _mThunk16Attr, _m16GdtrBase, _m16Gdt, _m16GdtrBase, _mTransition\r
+.global _m16Start, _m16Size, _mThunk16Attr, _m16Gdt, _m16GdtrBase, _mTransition\r
.global _InternalAsmThunk16\r
\r
-#THUNK_ATTRIBUTE_BIG_REAL_MODE EQU 1\r
-#THUNK_ATTRIBUTE_DISABLE_A20_MASK_INT_15 EQU 2\r
-#THUNK_ATTRIBUTE_DISABLE_A20_MASK_KBD_CTRL EQU 4\r
-\r
- .code: \r
-\r
-_m16Start: \r
+_m16Start:\r
\r
SavedGdt: .space 6\r
\r
push %cs\r
.byte 0x66\r
call @Base1 # push eip\r
-@Base1: \r
+@Base1:\r
pushfw # pushfd actually\r
cli # disable interrupts\r
push %gs\r
push %es\r
push %ds\r
pushaw # pushad actually\r
- .byte 0x66,0xba # mov edx, imm32\r
+ .byte 0x66, 0xba # mov edx, imm32\r
_ThunkAttr: .space 4\r
testb $THUNK_ATTRIBUTE_DISABLE_A20_MASK_INT_15, %dl\r
jz @1\r
movl $0x15cd2401, %eax # mov ax, 2401h & int 15h\r
cli # disable interrupts\r
jnc @2\r
-@1: \r
+@1:\r
testb $THUNK_ATTRIBUTE_DISABLE_A20_MASK_KBD_CTRL, %dl\r
jz @2\r
inb $0x92, %al\r
orb $2, %al\r
outb %al, $0x92 # deactivate A20M#\r
-@2: \r
+@2:\r
movl %ss, %eax\r
.byte 0x67, 0x66, 0x8d, 0x6c, 0x24, 0x34, 0x66\r
- mov %ebp,0xffffffd8(%esi)\r
- mov 0xfffffff8(%esi),%ebx\r
+ mov %ebp, 0xffffffd8(%esi)\r
+ mov 0xfffffff8(%esi), %ebx\r
shlw $4, %ax # shl eax, 4\r
addw %ax, %bp # add ebp, eax\r
- .byte 0x66,0xb8 # mov eax, imm32\r
+ .byte 0x66, 0xb8 # mov eax, imm32\r
SavedCr4: .space 4\r
movl %eax, %cr4\r
- lgdtw %cs:0xfffffff2(%edi)\r
- .byte 0x66,0xb8 # mov eax, imm32\r
+ lgdtw %cs:0xfffffff2(%edi)\r
+ .byte 0x66, 0xb8 # mov eax, imm32\r
SavedCr0: .space 4\r
movl %eax, %cr0\r
.byte 0xb8 # mov ax, imm16\r
SavedSs: .space 2\r
movl %eax, %ss\r
- .byte 0x66,0xbc # mov esp, imm32\r
+ .byte 0x66, 0xbc # mov esp, imm32\r
SavedEsp: .space 4\r
.byte 0x66\r
lret # return to protected mode\r
xchgw %bx, %sp # set up 16-bit stack pointer\r
.byte 0x66\r
call @Base # push eip\r
-@Base: \r
+@Base:\r
popw %bp # ebp <- offset @Base\r
addr16 pushl 36(%si)\r
.byte 0x36\r
- lea 0xc(%esi),%eax\r
- pushl %eax\r
+ lea 0xc(%esi), %eax\r
+ push %eax\r
lret\r
\r
-@RealMode: \r
- mov %edx,%cs:0xffffffc5(%esi)\r
- mov %bx,%cs:0xffffffcb(%esi)\r
+@RealMode:\r
+ mov %edx, %cs:0xffffffc5(%esi)\r
+ mov %bx, %cs:0xffffffcb(%esi)\r
lidtw %cs:0xffffffd7(%esi)\r
popaw # popad actually\r
- popl %ds\r
- popl %es\r
- popl %fs\r
- popl %gs\r
+ pop %ds\r
+ pop %es\r
+ pop %fs\r
+ pop %gs\r
popfw # popfd\r
lretw # transfer control to user code\r
\r
push %fs\r
push %gs\r
movl 36(%esp), %esi # esi <- RegSet\r
- movzwl 0x32(%esi),%edx\r
- mov 0xc(%esi),%edi\r
- add $0xffffffc8,%edi\r
+ movzwl 0x32(%esi), %edx\r
+ mov 0xc(%esi), %edi\r
+ add $0xffffffc8, %edi\r
movl %edi, %ebx # ebx <- stack offset\r
- imul $0x10,%edx,%eax\r
+ imul $0x10, %edx, %eax\r
push $0xd\r
addl %eax, %edi # edi <- linear address of 16-bit stack\r
- popl %ecx\r
+ pop %ecx\r
rep\r
movsl # copy RegSet\r
movl 40(%esp), %eax # eax <- address of transition code\r
movl %edx, %esi # esi <- 16-bit stack segment\r
- lea 0x5e(%eax),%edx\r
+ lea 0x5e(%eax), %edx\r
movl %eax, %ecx\r
andl $0xf, %ecx\r
shll $12, %eax\r
- lea 0x6(%ecx),%ecx\r
+ lea 0x6(%ecx), %ecx\r
movw %cx, %ax\r
stosl # [edi] <- return address of user code\r
- sgdtl 0xffffffa2(%edx)\r
+ sgdtl 0xffffffa2(%edx)\r
sidtl 0x24(%esp)\r
movl %cr0, %eax\r
movl %eax, (%edx) # save CR0 in SavedCr0\r
andl $0x7ffffffe, %eax # clear PE, PG bits\r
movl %cr4, %ebp\r
- mov %ebp,0xfffffff1(%edx)\r
+ mov %ebp, 0xfffffff1(%edx)\r
andl $0x300, %ebp # clear all but PCE and OSFXSR bits\r
pushl $0x10\r
- popl %ecx # ecx <- selector for data segments\r
+ pop %ecx # ecx <- selector for data segments\r
lgdtl 0x20(%edx)\r
pushfl\r
lcall *0x14(%edx)\r
popfl\r
lidtl 0x24(%esp)\r
- lea 0xffffffcc(%ebp),%eax\r
+ lea 0xffffffcc(%ebp), %eax\r
pop %gs\r
pop %fs\r
pop %es\r
pop %ebp\r
ret\r
\r
- .const: \r
+ .const:\r
\r
_m16Size: .word _InternalAsmThunk16 - _m16Start\r
_mThunk16Attr: .word _ThunkAttr - _m16Start\r
_m16Gdt: .word _NullSegDesc - _m16Start\r
_m16GdtrBase: .word _16GdtrBase - _m16Start\r
_mTransition: .word _EntryPoint - _m16Start\r
-\r
EXTERNDEF C m16GdtrBase:WORD\r
EXTERNDEF C mTransition:WORD\r
\r
+;\r
+; Here is the layout of the real mode stack. _ToUserCode() is responsible for\r
+; loading all these registers from real mode stack.\r
+;\r
IA32_REGS STRUC 4t\r
_EDI DD ?\r
_ESI DD ?\r
\r
.const\r
\r
+;\r
+; These are global constant to convey information to C code.\r
+;\r
m16Size DW InternalAsmThunk16 - m16Start\r
mThunk16Attr DW _ThunkAttr - m16Start\r
m16Gdt DW _NullSegDesc - m16Start\r
SavedGdt LABEL FWORD\r
DW ?\r
DD ?\r
-\r
+;------------------------------------------------------------------------------\r
+; _BackFromUserCode() takes control in real mode after 'retf' has been executed\r
+; by user code. It will be shadowed to somewhere in memory below 1MB.\r
+;------------------------------------------------------------------------------\r
_BackFromUserCode PROC\r
push ss\r
push cs\r
DW GdtEnd - _NullSegDesc - 1\r
_16GdtrBase DD _NullSegDesc\r
\r
+;------------------------------------------------------------------------------\r
+; _ToUserCode() takes control in real mode before passing control to user code.\r
+; It will be shadowed to somewhere in memory below 1MB.\r
+;------------------------------------------------------------------------------\r
_ToUserCode PROC\r
mov edx, ss\r
mov ss, ecx ; set new segment selectors\r
DB 0\r
GdtEnd LABEL QWORD\r
\r
-;\r
-; @param RegSet Pointer to a IA32_DWORD_REGS structure\r
-; @param Transition Pointer to the transition code\r
-; @return The address of the 16-bit stack after returning from user code\r
-;\r
+;------------------------------------------------------------------------------\r
+; IA32_REGISTER_SET *\r
+; EFIAPI\r
+; InternalAsmThunk16 (\r
+; IN IA32_REGISTER_SET *RegisterSet,\r
+; IN OUT VOID *Transition\r
+; );\r
+;------------------------------------------------------------------------------\r
InternalAsmThunk16 PROC USES ebp ebx esi edi ds es fs gs\r
mov esi, [esp + 36] ; esi <- RegSet\r
movzx edx, (IA32_REGS ptr [esi])._SS\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
-\r
#------------------------------------------------------------------------------\r
# VOID\r
# EFIAPI\r
# );\r
#------------------------------------------------------------------------------\r
.global _AsmWbinvd\r
-_AsmWbinvd: \r
+_AsmWbinvd:\r
wbinvd\r
ret\r
-\r
-\r
-\r
;------------------------------------------------------------------------------\r
\r
.486p\r
- .model flat\r
+ .model flat,C\r
.code\r
\r
;------------------------------------------------------------------------------\r
; VOID\r
; );\r
;------------------------------------------------------------------------------\r
-_AsmWbinvd PROC\r
+AsmWbinvd PROC\r
wbinvd\r
ret\r
-_AsmWbinvd ENDP\r
+AsmWbinvd ENDP\r
\r
END\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
-\r
#------------------------------------------------------------------------------\r
# UINTN\r
# EFIAPI\r
# AsmWriteCr0 (\r
-# VOID\r
+# IN UINTN Cr0\r
# );\r
#------------------------------------------------------------------------------\r
.global _AsmWriteCr0\r
-_AsmWriteCr0: \r
- movl 4(%esp),%eax\r
+_AsmWriteCr0:\r
+ movl 4(%esp), %eax\r
movl %eax, %cr0\r
ret\r
-\r
-\r
-\r
;------------------------------------------------------------------------------\r
\r
.386p\r
- .model flat\r
+ .model flat,C\r
.code\r
\r
;------------------------------------------------------------------------------\r
; UINTN\r
; EFIAPI\r
; AsmWriteCr0 (\r
-; VOID\r
+; UINTN Cr0\r
; );\r
;------------------------------------------------------------------------------\r
-_AsmWriteCr0 PROC\r
+AsmWriteCr0 PROC\r
mov eax, [esp + 4]\r
mov cr0, eax\r
ret\r
-_AsmWriteCr0 ENDP\r
+AsmWriteCr0 ENDP\r
\r
END\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
-\r
#------------------------------------------------------------------------------\r
# UINTN\r
# EFIAPI\r
# AsmWriteCr2 (\r
-# VOID\r
+# IN UINTN Cr2\r
# );\r
#------------------------------------------------------------------------------\r
.global _AsmWriteCr2\r
-_AsmWriteCr2: \r
- movl 4(%esp),%eax\r
+_AsmWriteCr2:\r
+ movl 4(%esp), %eax\r
movl %eax, %cr2\r
ret\r
-\r
-\r
-\r
;------------------------------------------------------------------------------\r
\r
.386p\r
- .model flat\r
+ .model flat,C\r
.code\r
\r
;------------------------------------------------------------------------------\r
; UINTN\r
; EFIAPI\r
; AsmWriteCr2 (\r
-; VOID\r
+; UINTN Cr2\r
; );\r
;------------------------------------------------------------------------------\r
-_AsmWriteCr2 PROC\r
+AsmWriteCr2 PROC\r
mov eax, [esp + 4]\r
mov cr2, eax\r
ret\r
-_AsmWriteCr2 ENDP\r
+AsmWriteCr2 ENDP\r
\r
END\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
-\r
#------------------------------------------------------------------------------\r
# UINTN\r
# EFIAPI\r
# AsmWriteCr3 (\r
-# VOID\r
+# IN UINTN Cr3\r
# );\r
#------------------------------------------------------------------------------\r
.global _AsmWriteCr3\r
-_AsmWriteCr3: \r
- movl 4(%esp),%eax\r
+_AsmWriteCr3:\r
+ movl 4(%esp), %eax\r
movl %eax, %cr3\r
ret\r
-\r
-\r
-\r
;------------------------------------------------------------------------------\r
\r
.386p\r
- .model flat\r
+ .model flat,C\r
.code\r
\r
;------------------------------------------------------------------------------\r
; UINTN\r
; EFIAPI\r
; AsmWriteCr3 (\r
-; VOID\r
+; UINTN Cr3\r
; );\r
;------------------------------------------------------------------------------\r
-_AsmWriteCr3 PROC\r
+AsmWriteCr3 PROC\r
mov eax, [esp + 4]\r
mov cr3, eax\r
ret\r
-_AsmWriteCr3 ENDP\r
+AsmWriteCr3 ENDP\r
\r
END\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
-\r
#------------------------------------------------------------------------------\r
# UINTN\r
# EFIAPI\r
# AsmWriteCr4 (\r
-# VOID\r
+# IN UINTN Cr4\r
# );\r
#------------------------------------------------------------------------------\r
.global _AsmWriteCr4\r
-_AsmWriteCr4: \r
- movl 4(%esp),%eax\r
+_AsmWriteCr4:\r
+ movl 4(%esp), %eax\r
movl %eax, %cr4\r
ret\r
-\r
-\r
-\r
;------------------------------------------------------------------------------\r
\r
.586p\r
- .model flat\r
+ .model flat,C\r
.code\r
\r
;------------------------------------------------------------------------------\r
; UINTN\r
; EFIAPI\r
; AsmWriteCr4 (\r
-; VOID\r
+; UINTN Cr4\r
; );\r
;------------------------------------------------------------------------------\r
-_AsmWriteCr4 PROC\r
+AsmWriteCr4 PROC\r
mov eax, [esp + 4]\r
mov cr4, eax\r
ret\r
-_AsmWriteCr4 ENDP\r
+AsmWriteCr4 ENDP\r
\r
END\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
-\r
#------------------------------------------------------------------------------\r
-# VOID\r
+# UINTN\r
# EFIAPI\r
# AsmWriteDr0 (\r
# IN UINTN Value\r
# );\r
#------------------------------------------------------------------------------\r
.global _AsmWriteDr0\r
-_AsmWriteDr0: \r
- movl 4(%esp),%eax\r
+_AsmWriteDr0:\r
+ movl 4(%esp), %eax\r
movl %eax, %dr0\r
ret\r
-\r
-\r
-\r
;------------------------------------------------------------------------------\r
\r
.586p\r
- .model flat\r
+ .model flat,C\r
.code\r
\r
;------------------------------------------------------------------------------\r
-; VOID\r
+; UINTN\r
; EFIAPI\r
; AsmWriteDr0 (\r
; IN UINTN Value\r
; );\r
;------------------------------------------------------------------------------\r
-_AsmWriteDr0 PROC\r
+AsmWriteDr0 PROC\r
mov eax, [esp + 4]\r
mov dr0, eax\r
ret\r
-_AsmWriteDr0 ENDP\r
+AsmWriteDr0 ENDP\r
\r
END\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
-\r
#------------------------------------------------------------------------------\r
-# VOID\r
+# UINTN\r
# EFIAPI\r
# AsmWriteDr1 (\r
# IN UINTN Value\r
# );\r
#------------------------------------------------------------------------------\r
.global _AsmWriteDr1\r
-_AsmWriteDr1: \r
- movl 4(%esp),%eax\r
+_AsmWriteDr1:\r
+ movl 4(%esp), %eax\r
movl %eax, %dr1\r
ret\r
-\r
-\r
-\r
;------------------------------------------------------------------------------\r
\r
.586p\r
- .model flat\r
+ .model flat,C\r
.code\r
\r
;------------------------------------------------------------------------------\r
-; VOID\r
+; UINTN\r
; EFIAPI\r
; AsmWriteDr1 (\r
; IN UINTN Value\r
; );\r
;------------------------------------------------------------------------------\r
-_AsmWriteDr1 PROC\r
+AsmWriteDr1 PROC\r
mov eax, [esp + 4]\r
mov dr1, eax\r
ret\r
-_AsmWriteDr1 ENDP\r
+AsmWriteDr1 ENDP\r
\r
END\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
-\r
#------------------------------------------------------------------------------\r
-# VOID\r
+# UINTN\r
# EFIAPI\r
# AsmWriteDr2 (\r
# IN UINTN Value\r
# );\r
#------------------------------------------------------------------------------\r
.global _AsmWriteDr2\r
-_AsmWriteDr2: \r
- movl 4(%esp),%eax\r
+_AsmWriteDr2:\r
+ movl 4(%esp), %eax\r
movl %eax, %dr2\r
ret\r
-\r
-\r
-\r
;------------------------------------------------------------------------------\r
\r
.586p\r
- .model flat\r
+ .model flat,C\r
.code\r
\r
;------------------------------------------------------------------------------\r
-; VOID\r
+; UINTN\r
; EFIAPI\r
; AsmWriteDr2 (\r
; IN UINTN Value\r
; );\r
;------------------------------------------------------------------------------\r
-_AsmWriteDr2 PROC\r
+AsmWriteDr2 PROC\r
mov eax, [esp + 4]\r
mov dr2, eax\r
ret\r
-_AsmWriteDr2 ENDP\r
+AsmWriteDr2 ENDP\r
\r
END\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
-\r
#------------------------------------------------------------------------------\r
-# VOID\r
+# UINTN\r
# EFIAPI\r
# AsmWriteDr3 (\r
# IN UINTN Value\r
# );\r
#------------------------------------------------------------------------------\r
.global _AsmWriteDr3\r
-_AsmWriteDr3: \r
- movl 4(%esp),%eax\r
+_AsmWriteDr3:\r
+ movl 4(%esp), %eax\r
movl %eax, %dr3\r
ret\r
-\r
-\r
-\r
;------------------------------------------------------------------------------\r
\r
.586p\r
- .model flat\r
+ .model flat,C\r
.code\r
\r
;------------------------------------------------------------------------------\r
-; VOID\r
+; UINTN\r
; EFIAPI\r
; AsmWriteDr3 (\r
; IN UINTN Value\r
; );\r
;------------------------------------------------------------------------------\r
-_AsmWriteDr3 PROC\r
+AsmWriteDr3 PROC\r
mov eax, [esp + 4]\r
mov dr3, eax\r
ret\r
-_AsmWriteDr3 ENDP\r
+AsmWriteDr3 ENDP\r
\r
END\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
-\r
#------------------------------------------------------------------------------\r
-# VOID\r
+# UINTN\r
# EFIAPI\r
# AsmWriteDr4 (\r
# IN UINTN Value\r
# );\r
#------------------------------------------------------------------------------\r
.global _AsmWriteDr4\r
-_AsmWriteDr4: \r
- movl 4(%esp),%eax\r
+_AsmWriteDr4:\r
+ movl 4(%esp), %eax\r
movl %eax, %dr4\r
ret\r
-\r
-\r
-\r
;------------------------------------------------------------------------------\r
\r
.586p\r
- .model flat\r
+ .model flat,C\r
.code\r
\r
;------------------------------------------------------------------------------\r
-; VOID\r
+; UINTN\r
; EFIAPI\r
; AsmWriteDr4 (\r
; IN UINTN Value\r
; );\r
;------------------------------------------------------------------------------\r
-_AsmWriteDr4 PROC\r
+AsmWriteDr4 PROC\r
mov eax, [esp + 4]\r
DB 0fh, 23h, 0e0h\r
ret\r
-_AsmWriteDr4 ENDP\r
+AsmWriteDr4 ENDP\r
\r
END\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
-\r
#------------------------------------------------------------------------------\r
-# VOID\r
+# UINTN\r
# EFIAPI\r
# AsmWriteDr5 (\r
# IN UINTN Value\r
# );\r
#------------------------------------------------------------------------------\r
.global _AsmWriteDr5\r
-_AsmWriteDr5: \r
- movl 4(%esp),%eax\r
+_AsmWriteDr5:\r
+ movl 4(%esp), %eax\r
movl %eax, %dr5\r
ret\r
-\r
-\r
-\r
;------------------------------------------------------------------------------\r
\r
.586p\r
- .model flat\r
+ .model flat,C\r
.code\r
\r
;------------------------------------------------------------------------------\r
-; VOID\r
+; UINTN\r
; EFIAPI\r
; AsmWriteDr5 (\r
; IN UINTN Value\r
; );\r
;------------------------------------------------------------------------------\r
-_AsmWriteDr5 PROC\r
+AsmWriteDr5 PROC\r
mov eax, [esp + 4]\r
DB 0fh, 23h, 0e8h\r
ret\r
-_AsmWriteDr5 ENDP\r
+AsmWriteDr5 ENDP\r
\r
END\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
-\r
#------------------------------------------------------------------------------\r
-# VOID\r
+# UINTN\r
# EFIAPI\r
# AsmWriteDr6 (\r
# IN UINTN Value\r
# );\r
#------------------------------------------------------------------------------\r
.global _AsmWriteDr6\r
-_AsmWriteDr6: \r
- movl 4(%esp),%eax\r
+_AsmWriteDr6:\r
+ movl 4(%esp), %eax\r
movl %eax, %dr6\r
ret\r
-\r
-\r
-\r
;------------------------------------------------------------------------------\r
\r
.586p\r
- .model flat\r
+ .model flat,C\r
.code\r
\r
;------------------------------------------------------------------------------\r
-; VOID\r
+; UINTN\r
; EFIAPI\r
; AsmWriteDr6 (\r
; IN UINTN Value\r
; );\r
;------------------------------------------------------------------------------\r
-_AsmWriteDr6 PROC\r
+AsmWriteDr6 PROC\r
mov eax, [esp + 4]\r
mov dr6, eax\r
ret\r
-_AsmWriteDr6 ENDP\r
+AsmWriteDr6 ENDP\r
\r
END\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
-\r
#------------------------------------------------------------------------------\r
-# VOID\r
+# UINTN\r
# EFIAPI\r
# AsmWriteDr7 (\r
# IN UINTN Value\r
# );\r
#------------------------------------------------------------------------------\r
.global _AsmWriteDr7\r
-_AsmWriteDr7: \r
- movl 4(%esp),%eax\r
+_AsmWriteDr7:\r
+ movl 4(%esp), %eax\r
movl %eax, %dr7\r
ret\r
-\r
-\r
-\r
;------------------------------------------------------------------------------\r
\r
.586p\r
- .model flat\r
+ .model flat,C\r
.code\r
\r
;------------------------------------------------------------------------------\r
-; VOID\r
+; UINTN\r
; EFIAPI\r
; AsmWriteDr7 (\r
; IN UINTN Value\r
; );\r
;------------------------------------------------------------------------------\r
-_AsmWriteDr7 PROC\r
+AsmWriteDr7 PROC\r
mov eax, [esp + 4]\r
mov dr7, eax\r
ret\r
-_AsmWriteDr7 ENDP\r
+AsmWriteDr7 ENDP\r
\r
END\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
-\r
#------------------------------------------------------------------------------\r
# VOID\r
# EFIAPI\r
# );\r
#------------------------------------------------------------------------------\r
.global _InternalX86WriteGdtr\r
-_InternalX86WriteGdtr: \r
- movl 4(%esp),%eax\r
+_InternalX86WriteGdtr:\r
+ movl 4(%esp), %eax\r
lgdt (%eax)\r
ret\r
-\r
-\r
-\r
;\r
;------------------------------------------------------------------------------\r
\r
- .686P\r
+ .386p\r
.model flat,C\r
.code\r
\r
+;------------------------------------------------------------------------------\r
+; VOID\r
+; EFIAPI\r
+; InternalX86WriteGdtr (\r
+; IN CONST IA32_DESCRIPTOR *Idtr\r
+; );\r
+;------------------------------------------------------------------------------\r
InternalX86WriteGdtr PROC\r
mov eax, [esp + 4]\r
lgdt fword ptr [eax]\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
-\r
#------------------------------------------------------------------------------\r
# VOID\r
# EFIAPI\r
# );\r
#------------------------------------------------------------------------------\r
.global _InternalX86WriteIdtr\r
-_InternalX86WriteIdtr: \r
- movl 4(%esp),%eax\r
+_InternalX86WriteIdtr:\r
+ movl 4(%esp), %eax\r
lidt (%eax)\r
ret\r
-\r
-\r
-\r
;\r
;------------------------------------------------------------------------------\r
\r
- .686P\r
+ .386p\r
.model flat,C\r
.code\r
\r
+;------------------------------------------------------------------------------\r
+; VOID\r
+; EFIAPI\r
+; InternalX86WriteIdtr (\r
+; IN CONST IA32_DESCRIPTOR *Idtr\r
+; );\r
+;------------------------------------------------------------------------------\r
InternalX86WriteIdtr PROC\r
mov eax, [esp + 4]\r
lidt fword ptr [eax]\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
-\r
#------------------------------------------------------------------------------\r
# VOID\r
# EFIAPI\r
# );\r
#------------------------------------------------------------------------------\r
.global _AsmWriteLdtr\r
-_AsmWriteLdtr: \r
- movl 4(%esp),%eax\r
+_AsmWriteLdtr:\r
+ movl 4(%esp), %eax\r
lldtw %ax\r
ret\r
-\r
-\r
-\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
- \r
-\r
#------------------------------------------------------------------------------\r
-# UINT64\r
+# VOID\r
# EFIAPI\r
# AsmWriteMm0 (\r
# IN UINT64 Value\r
# );\r
#------------------------------------------------------------------------------\r
.global _AsmWriteMm0\r
-_AsmWriteMm0: \r
- movq 4(%esp),%mm0\r
+_AsmWriteMm0:\r
+ movq 4(%esp), %mm0\r
ret\r
-\r
-\r
-\r
;\r
;------------------------------------------------------------------------------\r
\r
- .586P\r
- .model flat\r
- .xmm\r
+ .586\r
+ .model flat,C\r
+ .mmx\r
.code\r
\r
;------------------------------------------------------------------------------\r
-; UINT64\r
+; VOID\r
; EFIAPI\r
; AsmWriteMm0 (\r
; IN UINT64 Value\r
; );\r
;------------------------------------------------------------------------------\r
-_AsmWriteMm0 PROC\r
+AsmWriteMm0 PROC\r
movq mm0, [esp + 4]\r
ret\r
-_AsmWriteMm0 ENDP\r
+AsmWriteMm0 ENDP\r
\r
END\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
- \r
-\r
#------------------------------------------------------------------------------\r
-# UINT64\r
+# VOID\r
# EFIAPI\r
# AsmWriteMm1 (\r
# IN UINT64 Value\r
# );\r
#------------------------------------------------------------------------------\r
.global _AsmWriteMm1\r
-_AsmWriteMm1: \r
- movq 4(%esp),%mm1\r
+_AsmWriteMm1:\r
+ movq 4(%esp), %mm1\r
ret\r
-\r
-\r
-\r
;\r
;------------------------------------------------------------------------------\r
\r
- .586P\r
- .model flat\r
- .xmm\r
+ .586\r
+ .model flat,C\r
+ .mmx\r
.code\r
\r
;------------------------------------------------------------------------------\r
-; UINT64\r
+; VOID\r
; EFIAPI\r
; AsmWriteMm1 (\r
; IN UINT64 Value\r
; );\r
;------------------------------------------------------------------------------\r
-_AsmWriteMm1 PROC\r
+AsmWriteMm1 PROC\r
movq mm1, [esp + 4]\r
ret\r
-_AsmWriteMm1 ENDP\r
+AsmWriteMm1 ENDP\r
\r
END\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
- \r
-\r
#------------------------------------------------------------------------------\r
-# UINT64\r
+# VOID\r
# EFIAPI\r
# AsmWriteMm2 (\r
# IN UINT64 Value\r
# );\r
#------------------------------------------------------------------------------\r
.global _AsmWriteMm2\r
-_AsmWriteMm2: \r
- movq 4(%esp),%mm2\r
+_AsmWriteMm2:\r
+ movq 4(%esp), %mm2\r
ret\r
-\r
-\r
-\r
;\r
;------------------------------------------------------------------------------\r
\r
- .586P\r
- .model flat\r
- .xmm\r
+ .586\r
+ .model flat,C\r
+ .mmx\r
.code\r
\r
;------------------------------------------------------------------------------\r
-; UINT64\r
+; VOID\r
; EFIAPI\r
; AsmWriteMm2 (\r
; IN UINT64 Value\r
; );\r
;------------------------------------------------------------------------------\r
-_AsmWriteMm2 PROC\r
+AsmWriteMm2 PROC\r
movq mm2, [esp + 4]\r
ret\r
-_AsmWriteMm2 ENDP\r
+AsmWriteMm2 ENDP\r
\r
END\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
- \r
-\r
#------------------------------------------------------------------------------\r
-# UINT64\r
+# VOID\r
# EFIAPI\r
# AsmWriteMm3 (\r
# IN UINT64 Value\r
# );\r
#------------------------------------------------------------------------------\r
.global _AsmWriteMm3\r
-_AsmWriteMm3: \r
- movq 4(%esp),%mm3\r
+_AsmWriteMm3:\r
+ movq 4(%esp), %mm3\r
ret\r
-\r
-\r
-\r
;\r
;------------------------------------------------------------------------------\r
\r
- .586P\r
- .model flat\r
- .xmm\r
+ .586\r
+ .model flat,C\r
+ .mmx\r
.code\r
\r
;------------------------------------------------------------------------------\r
-; UINT64\r
+; VOID\r
; EFIAPI\r
; AsmWriteMm3 (\r
; IN UINT64 Value\r
; );\r
;------------------------------------------------------------------------------\r
-_AsmWriteMm3 PROC\r
+AsmWriteMm3 PROC\r
movq mm3, [esp + 4]\r
ret\r
-_AsmWriteMm3 ENDP\r
+AsmWriteMm3 ENDP\r
\r
END\r
#\r
#------------------------------------------------------------------------------\r
\r
-\r
-\r
- \r
- \r
-\r
#------------------------------------------------------------------------------\r
-# UINT64\r
+# VOID\r
# EFIAPI\r
&n