1*83d290c5STom Rini/* SPDX-License-Identifier: GPL-2.0+ */ 2b4806d6fSPhilipp Tomsich/* 3b4806d6fSPhilipp Tomsich * (C) 2017 Theobroma Systems Design und Consulting GmbH 4b4806d6fSPhilipp Tomsich */ 5b4806d6fSPhilipp Tomsich 6b4806d6fSPhilipp Tomsich#include <config.h> 7b4806d6fSPhilipp Tomsich#include <asm/macro.h> 8b4806d6fSPhilipp Tomsich#include <linux/linkage.h> 9b4806d6fSPhilipp Tomsich 10b4806d6fSPhilipp Tomsich.pushsection .text.setjmp, "ax" 11b4806d6fSPhilipp TomsichENTRY(setjmp) 12b4806d6fSPhilipp Tomsich /* Preserve all callee-saved registers and the SP */ 13b4806d6fSPhilipp Tomsich stp x19, x20, [x0,#0] 14b4806d6fSPhilipp Tomsich stp x21, x22, [x0,#16] 15b4806d6fSPhilipp Tomsich stp x23, x24, [x0,#32] 16b4806d6fSPhilipp Tomsich stp x25, x26, [x0,#48] 17b4806d6fSPhilipp Tomsich stp x27, x28, [x0,#64] 18b4806d6fSPhilipp Tomsich stp x29, x30, [x0,#80] 19b4806d6fSPhilipp Tomsich mov x2, sp 20b4806d6fSPhilipp Tomsich str x2, [x0, #96] 21b4806d6fSPhilipp Tomsich mov x0, #0 22b4806d6fSPhilipp Tomsich ret 23b4806d6fSPhilipp TomsichENDPROC(setjmp) 24b4806d6fSPhilipp Tomsich.popsection 25b4806d6fSPhilipp Tomsich 26b4806d6fSPhilipp Tomsich.pushsection .text.longjmp, "ax" 27b4806d6fSPhilipp TomsichENTRY(longjmp) 28b4806d6fSPhilipp Tomsich ldp x19, x20, [x0,#0] 29b4806d6fSPhilipp Tomsich ldp x21, x22, [x0,#16] 30b4806d6fSPhilipp Tomsich ldp x23, x24, [x0,#32] 31b4806d6fSPhilipp Tomsich ldp x25, x26, [x0,#48] 32b4806d6fSPhilipp Tomsich ldp x27, x28, [x0,#64] 33b4806d6fSPhilipp Tomsich ldp x29, x30, [x0,#80] 34b4806d6fSPhilipp Tomsich ldr x2, [x0,#96] 35b4806d6fSPhilipp Tomsich mov sp, x2 36b4806d6fSPhilipp Tomsich /* Move the return value in place, but return 1 if passed 0. */ 37b4806d6fSPhilipp Tomsich adds x0, xzr, x1 38b4806d6fSPhilipp Tomsich csinc x0, x0, xzr, ne 39b4806d6fSPhilipp Tomsich ret 40b4806d6fSPhilipp TomsichENDPROC(longjmp) 41b4806d6fSPhilipp Tomsich.popsection 42