Sync/gnu-efi/lib/mips64el/setjmp.S
Curle d588e232c4 Major overhaul of this branch.
This branch has been dedicated to purely the UEFI bootloader.
As such, all other code has been removed.

This code can be compiled with Visual Studio, gcc or llvm.
2019-07-17 21:10:29 +01:00

93 lines
1.7 KiB
ArmAsm

/*
* Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.
* Copright (c) 2017 Lemote Co.
* Author: Heiher <r@hev.cc>
*
* This program and the accompanying materials are licensed and made
available
* under the terms and conditions of the BSD License which accompanies
this
* distribution. The full text of the license may be found at
* http://opensource.org/licenses/bsd-license.php.
*
* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS"
BASIS,
* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR
* IMPLIED.
*/
.text
.p2align 3
.globl setjmp
.type setjmp, @function
setjmp:
sd $ra, 0x00($a0)
sd $sp, 0x08($a0)
sd $fp, 0x10($a0)
sd $gp, 0x18($a0)
sd $s0, 0x20($a0)
sd $s1, 0x28($a0)
sd $s2, 0x30($a0)
sd $s3, 0x38($a0)
sd $s4, 0x40($a0)
sd $s5, 0x48($a0)
sd $s6, 0x50($a0)
sd $s7, 0x58($a0)
#ifdef __mips_hard_float
mfc0 $v0, $12
ext $v0, $v0, 29, 1
beqz $v0, 1f
s.d $f24, 0x60($a0)
s.d $f25, 0x68($a0)
s.d $f26, 0x70($a0)
s.d $f27, 0x78($a0)
s.d $f28, 0x80($a0)
s.d $f29, 0x88($a0)
s.d $f30, 0x90($a0)
s.d $f31, 0x98($a0)
1:
#endif
move $v0, $zero
jr $ra
.globl longjmp
.type longjmp, @function
longjmp:
ld $ra, 0x00($a0)
ld $sp, 0x08($a0)
ld $fp, 0x10($a0)
ld $gp, 0x18($a0)
ld $s0, 0x20($a0)
ld $s1, 0x28($a0)
ld $s2, 0x30($a0)
ld $s3, 0x38($a0)
ld $s4, 0x40($a0)
ld $s5, 0x48($a0)
ld $s6, 0x50($a0)
ld $s7, 0x58($a0)
#ifdef __mips_hard_float
mfc0 $v0, $12
ext $v0, $v0, 29, 1
beqz $v0, 1f
l.d $f24, 0x60($a0)
l.d $f25, 0x68($a0)
l.d $f26, 0x70($a0)
l.d $f27, 0x78($a0)
l.d $f28, 0x80($a0)
l.d $f29, 0x88($a0)
l.d $f30, 0x90($a0)
l.d $f31, 0x98($a0)
1:
#endif
li $v0, 1
movn $v0, $a1, $a1
jr $ra