1*c1da286aSPhilipp Tomsich/* 2*c1da286aSPhilipp Tomsich * (C) 2017 Theobroma Systems Design und Consulting GmbH 3*c1da286aSPhilipp Tomsich * 4*c1da286aSPhilipp Tomsich * SPDX-License-Identifier: GPL-2.0+ 5*c1da286aSPhilipp Tomsich */ 6*c1da286aSPhilipp Tomsich 7*c1da286aSPhilipp Tomsich#include <config.h> 8*c1da286aSPhilipp Tomsich#include <asm/assembler.h> 9*c1da286aSPhilipp Tomsich#include <linux/linkage.h> 10*c1da286aSPhilipp Tomsich 11*c1da286aSPhilipp Tomsich.pushsection .text.setjmp, "ax" 12*c1da286aSPhilipp TomsichENTRY(setjmp) 13*c1da286aSPhilipp Tomsich /* 14*c1da286aSPhilipp Tomsich * A subroutine must preserve the contents of the registers 15*c1da286aSPhilipp Tomsich * r4-r8, r10, r11 (v1-v5, v7 and v8) and SP (and r9 in PCS 16*c1da286aSPhilipp Tomsich * variants that designate r9 as v6). 17*c1da286aSPhilipp Tomsich */ 18*c1da286aSPhilipp Tomsich mov ip, sp 19*c1da286aSPhilipp Tomsich stm a1, {v1-v8, ip, lr} 20*c1da286aSPhilipp Tomsich mov a1, #0 21*c1da286aSPhilipp Tomsich bx lr 22*c1da286aSPhilipp TomsichENDPROC(setjmp) 23*c1da286aSPhilipp Tomsich.popsection 24*c1da286aSPhilipp Tomsich 25*c1da286aSPhilipp Tomsich.pushsection .text.longjmp, "ax" 26*c1da286aSPhilipp TomsichENTRY(longjmp) 27*c1da286aSPhilipp Tomsich ldm a1, {v1-v8, ip, lr} 28*c1da286aSPhilipp Tomsich mov sp, ip 29*c1da286aSPhilipp Tomsich mov a1, a2 30*c1da286aSPhilipp Tomsich /* If we were passed a return value of zero, return one instead */ 31*c1da286aSPhilipp Tomsich cmp a1, #0 32*c1da286aSPhilipp Tomsich bne 1f 33*c1da286aSPhilipp Tomsich mov a1, #1 34*c1da286aSPhilipp Tomsich1: 35*c1da286aSPhilipp Tomsich bx lr 36*c1da286aSPhilipp TomsichENDPROC(longjmp) 37*c1da286aSPhilipp Tomsich.popsection 38