Last active
September 5, 2019 09:46
-
-
Save sandip4n/facec7e48af8b9aa97e822d9b4a5104c to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* Compile as follows: | |
* gcc -O0 -nostdlib -static gem5-endian-test.c | |
*/ | |
#ifndef __powerpc64__ | |
#error "unsupported architecture" | |
#endif | |
#define MSG "Hello world\n" | |
#define MSG_LEN 12 | |
void _start() | |
{ | |
const char *msg = MSG; | |
volatile register unsigned long gpr0 asm("r0"); | |
volatile register unsigned long gpr3 asm("r3"); | |
volatile register unsigned long gpr4 asm("r4"); | |
volatile register unsigned long gpr5 asm("r5"); | |
volatile register unsigned long gpr14 asm("r14"); | |
volatile register unsigned long gpr15 asm("r15"); | |
asm volatile("oris %0, %0, 0xdead" : "=r"(gpr14) : "r"(gpr14)); | |
asm volatile("ori %0, %0, 0xbeef" : "=r"(gpr14) : "r"(gpr14)); | |
asm volatile("sldi %0, %0, 32" : "=r"(gpr14) : "r"(gpr14)); | |
asm volatile("oris %0, %0, 0xdead" : "=r"(gpr14) : "r"(gpr14)); | |
asm volatile("ori %0, %0, 0xbeef" : "=r"(gpr14) : "r"(gpr14)); | |
asm volatile("mtlr %0" : : "r"(gpr14)); | |
asm volatile("mtcr %0" : : "r"(gpr14)); | |
asm volatile("mtxer %0" : : "r"(gpr14)); | |
asm volatile("mtctr %0" : : "r"(gpr14)); | |
asm volatile("mr %0, %1" : "=r"(gpr15) : "r"(msg)); | |
asm volatile("li %0, 4" : "=r"(gpr0)); /* sys_write */ | |
asm volatile("li %0, 1" : "=r"(gpr3)); /* STDOUT_FILENO */ | |
asm volatile("mr %0, %1" : "=r"(gpr4) : "r"(gpr15)); | |
asm volatile("li %0, %1" : "=r"(gpr5) : "i"(MSG_LEN)); | |
asm volatile("sc"); | |
asm volatile("std %0, -8(1)" : : "r"(gpr14)); | |
/* fake endianness switch */ | |
asm volatile(".long 0x14000000"); | |
/* asm volatile("li %0, 4" : "=r"(gpr0)); */ | |
asm volatile(".long 0x04000038"); | |
/* asm volatile("li %0, 1" : "=r"(gpr3)); */ | |
asm volatile(".long 0x01006038"); | |
/* asm volatile("mr %0, %1" : "=r"(gpr4) : "r"(gpr15)); */ | |
asm volatile(".long 0x787be47d"); | |
/* asm volatile("li %0, %1" : "=r"(gpr5) : "i"(MSG_LEN)); */ | |
asm volatile(".long 0x0c00a038"); | |
/* asm volatile("sc"); */ | |
asm volatile(".long 0x02000044"); | |
/* asm volatile("ld %0, -8(1)" : "=r"(gpr14)); */ | |
asm volatile(".long 0xf8ffc1e9"); | |
/* asm volatile("li %0, 1" : "=r"(gpr0)); */ | |
asm volatile(".long 0x01000038"); | |
/* asm volatile("li %0, 0" : "=r"(gpr3)); */ | |
asm volatile(".long 0x00006038"); | |
/* asm volatile("sc"); */ | |
asm volatile(".long 0x02000044"); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment