root/tools/testing/selftests/powerpc/switch_endian/check.S
/* SPDX-License-Identifier: GPL-2.0 */
#include "common.h"

/*
 * Checks that registers contain what we expect, ie. they were not clobbered by
 * the syscall.
 *
 * r15: pattern to check registers against.
 *
 * At the end r3 == 0 if everything's OK.
 */
        nop                     # guaranteed to be illegal in reverse-endian
        mr      r9,r15
        cmpd    r9,r3           # check r3
        bne     1f
        addi    r9,r15,4        # check r4
        cmpd    r9,r4
        bne     1f
        lis     r9,0x00FF       # check CR
        ori     r9,r9,0xF000
        mfcr    r10
        and     r10,r10,r9
        cmpw    r9,r10
        addi    r9,r15,34
        bne     1f
        addi    r9,r15,32       # check LR
        mflr    r10
        cmpd    r9,r10
        bne     1f
        addi    r9,r15,5        # check r5
        cmpd    r9,r5
        bne     1f
        addi    r9,r15,6        # check r6
        cmpd    r9,r6
        bne     1f
        addi    r9,r15,7        # check r7
        cmpd    r9,r7
        bne     1f
        addi    r9,r15,8        # check r8
        cmpd    r9,r8
        bne     1f
        addi    r9,r15,13       # check r13
        cmpd    r9,r13
        bne     1f
        addi    r9,r15,14       # check r14
        cmpd    r9,r14
        bne     1f
        addi    r9,r15,16       # check r16
        cmpd    r9,r16
        bne     1f
        addi    r9,r15,17       # check r17
        cmpd    r9,r17
        bne     1f
        addi    r9,r15,18       # check r18
        cmpd    r9,r18
        bne     1f
        addi    r9,r15,19       # check r19
        cmpd    r9,r19
        bne     1f
        addi    r9,r15,20       # check r20
        cmpd    r9,r20
        bne     1f
        addi    r9,r15,21       # check r21
        cmpd    r9,r21
        bne     1f
        addi    r9,r15,22       # check r22
        cmpd    r9,r22
        bne     1f
        addi    r9,r15,23       # check r23
        cmpd    r9,r23
        bne     1f
        addi    r9,r15,24       # check r24
        cmpd    r9,r24
        bne     1f
        addi    r9,r15,25       # check r25
        cmpd    r9,r25
        bne     1f
        addi    r9,r15,26       # check r26
        cmpd    r9,r26
        bne     1f
        addi    r9,r15,27       # check r27
        cmpd    r9,r27
        bne     1f
        addi    r9,r15,28       # check r28
        cmpd    r9,r28
        bne     1f
        addi    r9,r15,29       # check r29
        cmpd    r9,r29
        bne     1f
        addi    r9,r15,30       # check r30
        cmpd    r9,r30
        bne     1f
        addi    r9,r15,31       # check r31
        cmpd    r9,r31
        bne     1f
        b       2f
1:      mr      r3, r9
        li      r0, __NR_exit
        sc
2:      li      r0, __NR_switch_endian
        nop