#include <stdio.h>
unsigned int mem[] = {
0xaabbccdd, 0x11223344, 0x01823194, 0x01823a08,
0x00000000, 0x77ff528c, 0x77deb460, 0x00000001
};
void printMem(char* s)
{
int i;
printf("%s\n", s);
for (i=0; i<7 ; i=i+1)
printf("mem[%d]: 0x%x\n", i, mem[i]);
}
int main ()
{
printMem("PRE lwl");
__asm__ volatile("move $a0, %0" "\n\t"
"lw $t0, 0($a0)" "\n\t"
"lwl $t0, 4($a0)" "\n\t"
"sw $t0, 8($a0)" "\n\t"
"lw $t1, 0($a0)" "\n\t"
"lwl $t1, 5($a0)" "\n\t"
"sw $t1, 12($a0)" "\n\t"
"lw $t2, 0($a0)" "\n\t"
"lwl $t2, 6($a0)" "\n\t"
"sw $t2, 16($a0)" "\n\t"
"lw $t3, 0($a0)" "\n\t"
"lwl $t3, 7($a0)" "\n\t"
"sw $t3, 20($a0)" "\n\t"
:
: "r" (mem)
: "a0", "t0", "t1", "t2", "t3", "cc", "memory"
);
printMem("POST lwl");
mem[0] = 0xaabbccdd;
mem[1] = 0x11223344;
mem[2] = 0x01823194;
mem[3] = 0x01823a08;
mem[4] = 0x00000000;
mem[5] = 0x77ff528c;
mem[6] = 0x77deb460;
mem[7] = 0x00000001;
printMem("PRE lwr");
__asm__ volatile("move $a0, %0" "\n\t"
"lw $t0, 0($a0)" "\n\t"
"lwr $t0, 4($a0)" "\n\t"
"sw $t0, 8($a0)" "\n\t"
"lw $t1, 0($a0)" "\n\t"
"lwr $t1, 5($a0)" "\n\t"
"sw $t1, 12($a0)" "\n\t"
"lw $t2, 0($a0)" "\n\t"
"lwr $t2, 6($a0)" "\n\t"
"sw $t2, 16($a0)" "\n\t"
"lw $t3, 0($a0)" "\n\t"
"lwr $t3, 7($a0)" "\n\t"
"sw $t3, 20($a0)" "\n\t"
:
: "r" (mem)
: "a0", "t0", "t1", "t2", "t3", "cc", "memory"
);
printMem("POST lwr");
return 0;
}