162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci#include "common.h"
362306a36Sopenharmony_ci
462306a36Sopenharmony_ci/*
562306a36Sopenharmony_ci * Checks that registers contain what we expect, ie. they were not clobbered by
662306a36Sopenharmony_ci * the syscall.
762306a36Sopenharmony_ci *
862306a36Sopenharmony_ci * r15: pattern to check registers against.
962306a36Sopenharmony_ci *
1062306a36Sopenharmony_ci * At the end r3 == 0 if everything's OK.
1162306a36Sopenharmony_ci */
1262306a36Sopenharmony_ci	nop			# guaranteed to be illegal in reverse-endian
1362306a36Sopenharmony_ci	mr	r9,r15
1462306a36Sopenharmony_ci	cmpd    r9,r3		# check r3
1562306a36Sopenharmony_ci	bne     1f
1662306a36Sopenharmony_ci	addi    r9,r15,4	# check r4
1762306a36Sopenharmony_ci	cmpd    r9,r4
1862306a36Sopenharmony_ci	bne     1f
1962306a36Sopenharmony_ci	lis     r9,0x00FF	# check CR
2062306a36Sopenharmony_ci	ori     r9,r9,0xF000
2162306a36Sopenharmony_ci	mfcr    r10
2262306a36Sopenharmony_ci	and     r10,r10,r9
2362306a36Sopenharmony_ci	cmpw    r9,r10
2462306a36Sopenharmony_ci	addi    r9,r15,34
2562306a36Sopenharmony_ci	bne     1f
2662306a36Sopenharmony_ci	addi    r9,r15,32	# check LR
2762306a36Sopenharmony_ci	mflr    r10
2862306a36Sopenharmony_ci	cmpd    r9,r10
2962306a36Sopenharmony_ci	bne     1f
3062306a36Sopenharmony_ci	addi    r9,r15,5	# check r5
3162306a36Sopenharmony_ci	cmpd    r9,r5
3262306a36Sopenharmony_ci	bne     1f
3362306a36Sopenharmony_ci	addi    r9,r15,6	# check r6
3462306a36Sopenharmony_ci	cmpd    r9,r6
3562306a36Sopenharmony_ci	bne     1f
3662306a36Sopenharmony_ci	addi    r9,r15,7	# check r7
3762306a36Sopenharmony_ci	cmpd    r9,r7
3862306a36Sopenharmony_ci	bne     1f
3962306a36Sopenharmony_ci	addi    r9,r15,8	# check r8
4062306a36Sopenharmony_ci	cmpd    r9,r8
4162306a36Sopenharmony_ci	bne     1f
4262306a36Sopenharmony_ci	addi    r9,r15,13	# check r13
4362306a36Sopenharmony_ci	cmpd    r9,r13
4462306a36Sopenharmony_ci	bne     1f
4562306a36Sopenharmony_ci	addi    r9,r15,14	# check r14
4662306a36Sopenharmony_ci	cmpd    r9,r14
4762306a36Sopenharmony_ci	bne     1f
4862306a36Sopenharmony_ci	addi    r9,r15,16	# check r16
4962306a36Sopenharmony_ci	cmpd    r9,r16
5062306a36Sopenharmony_ci	bne     1f
5162306a36Sopenharmony_ci	addi    r9,r15,17	# check r17
5262306a36Sopenharmony_ci	cmpd    r9,r17
5362306a36Sopenharmony_ci	bne     1f
5462306a36Sopenharmony_ci	addi    r9,r15,18	# check r18
5562306a36Sopenharmony_ci	cmpd    r9,r18
5662306a36Sopenharmony_ci	bne     1f
5762306a36Sopenharmony_ci	addi    r9,r15,19	# check r19
5862306a36Sopenharmony_ci	cmpd    r9,r19
5962306a36Sopenharmony_ci	bne     1f
6062306a36Sopenharmony_ci	addi    r9,r15,20	# check r20
6162306a36Sopenharmony_ci	cmpd    r9,r20
6262306a36Sopenharmony_ci	bne     1f
6362306a36Sopenharmony_ci	addi    r9,r15,21	# check r21
6462306a36Sopenharmony_ci	cmpd    r9,r21
6562306a36Sopenharmony_ci	bne     1f
6662306a36Sopenharmony_ci	addi    r9,r15,22	# check r22
6762306a36Sopenharmony_ci	cmpd    r9,r22
6862306a36Sopenharmony_ci	bne     1f
6962306a36Sopenharmony_ci	addi    r9,r15,23	# check r23
7062306a36Sopenharmony_ci	cmpd    r9,r23
7162306a36Sopenharmony_ci	bne     1f
7262306a36Sopenharmony_ci	addi    r9,r15,24	# check r24
7362306a36Sopenharmony_ci	cmpd    r9,r24
7462306a36Sopenharmony_ci	bne     1f
7562306a36Sopenharmony_ci	addi    r9,r15,25	# check r25
7662306a36Sopenharmony_ci	cmpd    r9,r25
7762306a36Sopenharmony_ci	bne     1f
7862306a36Sopenharmony_ci	addi    r9,r15,26	# check r26
7962306a36Sopenharmony_ci	cmpd    r9,r26
8062306a36Sopenharmony_ci	bne     1f
8162306a36Sopenharmony_ci	addi    r9,r15,27	# check r27
8262306a36Sopenharmony_ci	cmpd    r9,r27
8362306a36Sopenharmony_ci	bne     1f
8462306a36Sopenharmony_ci	addi    r9,r15,28	# check r28
8562306a36Sopenharmony_ci	cmpd    r9,r28
8662306a36Sopenharmony_ci	bne     1f
8762306a36Sopenharmony_ci	addi    r9,r15,29	# check r29
8862306a36Sopenharmony_ci	cmpd    r9,r29
8962306a36Sopenharmony_ci	bne     1f
9062306a36Sopenharmony_ci	addi    r9,r15,30	# check r30
9162306a36Sopenharmony_ci	cmpd    r9,r30
9262306a36Sopenharmony_ci	bne     1f
9362306a36Sopenharmony_ci	addi    r9,r15,31	# check r31
9462306a36Sopenharmony_ci	cmpd    r9,r31
9562306a36Sopenharmony_ci	bne     1f
9662306a36Sopenharmony_ci	b	2f
9762306a36Sopenharmony_ci1:	mr	r3, r9
9862306a36Sopenharmony_ci	li	r0, __NR_exit
9962306a36Sopenharmony_ci	sc
10062306a36Sopenharmony_ci2:	li	r0, __NR_switch_endian
10162306a36Sopenharmony_ci	nop
102