1 /* test data class tests for float, double, long double: TCEB, TCDB, TCXB */
2 #include <math.h>
3 #include <stdio.h>
4
tcxb(long double f,long long num)5 static 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
tcdb(double f,long long num)18 static 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
tceb(float f,long long num)31 static 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
main()44 int 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 }
96