blob: eedcfcdac96f6195dc492a11fd9af1d6c0cb0fab (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
/* { dg-do run { target { powerpc*-*-* } } } */
/* { dg-require-effective-target lp64 } */
/* { dg-require-effective-target p9vector_hw } */
/* { dg-options "-mdejagnu-cpu=power9 -save-temps" } */
#include <altivec.h>
#include <stdlib.h>
#if DEBUG
#include <stdio.h>
#endif
vector unsigned long long int
get_exponents (__ieee128 *p)
{
__ieee128 source = *p;
return scalar_extract_exp_to_vec (source);
}
int
main ()
{
vector unsigned long long int result, exp_result;
union conv128_t
{
__ieee128 val_ieee128;
__int128 val_int128;
} source;
#ifdef _BIG_ENDIAN
exp_result[1] = 0x0ULL;
exp_result[0] = 0x1234ULL;
#else
exp_result[0] = 0x0ULL;
exp_result[1] = 0x1234ULL;
#endif
source.val_int128 = 0x923456789ABCDEF0ULL;
source.val_int128 = (source.val_int128 << 64) | 0x123456789ABCDEFULL;
result = get_exponents (&source.val_ieee128);
if ((result[0] != exp_result[0]) || (result[1] != exp_result[1]))
#if DEBUG
{
printf("result[0] = 0x%llx; exp_result[0] = 0x%llx\n",
result[0], exp_result[0]);
printf("result[1] = 0x%llx; exp_result[1] = 0x%llx\n",
result[1], exp_result[1]);
}
#else
abort();
#endif
return 0;
}
/* Check that the expected extract exponent instruction is generated. */
/* { dg-final { scan-assembler-times {\mxsxexpqp\M} 1 } } */
|