#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; }