mirror of
https://github.com/ioacademy-jikim/debugging
synced 2025-06-11 09:56:29 +00:00
96 lines
2.1 KiB
C
96 lines
2.1 KiB
C
/* test data class tests for float, double, long double: TCEB, TCDB, TCXB */
|
|
#include <math.h>
|
|
#include <stdio.h>
|
|
|
|
static int tcxb(long double f, long long num)
|
|
{
|
|
int match;
|
|
|
|
asm volatile(" tcxb %1,0(%2)\n"
|
|
"ipm %0\n"
|
|
"srl %0,28\n"
|
|
: "=d" (match)
|
|
: "f" (f), "a" (num)
|
|
: "cc");
|
|
return match;
|
|
}
|
|
|
|
static int tcdb(double f, long long num)
|
|
{
|
|
int match;
|
|
|
|
asm volatile(" tcdb %1,0(%2)\n"
|
|
"ipm %0\n"
|
|
"srl %0,28\n"
|
|
: "=d" (match)
|
|
: "f" (f), "a" (num)
|
|
: "cc");
|
|
return match;
|
|
}
|
|
|
|
static int tceb(float f, long long num)
|
|
{
|
|
int match;
|
|
|
|
asm volatile(" tceb %1,0(%2)\n"
|
|
"ipm %0\n"
|
|
"srl %0,28\n"
|
|
: "=d" (match)
|
|
: "f" (f), "a" (num)
|
|
: "cc");
|
|
return match;
|
|
}
|
|
|
|
int main()
|
|
{
|
|
int i;
|
|
|
|
for (i = 0; i < 64; i++) {
|
|
if (sizeof (long double) == 16) {
|
|
/* long double 128 bit */
|
|
printf("%d", tcxb(+0.0l, 1UL<<i));
|
|
printf("%d", tcxb(-0.0l, 1UL<<i));
|
|
printf("%d", tcxb(+2.2l, 1UL<<i));
|
|
printf("%d", tcxb(-2.2l, 1UL<<i));
|
|
printf("%d", tcxb(+INFINITY, 1UL<<i));
|
|
printf("%d", tcxb(-INFINITY, 1UL<<i));
|
|
printf("%d", tcxb(+NAN, 1UL<<i));
|
|
printf("%d", tcxb(-NAN, 1UL<<i));
|
|
} else {
|
|
/* long double 64 bit */
|
|
printf("%d", tcdb(+0.0l, 1UL<<i));
|
|
printf("%d", tcdb(-0.0l, 1UL<<i));
|
|
printf("%d", tcdb(+2.2l, 1UL<<i));
|
|
printf("%d", tcdb(-2.2l, 1UL<<i));
|
|
printf("%d", tcdb(+INFINITY, 1UL<<i));
|
|
printf("%d", tcdb(-INFINITY, 1UL<<i));
|
|
printf("%d", tcdb(+NAN, 1UL<<i));
|
|
printf("%d", tcdb(-NAN, 1UL<<i));
|
|
}
|
|
/* double 64 bit */
|
|
printf("%d", tcdb(+0.0, 1UL<<i));
|
|
printf("%d", tcdb(-0.0, 1UL<<i));
|
|
printf("%d", tcdb(+2.2, 1UL<<i));
|
|
printf("%d", tcdb(-2.2, 1UL<<i));
|
|
printf("%d", tcdb(+INFINITY, 1UL<<i));
|
|
printf("%d", tcdb(-INFINITY, 1UL<<i));
|
|
printf("%d", tcdb(+NAN, 1UL<<i));
|
|
printf("%d", tcdb(-NAN, 1UL<<i));
|
|
|
|
|
|
/* float 32 bit */
|
|
printf("%d", tceb(+0.0f, 1UL<<i));
|
|
printf("%d", tceb(-0.0f, 1UL<<i));
|
|
printf("%d", tceb(+2.2f, 1UL<<i));
|
|
printf("%d", tceb(-2.2f, 1UL<<i));
|
|
printf("%d", tceb(+INFINITY, 1UL<<i));
|
|
printf("%d", tceb(-INFINITY, 1UL<<i));
|
|
printf("%d", tceb(+NAN, 1UL<<i));
|
|
printf("%d", tceb(-NAN, 1UL<<i));
|
|
|
|
printf("\n");
|
|
|
|
}
|
|
return 0;
|
|
}
|