#include "util/u_cpu_detect.h"
+#include "util/u_math.h"
#include "gallivm/lp_bld_const.h"
#include "gallivm/lp_bld_init.h"
+#include "gallivm/lp_bld_debug.h"
#include "lp_test.h"
-#ifdef PIPE_CC_MSVC
-static INLINE double
-round(double x)
-{
- if (x >= 0.0)
- return floor(x + 0.5);
- else
- return ceil(x - 0.5);
-}
-#endif
-
-
void
dump_type(FILE *fp,
struct lp_type type)
if(type.sign) {
long long lvalue = (long long)value;
lvalue = MIN2(lvalue, ((long long)1 << (type.width - 1)) - 1);
+ lvalue = MAX2(lvalue, -((long long)1 << (type.width - 1)));
switch(type.width) {
case 8:
*((int8_t *)dst + index) = (int8_t)lvalue;
}
else {
unsigned long long mask;
- if (type.fixed)
+ if (type.fixed)
mask = ((unsigned long long)1 << (type.width / 2)) - 1;
else if (type.sign)
mask = ((unsigned long long)1 << (type.width - 1)) - 1;
else
mask = ((unsigned long long)1 << type.width) - 1;
value += (double)(mask & rand());
+ if (!type.fixed && !type.sign && type.width == 32) {
+ /*
+ * rand only returns half the possible range
+ * XXX 64bit values...
+ */
+ if(rand() & 1)
+ value += (double)0x80000000;
+ }
}
}
- if(!type.sign)
+ if(type.sign)
if(rand() & 1)
value = -value;
write_elem(type, dst, index, value);
unsigned i;
boolean success;
boolean single = FALSE;
- struct gallivm_state *gallivm;
+ unsigned fpstate;
+
+ util_cpu_detect();
+ fpstate = util_fpstate_get();
+ util_fpstate_set_denorms_to_zero(fpstate);
+
+ if (!lp_build_init())
+ return 1;
for(i = 1; i < argc; ++i) {
if(strcmp(argv[i], "-v") == 0)
n = atoi(argv[i]);
}
- lp_build_init();
-
- gallivm = gallivm_create();
-
- util_cpu_detect();
+#ifdef DEBUG
+ if (verbose >= 2) {
+ gallivm_debug |= GALLIVM_DEBUG_IR;
+ gallivm_debug |= GALLIVM_DEBUG_ASM;
+ }
+#endif
- if(fp) {
+ if (fp) {
/* Warm up the caches */
- test_some(gallivm, 0, NULL, 100);
+ test_some(0, NULL, 100);
write_tsv_header(fp);
}
if (single)
- success = test_single(gallivm, verbose, fp);
+ success = test_single(verbose, fp);
else if (n)
- success = test_some(gallivm, verbose, fp, n);
+ success = test_some(verbose, fp, n);
else
- success = test_all(gallivm, verbose, fp);
+ success = test_all(verbose, fp);
- if(fp)
+ if (fp)
fclose(fp);
+ LLVMShutdown();
+
return success ? 0 : 1;
}