LinearScanMdA.asm 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  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. OPT 1 ; re-enable listing
  8. TTL Lib\Backend\arm\LinearScanMdA.asm
  9. EXPORT |?SaveAllRegistersAndBailOut@LinearScanMD@@SAXQAVBailOutRecord@@@Z|
  10. EXPORT |?SaveAllRegistersAndBranchBailOut@LinearScanMD@@SAXQAVBranchBailOutRecord@@H@Z|
  11. ; BailOutRecord::BailOut(BailOutRecord const * bailOutRecord)
  12. IMPORT |?BailOut@BailOutRecord@@SAPAXPBV1@@Z|
  13. ; BranchBailOutRecord::BailOut(BranchBailOutRecord const * bailOutRecord, BOOL cond)
  14. IMPORT |?BailOut@BranchBailOutRecord@@SAPAXPBV1@H@Z|
  15. TEXTAREA
  16. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  17. ; LinearScanMD::SaveAllRegistersAndBailOut(BailOutRecord *const bailOutRecord)
  18. NESTED_ENTRY ?SaveAllRegistersAndBailOut@LinearScanMD@@SAXQAVBailOutRecord@@@Z
  19. ; r0 == bailOutRecord
  20. ; lr == return address
  21. ; Save all registers except the above, which would have already been saved by jitted code if necessary
  22. ldr r12, [r0] ; bailOutRecord->globalBailOutRecordDataTable
  23. ldr r12, [r12] ; bailOutRecord->globalBailOutRecordDataTable->registerSaveSpace
  24. add r12, r12, #192 ; &reinterpret_cast<byte *>(bailOutRecord->globalBailOutRecordDataTable->registerSaveSpace)[(RegD0 - 1) * 4 + VFP_REGCOUNT * 8]
  25. vstmdb r12!, {d0 - d15}
  26. sub r12, r12, #16 ; skip r12-r15
  27. stmdb r12!, {r1 - r11}
  28. b |?BailOut@BailOutRecord@@SAPAXPBV1@@Z|
  29. NESTED_END
  30. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  31. ; LinearScanMD::SaveAllRegistersAndBranchBailOut(BranchBailOutRecord *const bailOutRecord, const BOOL condition)
  32. NESTED_ENTRY ?SaveAllRegistersAndBranchBailOut@LinearScanMD@@SAXQAVBranchBailOutRecord@@H@Z
  33. ; r0 == bailOutRecord
  34. ; r1 == condition
  35. ; lr == return address
  36. ; Save all registers except the above, which would have already been saved by jitted code if necessary
  37. ldr r12, [r0] ; bailOutRecord->globalBailOutRecordDataTable
  38. ldr r12, [r12] ; bailOutRecord->globalBailOutRecordDataTable->registerSaveSpace
  39. add r12, r12, #192 ; &bailOutRecord->globalBailOutRecordDataTable->registerSaveSpace[(RegD0 - 1) * 4 + VFP_REGCOUNT * 8]
  40. vstmdb r12!, {d0 - d15}
  41. sub r12, r12, #16 ; skip r12-r15
  42. stmdb r12!, {r2 - r11}
  43. b |?BailOut@BranchBailOutRecord@@SAPAXPBV1@H@Z|
  44. NESTED_END
  45. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  46. END