#include #include #include int main(void) { __vector uint8_t vrt8; unsigned long lo, hi; #if __BYTE_ORDER == __LITTLE_ENDIAN uint8_t rb32[16] = {0x03, 0x02, 0x01, 0x00, 0x13, 0x12, 0x11, 0x10, 0x23, 0x22, 0x21, 0x20, 0x33, 0x32, 0x31, 0x30}; uint8_t rb16[16] = {0x01, 0x00, 0x11, 0x10, 0x21, 0x20, 0x31, 0x30, 0x41, 0x40, 0x51, 0x50, 0x61, 0x60, 0x71, 0x70}; #else uint8_t rb32[16] = {0x00, 0x01, 0x02, 0x03, 0x10, 0x11, 0x12, 0x13, 0x20, 0x21, 0x22, 0x23, 0x30, 0x31, 0x32, 0x33}; uint8_t rb16[16] = {0x00, 0x01, 0x10, 0x11, 0x20, 0x21, 0x30, 0x31, 0x40, 0x41, 0x50, 0x51, 0x60, 0x61, 0x70, 0x71}; #endif uint8_t rb8[16] = {0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7}; asm volatile("lxvw4x %x0, 0, %1;" "mfvsrd %2, %x0;" "mfvsrld %3, %x0;" : "=ws"(vrt8): "r"(&rb32), "r"(hi), "r"(lo)); printf("lxvw4x: hi %016lx lo %016lx \n", hi, lo); asm volatile("lxvh8x %x0, 0, %1;" "mfvsrd %2, %x0;" "mfvsrld %3, %x0;" : "=ws"(vrt8): "r"(&rb16), "r"(hi), "r"(lo)); printf("lxvh8x: hi %016lx lo %016lx \n", hi, lo); asm volatile("lxvb16x %x0, 0, %1;" "mfvsrd %2, %x0;" "mfvsrld %3, %x0;" : "=ws"(vrt8): "r"(&rb8), "r"(hi), "r"(lo)); printf("lxvb16x: hi %016lx lo %016lx \n", hi, lo); return EXIT_SUCCESS; }