]> git.proxmox.com Git - mirror_edk2.git/blame - MdePkg/Library/BaseLib/Arm/SetJumpLongJump.S
Do not use WriteUnaligned64() in BaseLib since StartingOffset and EndingOffset field...
[mirror_edk2.git] / MdePkg / Library / BaseLib / Arm / SetJumpLongJump.S
CommitLineData
64698eb8 1#------------------------------------------------------------------------------
2#
3# Copyright (c) 2006 - 2009, Intel Corporation<BR>
4# Portions copyright (c) 2008-2009 Apple Inc.<BR>
5# All rights reserved. This program and the accompanying materials
6# are licensed and made available under the terms and conditions of the BSD License
7# which accompanies this distribution. The full text of the license may be found at
8# http://opensource.org/licenses/bsd-license.php
9#
10# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12#
13#------------------------------------------------------------------------------
14.text
15.p2align 2
16
17.globl ASM_PFX(SetJump)
18.globl ASM_PFX(InternalLongJump)
19
20#/**
21# Saves the current CPU context that can be restored with a call to LongJump() and returns 0.#
22#
23# Saves the current CPU context in the buffer specified by JumpBuffer and returns 0. The initial
24# call to SetJump() must always return 0. Subsequent calls to LongJump() cause a non-zero
25# value to be returned by SetJump().
26#
27# If JumpBuffer is NULL, then ASSERT().
28# For IPF CPUs, if JumpBuffer is not aligned on a 16-byte boundary, then ASSERT().
29#
30# @param JumpBuffer A pointer to CPU context buffer.
31#
32#**/
33#
34#UINTN
35#EFIAPI
36#SetJump (
37# IN BASE_LIBRARY_JUMP_BUFFER *JumpBuffer // R0
38# );
39#
40ASM_PFX(SetJump):
41 mov r3, r13
42 stmia r0, {r3-r12,r14}
43 eor r0, r0, r0
44 bx lr
45
46#/**
47# Restores the CPU context that was saved with SetJump().#
48#
49# Restores the CPU context from the buffer specified by JumpBuffer.
50# This function never returns to the caller.
51# Instead is resumes execution based on the state of JumpBuffer.
52#
53# @param JumpBuffer A pointer to CPU context buffer.
54# @param Value The value to return when the SetJump() context is restored.
55#
56#**/
57#VOID
58#EFIAPI
59#InternalLongJump (
60# IN BASE_LIBRARY_JUMP_BUFFER *JumpBuffer, // R0
61# IN UINTN Value // R1
62# );
63#
64ASM_PFX(InternalLongJump):
65 ldmia r0, {r3-r12,r14}
66 mov r13, r3
67 mov r0, r1
68 bx lr
69
70ASM_FUNCTION_REMOVE_IF_UNREFERENCED()