tcxb.c revision 8f943afc22a6a683b78271836c8ddc462b4824a9
1/* 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}
96