blob: 4ff031f865c9e455ce0db40293572e675157465a [file] [log] [blame]
sewardjb5b87402011-03-07 16:05:35 +00001/* test data class tests for float, double, long double: TCEB, TCDB, TCXB */
2#include <math.h>
3#include <stdio.h>
4
5static int tcxb(long double f, long long num)
6{
7 int match;
8
9 asm volatile(" tcxb %1,0(%2)\n"
10 "ipm %0\n"
11 "srl %0,28\n"
12 : "=d" (match)
13 : "f" (f), "a" (num)
14 : "cc");
15 return match;
16}
17
18static int tcdb(double f, long long num)
19{
20 int match;
21
22 asm volatile(" tcdb %1,0(%2)\n"
23 "ipm %0\n"
24 "srl %0,28\n"
25 : "=d" (match)
26 : "f" (f), "a" (num)
27 : "cc");
28 return match;
29}
30
31static int tceb(float f, long long num)
32{
33 int match;
34
35 asm volatile(" tceb %1,0(%2)\n"
36 "ipm %0\n"
37 "srl %0,28\n"
38 : "=d" (match)
39 : "f" (f), "a" (num)
40 : "cc");
41 return match;
42}
43
44int main()
45{
46 int i;
47
48 for (i = 0; i < 64; i++) {
49 if (sizeof (long double) == 16) {
50 /* long double 128 bit */
51 printf("%d", tcxb(+0.0l, 1UL<<i));
52 printf("%d", tcxb(-0.0l, 1UL<<i));
53 printf("%d", tcxb(+2.2l, 1UL<<i));
54 printf("%d", tcxb(-2.2l, 1UL<<i));
55 printf("%d", tcxb(+INFINITY, 1UL<<i));
56 printf("%d", tcxb(-INFINITY, 1UL<<i));
57 printf("%d", tcxb(+NAN, 1UL<<i));
58 printf("%d", tcxb(-NAN, 1UL<<i));
59 } else {
60 /* long double 64 bit */
61 printf("%d", tcdb(+0.0l, 1UL<<i));
62 printf("%d", tcdb(-0.0l, 1UL<<i));
63 printf("%d", tcdb(+2.2l, 1UL<<i));
64 printf("%d", tcdb(-2.2l, 1UL<<i));
65 printf("%d", tcdb(+INFINITY, 1UL<<i));
66 printf("%d", tcdb(-INFINITY, 1UL<<i));
67 printf("%d", tcdb(+NAN, 1UL<<i));
68 printf("%d", tcdb(-NAN, 1UL<<i));
69 }
70 /* double 64 bit */
71 printf("%d", tcdb(+0.0, 1UL<<i));
72 printf("%d", tcdb(-0.0, 1UL<<i));
73 printf("%d", tcdb(+2.2, 1UL<<i));
74 printf("%d", tcdb(-2.2, 1UL<<i));
75 printf("%d", tcdb(+INFINITY, 1UL<<i));
76 printf("%d", tcdb(-INFINITY, 1UL<<i));
77 printf("%d", tcdb(+NAN, 1UL<<i));
78 printf("%d", tcdb(-NAN, 1UL<<i));
79
80
81 /* float 32 bit */
82 printf("%d", tceb(+0.0f, 1UL<<i));
83 printf("%d", tceb(-0.0f, 1UL<<i));
84 printf("%d", tceb(+2.2f, 1UL<<i));
85 printf("%d", tceb(-2.2f, 1UL<<i));
86 printf("%d", tceb(+INFINITY, 1UL<<i));
87 printf("%d", tceb(-INFINITY, 1UL<<i));
88 printf("%d", tceb(+NAN, 1UL<<i));
89 printf("%d", tceb(-NAN, 1UL<<i));
90
91 printf("\n");
92
93 }
94 return 0;
95}