mirror of https://github.com/acidanthera/audk.git
40 lines
1.2 KiB
ArmAsm
40 lines
1.2 KiB
ArmAsm
#------------------------------------------------------------------------------
|
|
#
|
|
# InternalSwitchStackAsm for LoongArch
|
|
#
|
|
# Copyright (c) 2022, Loongson Technology Corporation Limited. All rights reserved.<BR>
|
|
#
|
|
# SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
#
|
|
#------------------------------------------------------------------------------
|
|
|
|
#define STORE st.d /* 64 bit mode regsave instruction */
|
|
#define LOAD ld.d /* 64 bit mode regload instruction */
|
|
#define RSIZE 8 /* 64 bit mode register size */
|
|
|
|
ASM_GLOBAL ASM_PFX(InternalSwitchStackAsm)
|
|
|
|
/**
|
|
This allows the caller to switch the stack and goes to the new entry point
|
|
|
|
@param JumpBuffer A pointer to CPU context buffer.
|
|
**/
|
|
|
|
ASM_PFX(InternalSwitchStackAsm):
|
|
LOAD $ra, $a0, RSIZE * 11
|
|
LOAD $s0, $a0, RSIZE * 0
|
|
LOAD $s1, $a0, RSIZE * 1
|
|
LOAD $s2, $a0, RSIZE * 2
|
|
LOAD $s3, $a0, RSIZE * 3
|
|
LOAD $s4, $a0, RSIZE * 4
|
|
LOAD $s5, $a0, RSIZE * 5
|
|
LOAD $s6, $a0, RSIZE * 6
|
|
LOAD $s7, $a0, RSIZE * 7
|
|
LOAD $s8, $a0, RSIZE * 8
|
|
LOAD $sp, $a0, RSIZE * 9
|
|
LOAD $fp, $a0, RSIZE * 10
|
|
LOAD $a0, $sp, 0
|
|
LOAD $a1, $sp, 8
|
|
jirl $zero, $ra, 0
|
|
.end
|