Skip to content

Instantly share code, notes, and snippets.

@sandip4n
Last active September 5, 2019 09:46
Show Gist options
  • Save sandip4n/facec7e48af8b9aa97e822d9b4a5104c to your computer and use it in GitHub Desktop.
Save sandip4n/facec7e48af8b9aa97e822d9b4a5104c to your computer and use it in GitHub Desktop.
/*
* 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