18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
28c2ecf20Sopenharmony_ci#include "common.h"
38c2ecf20Sopenharmony_ci
48c2ecf20Sopenharmony_ci/*
58c2ecf20Sopenharmony_ci * Checks that registers contain what we expect, ie. they were not clobbered by
68c2ecf20Sopenharmony_ci * the syscall.
78c2ecf20Sopenharmony_ci *
88c2ecf20Sopenharmony_ci * r15: pattern to check registers against.
98c2ecf20Sopenharmony_ci *
108c2ecf20Sopenharmony_ci * At the end r3 == 0 if everything's OK.
118c2ecf20Sopenharmony_ci */
128c2ecf20Sopenharmony_ci	nop			# guaranteed to be illegal in reverse-endian
138c2ecf20Sopenharmony_ci	mr	r9,r15
148c2ecf20Sopenharmony_ci	cmpd    r9,r3		# check r3
158c2ecf20Sopenharmony_ci	bne     1f
168c2ecf20Sopenharmony_ci	addi    r9,r15,4	# check r4
178c2ecf20Sopenharmony_ci	cmpd    r9,r4
188c2ecf20Sopenharmony_ci	bne     1f
198c2ecf20Sopenharmony_ci	lis     r9,0x00FF	# check CR
208c2ecf20Sopenharmony_ci	ori     r9,r9,0xF000
218c2ecf20Sopenharmony_ci	mfcr    r10
228c2ecf20Sopenharmony_ci	and     r10,r10,r9
238c2ecf20Sopenharmony_ci	cmpw    r9,r10
248c2ecf20Sopenharmony_ci	addi    r9,r15,34
258c2ecf20Sopenharmony_ci	bne     1f
268c2ecf20Sopenharmony_ci	addi    r9,r15,32	# check LR
278c2ecf20Sopenharmony_ci	mflr    r10
288c2ecf20Sopenharmony_ci	cmpd    r9,r10
298c2ecf20Sopenharmony_ci	bne     1f
308c2ecf20Sopenharmony_ci	addi    r9,r15,5	# check r5
318c2ecf20Sopenharmony_ci	cmpd    r9,r5
328c2ecf20Sopenharmony_ci	bne     1f
338c2ecf20Sopenharmony_ci	addi    r9,r15,6	# check r6
348c2ecf20Sopenharmony_ci	cmpd    r9,r6
358c2ecf20Sopenharmony_ci	bne     1f
368c2ecf20Sopenharmony_ci	addi    r9,r15,7	# check r7
378c2ecf20Sopenharmony_ci	cmpd    r9,r7
388c2ecf20Sopenharmony_ci	bne     1f
398c2ecf20Sopenharmony_ci	addi    r9,r15,8	# check r8
408c2ecf20Sopenharmony_ci	cmpd    r9,r8
418c2ecf20Sopenharmony_ci	bne     1f
428c2ecf20Sopenharmony_ci	addi    r9,r15,13	# check r13
438c2ecf20Sopenharmony_ci	cmpd    r9,r13
448c2ecf20Sopenharmony_ci	bne     1f
458c2ecf20Sopenharmony_ci	addi    r9,r15,14	# check r14
468c2ecf20Sopenharmony_ci	cmpd    r9,r14
478c2ecf20Sopenharmony_ci	bne     1f
488c2ecf20Sopenharmony_ci	addi    r9,r15,16	# check r16
498c2ecf20Sopenharmony_ci	cmpd    r9,r16
508c2ecf20Sopenharmony_ci	bne     1f
518c2ecf20Sopenharmony_ci	addi    r9,r15,17	# check r17
528c2ecf20Sopenharmony_ci	cmpd    r9,r17
538c2ecf20Sopenharmony_ci	bne     1f
548c2ecf20Sopenharmony_ci	addi    r9,r15,18	# check r18
558c2ecf20Sopenharmony_ci	cmpd    r9,r18
568c2ecf20Sopenharmony_ci	bne     1f
578c2ecf20Sopenharmony_ci	addi    r9,r15,19	# check r19
588c2ecf20Sopenharmony_ci	cmpd    r9,r19
598c2ecf20Sopenharmony_ci	bne     1f
608c2ecf20Sopenharmony_ci	addi    r9,r15,20	# check r20
618c2ecf20Sopenharmony_ci	cmpd    r9,r20
628c2ecf20Sopenharmony_ci	bne     1f
638c2ecf20Sopenharmony_ci	addi    r9,r15,21	# check r21
648c2ecf20Sopenharmony_ci	cmpd    r9,r21
658c2ecf20Sopenharmony_ci	bne     1f
668c2ecf20Sopenharmony_ci	addi    r9,r15,22	# check r22
678c2ecf20Sopenharmony_ci	cmpd    r9,r22
688c2ecf20Sopenharmony_ci	bne     1f
698c2ecf20Sopenharmony_ci	addi    r9,r15,23	# check r23
708c2ecf20Sopenharmony_ci	cmpd    r9,r23
718c2ecf20Sopenharmony_ci	bne     1f
728c2ecf20Sopenharmony_ci	addi    r9,r15,24	# check r24
738c2ecf20Sopenharmony_ci	cmpd    r9,r24
748c2ecf20Sopenharmony_ci	bne     1f
758c2ecf20Sopenharmony_ci	addi    r9,r15,25	# check r25
768c2ecf20Sopenharmony_ci	cmpd    r9,r25
778c2ecf20Sopenharmony_ci	bne     1f
788c2ecf20Sopenharmony_ci	addi    r9,r15,26	# check r26
798c2ecf20Sopenharmony_ci	cmpd    r9,r26
808c2ecf20Sopenharmony_ci	bne     1f
818c2ecf20Sopenharmony_ci	addi    r9,r15,27	# check r27
828c2ecf20Sopenharmony_ci	cmpd    r9,r27
838c2ecf20Sopenharmony_ci	bne     1f
848c2ecf20Sopenharmony_ci	addi    r9,r15,28	# check r28
858c2ecf20Sopenharmony_ci	cmpd    r9,r28
868c2ecf20Sopenharmony_ci	bne     1f
878c2ecf20Sopenharmony_ci	addi    r9,r15,29	# check r29
888c2ecf20Sopenharmony_ci	cmpd    r9,r29
898c2ecf20Sopenharmony_ci	bne     1f
908c2ecf20Sopenharmony_ci	addi    r9,r15,30	# check r30
918c2ecf20Sopenharmony_ci	cmpd    r9,r30
928c2ecf20Sopenharmony_ci	bne     1f
938c2ecf20Sopenharmony_ci	addi    r9,r15,31	# check r31
948c2ecf20Sopenharmony_ci	cmpd    r9,r31
958c2ecf20Sopenharmony_ci	bne     1f
968c2ecf20Sopenharmony_ci	b	2f
978c2ecf20Sopenharmony_ci1:	mr	r3, r9
988c2ecf20Sopenharmony_ci	li	r0, __NR_exit
998c2ecf20Sopenharmony_ci	sc
1008c2ecf20Sopenharmony_ci2:	li	r0, __NR_switch_endian
1018c2ecf20Sopenharmony_ci	nop
102