Browse Source
Add test for vextractbm, vextractwm, vextractdm and vextractqm instructions. Test works for both qemu-ppc64 and qemu-ppc64le. Based on the test case written by John Platts posted at [1] References: [1] - https://gitlab.com/qemu-project/qemu/-/issues/1536 Signed-off-by: John Platts <john_platts@hotmail.com> Signed-off-by: Shivaprasad G Bhat <sbhat@linux.ibm.com> Reviewed-by: Lucas Mateus Castro <lucas.araujo@eldorado.org.br> Reviewed-by: Cédric Le Goater <clg@redhat.com> Message-Id: <168319294881.1159309.17060400720026083557.stgit@ltc-boston1.aus.stglabs.ibm.com> Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com>pull/235/head
committed by
Daniel Henrique Barboza
2 changed files with 55 additions and 1 deletions
@ -0,0 +1,51 @@ |
|||
#include <assert.h> |
|||
#include <stdint.h> |
|||
#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; |
|||
} |
|||
Loading…
Reference in new issue