arm_Thunks.asm 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. ;-------------------------------------------------------------------------------------------------------
  2. ; Copyright (C) Microsoft. All rights reserved.
  3. ; Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
  4. ;-------------------------------------------------------------------------------------------------------
  5. OPT 2 ; disable listing
  6. #include "ksarm.h"
  7. #if !DISABLE_JIT
  8. #define _ENABLE_DYNAMIC_THUNKS
  9. #endif
  10. OPT 1 ; re-enable listing
  11. TTL Lib\Runtime\Language\arm\arm_DelayDynamicInterpreterThunk.asm
  12. #ifdef _ENABLE_DYNAMIC_THUNKS
  13. ;Var InterpreterStackFrame::DelayDynamicInterpreterThunk(RecyclableObject* function, CallInfo callInfo, ...)
  14. EXPORT |?DelayDynamicInterpreterThunk@InterpreterStackFrame@Js@@SAPAXPAVRecyclableObject@2@UCallInfo@2@ZZ|
  15. ;Var DynamicProfileInfo::EnsureDynamicProfileInfoThunk(RecyclableObject* function, CallInfo callInfo, ...)
  16. EXPORT |?EnsureDynamicProfileInfoThunk@DynamicProfileInfo@Js@@SAPAXPAVRecyclableObject@2@UCallInfo@2@ZZ|
  17. #endif
  18. ; Var ScriptContext::ProfileModeDeferredParsingThunk(RecyclableObject* function, CallInfo callInfo, ...)
  19. EXPORT |?ProfileModeDeferredParsingThunk@ScriptContext@Js@@SAPAXPAVRecyclableObject@2@UCallInfo@2@ZZ|
  20. #ifdef _ENABLE_DYNAMIC_THUNKS
  21. ;JavascriptMethod InterpreterStackFrame::EnsureDynamicInterpreterThunk(Js::ScriptFunction * function)
  22. IMPORT |?EnsureDynamicInterpreterThunk@InterpreterStackFrame@Js@@CAP6APAXPAVRecyclableObject@2@UCallInfo@2@ZZPAVScriptFunction@2@@Z|
  23. ;JavascriptMethod DynamicProfileInfo::EnsureDynamicProfileInfoThunk(Js::ScriptFunction * function)
  24. IMPORT |?EnsureDynamicProfileInfo@DynamicProfileInfo@Js@@CAP6APAXPAVRecyclableObject@2@UCallInfo@2@ZZPAVScriptFunction@2@@Z|
  25. #endif
  26. ;JavascriptMethod ScriptContext::ProfileModeDeferredParse(ScriptFunction **function)
  27. IMPORT |?ProfileModeDeferredParse@ScriptContext@Js@@SAP6APAXPAVRecyclableObject@2@UCallInfo@2@ZZPAPAVScriptFunction@2@@Z|
  28. ;JavascriptMethod ScriptContext::ProfileModeDeferredDeserialize(ScriptFunction *function)
  29. IMPORT |?ProfileModeDeferredDeserialize@ScriptContext@Js@@SAP6APAXPAVRecyclableObject@2@UCallInfo@2@ZZPAVScriptFunction@2@@Z|
  30. TEXTAREA
  31. #ifdef _ENABLE_DYNAMIC_THUNKS
  32. ;;============================================================================================================
  33. ;; InterpreterStackFrame::DelayDynamicInterpreterThunk
  34. ;;============================================================================================================
  35. ;Var InterpreterStackFrame::DelayDynamicInterpreterThunk(RecyclableObject* function, CallInfo callInfo, ...)
  36. NESTED_ENTRY ?DelayDynamicInterpreterThunk@InterpreterStackFrame@Js@@SAPAXPAVRecyclableObject@2@UCallInfo@2@ZZ
  37. PROLOG_PUSH r0-r5,r11,lr ; save volatile registers and non-volatile registers; r5 is pushed for aligned purposes
  38. bl |?EnsureDynamicInterpreterThunk@InterpreterStackFrame@Js@@CAP6APAXPAVRecyclableObject@2@UCallInfo@2@ZZPAVScriptFunction@2@@Z| ; call InterpreterStackFrame::EnsureDynamicInterpreterThunk
  39. #if defined(_CONTROL_FLOW_GUARD)
  40. mov r4, r0 ; save entryPoint in r4
  41. mov32 r12, __guard_check_icall_fptr
  42. ldr r12, [r12]
  43. blx r12
  44. mov r0, r4 ; restore entryPoint in r0
  45. #endif
  46. mov r12, r0 ; back up entryPoint in R12
  47. EPILOG_POP r0-r5,r11,lr ; restore arguments and return address
  48. EPILOG_NOP bx r12 ; jump (tail call) to new entryPoint
  49. NESTED_END
  50. ;;============================================================================================================
  51. ;; DynamicProfileInfo::EnsureDynamicProfileInfoThunk
  52. ;;============================================================================================================
  53. ;Var DynamicProfileInfo::EnsureDynamicProfileInfoThunk(RecyclableObject* function, CallInfo callInfo, ...)
  54. NESTED_ENTRY ?EnsureDynamicProfileInfoThunk@DynamicProfileInfo@Js@@SAPAXPAVRecyclableObject@2@UCallInfo@2@ZZ
  55. PROLOG_PUSH r0-r3,r11,lr ; save volatile registers
  56. bl |?EnsureDynamicProfileInfo@DynamicProfileInfo@Js@@CAP6APAXPAVRecyclableObject@2@UCallInfo@2@ZZPAVScriptFunction@2@@Z| ; call DynamicProfileInfo::EnsureDynamicProfileInfo
  57. mov r12, r0 ; back up entryPoint in R12
  58. EPILOG_POP r0-r3,r11,lr ; restore arguments and return address
  59. EPILOG_NOP bx r12 ; jump (tail call) to new entryPoint
  60. NESTED_END
  61. #endif ;; _ENABLE_DYNAMIC_THUNKS
  62. ;;============================================================================================================
  63. ;; ScriptContext::ProfileModeDeferredParsingThunk
  64. ;;============================================================================================================
  65. ;; Var ScriptContext::ProfileModeDeferredParsingThunk(RecyclableObject* function, CallInfo callInfo, ...)
  66. NESTED_ENTRY ?ProfileModeDeferredParsingThunk@ScriptContext@Js@@SAPAXPAVRecyclableObject@2@UCallInfo@2@ZZ
  67. PROLOG_PUSH r0-r3,r11,lr ; save volatile registers
  68. mov r0, sp ; Pass the address of the function at the saved r0 in case it need to be boxed
  69. bl |?ProfileModeDeferredParse@ScriptContext@Js@@SAP6APAXPAVRecyclableObject@2@UCallInfo@2@ZZPAPAVScriptFunction@2@@Z| ; call ScriptContext::ProfileModeDeferredParse
  70. mov r12, r0 ; back up entryPoint in R12
  71. EPILOG_POP r0-r3,r11,lr ; restore arguments and return address
  72. EPILOG_NOP bx r12 ; jump (tail call) to new entryPoint
  73. NESTED_END
  74. ;;============================================================================================================
  75. ;; ScriptContext::ProfileModeDeferredDeserializeThunk
  76. ;;============================================================================================================
  77. ;; Var ScriptContext::ProfileModeDeferredDeserializeThunk(RecyclableObject* function, CallInfo callInfo, ...)
  78. NESTED_ENTRY ?ProfileModeDeferredDeserializeThunk@ScriptContext@Js@@SAPAXPAVRecyclableObject@2@UCallInfo@2@ZZ
  79. PROLOG_PUSH r0-r3,r11,lr ; save volatile registers
  80. bl |?ProfileModeDeferredDeserialize@ScriptContext@Js@@SAP6APAXPAVRecyclableObject@2@UCallInfo@2@ZZPAVScriptFunction@2@@Z| ; call ScriptContext::ProfileModeDeferredDeserialize
  81. mov r12, r0 ; back up entryPoint in R12
  82. EPILOG_POP r0-r3,r11,lr ; restore arguments and return address
  83. EPILOG_NOP bx r12 ; jump (tail call) to new entryPoint
  84. NESTED_END
  85. ;;============================================================================================================
  86. END