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