#include #include #include "qemu/compiler.h" int main(void) { unsigned int result_wi; vector unsigned char vbc_bi_src = { 0xFF, 0xFF, 0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0, 0, 0, 0, 0xFF, 0xFF}; vector unsigned short vbc_hi_src = { 0xFFFF, 0, 0, 0xFFFF, 0, 0, 0xFFFF, 0xFFFF}; vector unsigned int vbc_wi_src = {0, 0, 0xFFFFFFFF, 0xFFFFFFFF}; vector unsigned long long vbc_di_src = {0xFFFFFFFFFFFFFFFF, 0}; vector __uint128_t vbc_qi_src; asm("vextractbm %0, %1" : "=r" (result_wi) : "v" (vbc_bi_src)); #if HOST_BIG_ENDIAN assert(result_wi == 0b1101111111000011); #else assert(result_wi == 0b1100001111111011); #endif asm("vextracthm %0, %1" : "=r" (result_wi) : "v" (vbc_hi_src)); #if HOST_BIG_ENDIAN assert(result_wi == 0b10010011); #else assert(result_wi == 0b11001001); #endif asm("vextractwm %0, %1" : "=r" (result_wi) : "v" (vbc_wi_src)); #if HOST_BIG_ENDIAN assert(result_wi == 0b0011); #else assert(result_wi == 0b1100); #endif asm("vextractdm %0, %1" : "=r" (result_wi) : "v" (vbc_di_src)); #if HOST_BIG_ENDIAN assert(result_wi == 0b10); #else assert(result_wi == 0b01); #endif vbc_qi_src[0] = 0x1; vbc_qi_src[0] = vbc_qi_src[0] << 127; asm("vextractqm %0, %1" : "=r" (result_wi) : "v" (vbc_qi_src)); assert(result_wi == 0b1); return 0; }