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