skyline/app/src/main/cpp/skyline/nce/guest.S

69 lines
1.5 KiB
ArmAsm

// SPDX-License-Identifier: MPL-2.0
// Copyright © 2020 Skyline Team and Contributors (https://github.com/skyline-emu/)
.text
.global SaveCtx
SaveCtx:
STR LR, [SP, #-16]!
MRS LR, TPIDR_EL0
STP X0, X1, [LR, #16]
STP X2, X3, [LR, #32]
STP X4, X5, [LR, #48]
STP X6, X7, [LR, #64]
STP X8, X9, [LR, #80]
STP X10, X11, [LR, #96]
STP X12, X13, [LR, #112]
STP X14, X15, [LR, #128]
STP X16, X17, [LR, #144]
STP X18, X19, [LR, #160]
STP X20, X21, [LR, #176]
STP X22, X23, [LR, #192]
STP X24, X25, [LR, #208]
STP X26, X27, [LR, #224]
STP X28, X29, [LR, #240]
LDR LR, [SP], #16
DSB ST
RET
.global LoadCtx
LoadCtx:
STR LR, [SP, #-16]!
MRS LR, TPIDR_EL0
LDP X0, X1, [LR, #16]
LDP X2, X3, [LR, #32]
LDP X4, X5, [LR, #48]
LDP X6, X7, [LR, #64]
LDP X8, X9, [LR, #80]
LDP X10, X11, [LR, #96]
LDP X12, X13, [LR, #112]
LDP X14, X15, [LR, #128]
LDP X16, X17, [LR, #144]
LDP X18, X19, [LR, #160]
LDP X20, X21, [LR, #176]
LDP X22, X23, [LR, #192]
LDP X24, X25, [LR, #208]
LDP X26, X27, [LR, #224]
LDP X28, X29, [LR, #240]
LDR LR, [SP], #16
RET
.global RescaleClock
RescaleClock:
SUB SP, SP, #32
STP X0, X1, [SP, #16]
MOV X0, #30787
MOVK X0, #29108, LSL #16
MOVK X0, #23236, LSL #32
MOVK X0, #2684, LSL #48
MRS X1, CNTFRQ_EL0
LSR X1, X1, #5
UMULH X1, X1, X0
LSR X1, X1, #7
MRS X0, CNTVCT_EL0
UDIV X1, X0, X1
ADD X1, X1, X1, LSL #1
LSL X0, X1, #6
STR X0, [SP, #0]
LDP X0, X1, [SP, #16]