\r
ASM_GLOBAL ASM_PFX(InternalX86DisablePaging64)\r
ASM_PFX(InternalX86DisablePaging64):\r
- cli \r
- lea L1(%rip), %r10\r
+ cli
+ lea L1(%rip), %rsi # rsi <- The start address of transition code
+ mov 0x28(%rsp), %rdi # rdi <- New stack
+ sub $64, %rdi # rdi <- use 64 byte in stack to hold transition code
+ mov %rdi, %r10 # r10 <- The start address of transicition code below 4G
+ lea _mTransitionEnd(%rip), %rax # rax <- end of transition code
+ sub %rsi, %rax # rax <- The size of transition piece code
+ push %rcx # save rcx to stack
+ mov %rax, %rcx # rcx <- The size of transition piece code
+ rep
+ movsb # copy transition code to (new stack - 64byte) below 4G
+ pop %rcx # restore rcx
+ \r
mov %r8d, %esi \r
mov %r9d, %edi \r
mov 0x28(%rsp), %eax # eax <- New Stack\r
push %rsi # push Context1\r
callq *%rbx # transfer control to EntryPoint\r
jmp . # no one should get here\r
-\r
+\r_mTransitionEnd :