Viewing file: builtins-1-p9-runnable.c (1.42 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/* { dg-do run } */ /* { dg-require-effective-target p9vector_hw } */ /* { dg-options "-O2 -mdejagnu-cpu=power9" } */
#include <altivec.h> #include <stdio.h>
void abort (void);
int main() { int i; vector float vfa, vfb; vector unsigned short vresult, vexpected;
vfa = (vector float){0.4, 1.6, 20.0, 99.9 }; vfb = (vector float){10.0, -2.0, 70.0, 999.0 };
/* Expected results. */ #ifdef __BIG_ENDIAN__ vexpected = (vector unsigned short) { 0x4900, 0xc000, 0x5460, 0x63ce, 0x3666, 0x3e66, 0x4d00, 0x563e }; #else vexpected = (vector unsigned short) { 0x3666, 0x3e66, 0x4d00, 0x563e, 0x4900, 0xc000, 0x5460, 0x63ce }; #endif
/* vresult = vec_pack_to_short_fp32 (vfa, vfb); This built-in converts a pair of vector floats into a single vector of packed half-precision (F16) values. The result type is a vector of signed shorts. The expected codegen for this builtin is xvcvsphp t, vfa xvcvsphp u, vfb if (little endian) vpkuwum vresult, t, u else vpkuwum vresult, u, t */
vresult = vec_pack_to_short_fp32 (vfa, vfb);
#ifdef DEBUG for(i = 0; i< 4; i++) { printf("i=[%d] %f \n",i,vfa[i]); } for(i = 0; i< 4; i++) { printf("i=[%d] %f \n",i+4,vfb[i]); } for(i = 0; i< 8; i++) { printf("i=[%d] %d \n",i,vresult[i]); } #endif
for(i = 0; i< 8; i++) { if (vresult[i] != vexpected[i]) { printf("i=[%d] 0x%x != 0x%x \n",i,vresult[i],vexpected[i]); abort(); } } }
|