1*4882a593Smuzhiyun/* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun#include "common.h" 3*4882a593Smuzhiyun 4*4882a593Smuzhiyun/* 5*4882a593Smuzhiyun * Checks that registers contain what we expect, ie. they were not clobbered by 6*4882a593Smuzhiyun * the syscall. 7*4882a593Smuzhiyun * 8*4882a593Smuzhiyun * r15: pattern to check registers against. 9*4882a593Smuzhiyun * 10*4882a593Smuzhiyun * At the end r3 == 0 if everything's OK. 11*4882a593Smuzhiyun */ 12*4882a593Smuzhiyun nop # guaranteed to be illegal in reverse-endian 13*4882a593Smuzhiyun mr r9,r15 14*4882a593Smuzhiyun cmpd r9,r3 # check r3 15*4882a593Smuzhiyun bne 1f 16*4882a593Smuzhiyun addi r9,r15,4 # check r4 17*4882a593Smuzhiyun cmpd r9,r4 18*4882a593Smuzhiyun bne 1f 19*4882a593Smuzhiyun lis r9,0x00FF # check CR 20*4882a593Smuzhiyun ori r9,r9,0xF000 21*4882a593Smuzhiyun mfcr r10 22*4882a593Smuzhiyun and r10,r10,r9 23*4882a593Smuzhiyun cmpw r9,r10 24*4882a593Smuzhiyun addi r9,r15,34 25*4882a593Smuzhiyun bne 1f 26*4882a593Smuzhiyun addi r9,r15,32 # check LR 27*4882a593Smuzhiyun mflr r10 28*4882a593Smuzhiyun cmpd r9,r10 29*4882a593Smuzhiyun bne 1f 30*4882a593Smuzhiyun addi r9,r15,5 # check r5 31*4882a593Smuzhiyun cmpd r9,r5 32*4882a593Smuzhiyun bne 1f 33*4882a593Smuzhiyun addi r9,r15,6 # check r6 34*4882a593Smuzhiyun cmpd r9,r6 35*4882a593Smuzhiyun bne 1f 36*4882a593Smuzhiyun addi r9,r15,7 # check r7 37*4882a593Smuzhiyun cmpd r9,r7 38*4882a593Smuzhiyun bne 1f 39*4882a593Smuzhiyun addi r9,r15,8 # check r8 40*4882a593Smuzhiyun cmpd r9,r8 41*4882a593Smuzhiyun bne 1f 42*4882a593Smuzhiyun addi r9,r15,13 # check r13 43*4882a593Smuzhiyun cmpd r9,r13 44*4882a593Smuzhiyun bne 1f 45*4882a593Smuzhiyun addi r9,r15,14 # check r14 46*4882a593Smuzhiyun cmpd r9,r14 47*4882a593Smuzhiyun bne 1f 48*4882a593Smuzhiyun addi r9,r15,16 # check r16 49*4882a593Smuzhiyun cmpd r9,r16 50*4882a593Smuzhiyun bne 1f 51*4882a593Smuzhiyun addi r9,r15,17 # check r17 52*4882a593Smuzhiyun cmpd r9,r17 53*4882a593Smuzhiyun bne 1f 54*4882a593Smuzhiyun addi r9,r15,18 # check r18 55*4882a593Smuzhiyun cmpd r9,r18 56*4882a593Smuzhiyun bne 1f 57*4882a593Smuzhiyun addi r9,r15,19 # check r19 58*4882a593Smuzhiyun cmpd r9,r19 59*4882a593Smuzhiyun bne 1f 60*4882a593Smuzhiyun addi r9,r15,20 # check r20 61*4882a593Smuzhiyun cmpd r9,r20 62*4882a593Smuzhiyun bne 1f 63*4882a593Smuzhiyun addi r9,r15,21 # check r21 64*4882a593Smuzhiyun cmpd r9,r21 65*4882a593Smuzhiyun bne 1f 66*4882a593Smuzhiyun addi r9,r15,22 # check r22 67*4882a593Smuzhiyun cmpd r9,r22 68*4882a593Smuzhiyun bne 1f 69*4882a593Smuzhiyun addi r9,r15,23 # check r23 70*4882a593Smuzhiyun cmpd r9,r23 71*4882a593Smuzhiyun bne 1f 72*4882a593Smuzhiyun addi r9,r15,24 # check r24 73*4882a593Smuzhiyun cmpd r9,r24 74*4882a593Smuzhiyun bne 1f 75*4882a593Smuzhiyun addi r9,r15,25 # check r25 76*4882a593Smuzhiyun cmpd r9,r25 77*4882a593Smuzhiyun bne 1f 78*4882a593Smuzhiyun addi r9,r15,26 # check r26 79*4882a593Smuzhiyun cmpd r9,r26 80*4882a593Smuzhiyun bne 1f 81*4882a593Smuzhiyun addi r9,r15,27 # check r27 82*4882a593Smuzhiyun cmpd r9,r27 83*4882a593Smuzhiyun bne 1f 84*4882a593Smuzhiyun addi r9,r15,28 # check r28 85*4882a593Smuzhiyun cmpd r9,r28 86*4882a593Smuzhiyun bne 1f 87*4882a593Smuzhiyun addi r9,r15,29 # check r29 88*4882a593Smuzhiyun cmpd r9,r29 89*4882a593Smuzhiyun bne 1f 90*4882a593Smuzhiyun addi r9,r15,30 # check r30 91*4882a593Smuzhiyun cmpd r9,r30 92*4882a593Smuzhiyun bne 1f 93*4882a593Smuzhiyun addi r9,r15,31 # check r31 94*4882a593Smuzhiyun cmpd r9,r31 95*4882a593Smuzhiyun bne 1f 96*4882a593Smuzhiyun b 2f 97*4882a593Smuzhiyun1: mr r3, r9 98*4882a593Smuzhiyun li r0, __NR_exit 99*4882a593Smuzhiyun sc 100*4882a593Smuzhiyun2: li r0, __NR_switch_endian 101*4882a593Smuzhiyun nop 102