| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- ;-------------------------------------------------------------------------------------------------------
- ; Copyright (C) Microsoft. All rights reserved.
- ; Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
- ;-------------------------------------------------------------------------------------------------------
- include ksamd64.inc
- _TEXT SEGMENT
- ifdef _CONTROL_FLOW_GUARD
- extrn __guard_check_icall_fptr:QWORD
- endif
- ;;============================================================================================================
- ;; NativeCodeGenerator::CheckCodeGenThunk
- ;;============================================================================================================
- extrn ?CheckCodeGen@NativeCodeGenerator@@SAP6APEAXPEAVRecyclableObject@Js@@UCallInfo@3@ZZPEAVScriptFunction@3@@Z : PROC
- align 16
- ?CheckCodeGenThunk@NativeCodeGenerator@@SAPEAXPEAVRecyclableObject@Js@@UCallInfo@3@ZZ PROC FRAME
- ;; save volatile registers
- mov qword ptr [rsp + 8h], rcx
- mov qword ptr [rsp + 10h], rdx
- mov qword ptr [rsp + 18h], r8
- mov qword ptr [rsp + 20h], r9
- push rbp
- .pushreg rbp
- lea rbp, [rsp]
- .setframe rbp, 0
- .endprolog
- ifdef _CONTROL_FLOW_GUARD
- sub rsp, 20h ; allocate stack space for the callee params(min 4 slots is mandate)
- call ?CheckCodeGen@NativeCodeGenerator@@SAP6APEAXPEAVRecyclableObject@Js@@UCallInfo@3@ZZPEAVScriptFunction@3@@Z
- mov rcx, rax ; __guard_check_icall_fptr requires the call target in rcx.
- call [__guard_check_icall_fptr] ; verify that the call target is valid
- add rsp, 20h ;de-allocate stack space for the callee params(min 4 slots is mandate + 1 for alignment )
- mov rax, rcx
- else
- sub rsp, 20h ;allocate stack space for the callee params(min 4 slots is mandate)
- call ?CheckCodeGen@NativeCodeGenerator@@SAP6APEAXPEAVRecyclableObject@Js@@UCallInfo@3@ZZPEAVScriptFunction@3@@Z
- add rsp, 20h ;de-allocate stack space for the callee params(min 4 slots is mandate)
- endif
- ;EPILOGUE starts here
- lea rsp, [rbp]
- pop rbp
- ;; restore volatile registers
- mov rcx, qword ptr [rsp + 8h]
- mov rdx, qword ptr [rsp + 10h]
- mov r8, qword ptr [rsp + 18h]
- mov r9, qword ptr [rsp + 20h]
- rex_jmp_reg rax
- ?CheckCodeGenThunk@NativeCodeGenerator@@SAPEAXPEAVRecyclableObject@Js@@UCallInfo@3@ZZ ENDP
- ;;============================================================================================================
- ;; NativeCodeGenerator::CheckAsmJsCodeGenThunk
- ;;============================================================================================================
- extrn ?CheckAsmJsCodeGen@NativeCodeGenerator@@SAPEAXPEAVScriptFunction@Js@@@Z : PROC
- align 16
- ?CheckAsmJsCodeGenThunk@NativeCodeGenerator@@SAPEAXPEAVRecyclableObject@Js@@UCallInfo@3@ZZ PROC FRAME
- ;; save volatile registers
- mov qword ptr [rsp + 8h], rcx
- mov qword ptr [rsp + 10h], rdx
- mov qword ptr [rsp + 18h], r8
- mov qword ptr [rsp + 20h], r9
- push rbp
- .pushreg rbp
- lea rbp, [rsp]
- .setframe rbp, 0
- .endprolog
- sub rsp, 60h
- ; spill potential floating point arguments to stack
- movups xmmword ptr [rsp + 30h], xmm1
- movups xmmword ptr [rsp + 40h], xmm2
- movups xmmword ptr [rsp + 50h], xmm3
- ifdef _CONTROL_FLOW_GUARD
- call ?CheckAsmJsCodeGen@NativeCodeGenerator@@SAPEAXPEAVScriptFunction@Js@@@Z
- mov rcx, rax ; __guard_check_icall_fptr requires the call target in rcx.
- call [__guard_check_icall_fptr] ; verify that the call target is valid
- mov rax, rcx ; CFG is guaranteed not to mess up rcx
- else
- call ?CheckAsmJsCodeGen@NativeCodeGenerator@@SAPEAXPEAVScriptFunction@Js@@@Z
- endif
- ;EPILOGUE starts here
- movups xmm1, xmmword ptr [rsp + 30h]
- movups xmm2, xmmword ptr [rsp + 40h]
- movups xmm3, xmmword ptr [rsp + 50h]
- lea rsp, [rbp]
- pop rbp
- ;; restore volatile registers
- mov rcx, qword ptr [rsp + 8h]
- mov rdx, qword ptr [rsp + 10h]
- mov r8, qword ptr [rsp + 18h]
- mov r9, qword ptr [rsp + 20h]
- rex_jmp_reg rax
- ?CheckAsmJsCodeGenThunk@NativeCodeGenerator@@SAPEAXPEAVRecyclableObject@Js@@UCallInfo@3@ZZ ENDP
- ;;============================================================================================================
- _TEXT ENDS
- end
|