98 lines · plain
1/* SPDX-License-Identifier: GPL-2.0 */2#include "common.h"3 4 .data5 .balign 86success_message:7 .ascii "success: switch_endian_test\n\0"8 9 .balign 810failure_message:11 .ascii "failure: switch_endian_test\n\0"12 13 .section ".toc"14 .balign 815pattern:16 .8byte 0x5555AAAA5555AAAA17 18 .text19FUNC_START(_start)20 /* Load the pattern */21 ld r15, pattern@TOC(%r2)22 23 /* Setup CR, only CR2-CR4 are maintained */24 lis r3, 0x00FF25 ori r3, r3, 0xF00026 mtcr r327 28 /* Load the pattern slightly modified into the registers */29 mr r3, r1530 addi r4, r15, 431 32 addi r5, r15, 3233 mtlr r534 35 addi r5, r15, 536 addi r6, r15, 637 addi r7, r15, 738 addi r8, r15, 839 40 /* r9 - r12 are clobbered */41 42 addi r13, r15, 1343 addi r14, r15, 1444 45 /* Skip r15 we're using it */46 47 addi r16, r15, 1648 addi r17, r15, 1749 addi r18, r15, 1850 addi r19, r15, 1951 addi r20, r15, 2052 addi r21, r15, 2153 addi r22, r15, 2254 addi r23, r15, 2355 addi r24, r15, 2456 addi r25, r15, 2557 addi r26, r15, 2658 addi r27, r15, 2759 addi r28, r15, 2860 addi r29, r15, 2961 addi r30, r15, 3062 addi r31, r15, 3163 64 /*65 * Call the syscall to switch endian.66 * It clobbers r9-r12, XER, CTR and CR0-1,5-7.67 */68 li r0, __NR_switch_endian69 sc70 71 tdi 0, 0, 0x48 // b +8 if the endian was switched72 b .Lfail // exit if endian didn't switch73 74#include "check-reversed.S"75 76 /* Flip back, r0 already has the switch syscall number */77 .long 0x02000044 /* sc */78 79#include "check.S"80 81 ld r4, success_message@got(%r2)82 li r5, 28 // strlen(success_message)83 li r14, 0 // exit status84.Lout:85 li r0, __NR_write86 li r3, 1 /* stdout */87 sc88 li r0, __NR_exit89 mr r3, r1490 sc91 b .92 93.Lfail:94 ld r4, failure_message@got(%r2)95 li r5, 28 // strlen(failure_message)96 li r14, 197 b .Lout98