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