void * downward (void *arg) { int err; DFP_SETROUND (FE_DEC_DOWNWARD); err = pthread_mutex_lock (&mut1); if (err != 0) error (EXIT_FAILURE, err, "downward: failed to lock"); err = pthread_barrier_wait (&bar1); if (err != 0 && err != PTHREAD_BARRIER_SERIAL_THREAD) { puts ("downward: barrier_wait failed"); exit (1); } err = pthread_cond_wait (&cond1, &mut1); if (err != 0) error (EXIT_FAILURE, err, "downward: failed to wait"); err = pthread_mutex_unlock (&mut1); if (err != 0) error (EXIT_FAILURE, err, "downward: failed to unlock"); if (!do_d64_to_d32 (1.1111125dd, 1.111112df)) FAILURE if (!do_d64_to_d32 (1.1111135dd, 1.111113df)) FAILURE if (!do_d64_to_d32 (-1.1111125dd, -1.111113df)) FAILURE if (!do_d64_to_d32 (-1.1111135dd, -1.111114df)) FAILURE if (!do_d128_to_d32 (1.1111125dl, 1.111112df)) FAILURE if (!do_d128_to_d32 (1.1111135dl, 1.111113df)) FAILURE if (!do_d128_to_d32 (-1.1111125dl, -1.111113df)) FAILURE if (!do_d128_to_d32 (-1.1111135dl, -1.111114df)) FAILURE if (!do_d128_to_d64 (1.1111111111111125dl, 1.111111111111112dd)) FAILURE if (!do_d128_to_d64 (1.1111111111111135dl, 1.111111111111113dd)) FAILURE if (!do_d128_to_d64 (-1.1111111111111125dl, -1.111111111111113dd)) FAILURE if (!do_d128_to_d64 (-1.1111111111111135dl, -1.111111111111114dd)) FAILURE #ifdef DBG if (failcnt) printf ("downward: %d fails\n", failcnt); #endif return (void *) (ptrdiff_t) failcnt; }
void * toneareastfromzero (void *arg) { int err; DFP_SETROUND (FE_DEC_TONEARESTFROMZERO); err = pthread_mutex_lock (&mut3); if (err != 0) error (EXIT_FAILURE, err, "toneareastfromzero: failed to lock"); err = pthread_barrier_wait (&bar3); if (err != 0 && err != PTHREAD_BARRIER_SERIAL_THREAD) { puts ("toneareastfromzero: barrier_wait failed"); exit (1); } err = pthread_cond_wait (&cond3, &mut3); if (err != 0) error (EXIT_FAILURE, err, "toneareastfromzero: failed to wait"); err = pthread_mutex_unlock (&mut3); if (err != 0) error (EXIT_FAILURE, err, "toneareastfromzero: failed to unlock"); if (!do_d64_to_d32 (1.1111125dd, 1.111113df)) FAILURE if (!do_d64_to_d32 (1.1111135dd, 1.111114df)) FAILURE if (!do_d64_to_d32 (-1.1111125dd, -1.111113df)) FAILURE if (!do_d64_to_d32 (-1.1111135dd, -1.111114df)) FAILURE if (!do_d128_to_d32 (1.1111125dl, 1.111113df)) FAILURE if (!do_d128_to_d32 (1.1111135dl, 1.111114df)) FAILURE if (!do_d128_to_d32 (-1.1111125dl, -1.111113df)) FAILURE if (!do_d128_to_d32 (-1.1111135dl, -1.111114df)) FAILURE if (!do_d128_to_d64 (1.1111111111111125dl, 1.111111111111113dd)) FAILURE if (!do_d128_to_d64 (1.1111111111111135dl, 1.111111111111114dd)) FAILURE if (!do_d128_to_d64 (-1.1111111111111125dl, -1.111111111111113dd)) FAILURE if (!do_d128_to_d64 (-1.1111111111111135dl, -1.111111111111114dd)) FAILURE #ifdef DBG if (failcnt) printf ("toneareastfromzero: %d fails\n", failcnt); #endif return (void *) (ptrdiff_t) failcnt; }
int main () { DFP_SETROUND (FE_DEC_DOWNWARD); if (!do_d64_to_d32 (1.1111125dd, 1.111112df)) FAILURE if (!do_d64_to_d32 (1.1111135dd, 1.111113df)) FAILURE if (!do_d64_to_d32 (-1.1111125dd, -1.111113df)) FAILURE if (!do_d64_to_d32 (-1.1111135dd, -1.111114df)) FAILURE if (!do_d128_to_d32 (1.1111125dl, 1.111112df)) FAILURE if (!do_d128_to_d32 (1.1111135dl, 1.111113df)) FAILURE if (!do_d128_to_d32 (-1.1111125dl, -1.111113df)) FAILURE if (!do_d128_to_d32 (-1.1111135dl, -1.111114df)) FAILURE if (!do_d128_to_d64 (1.1111111111111125dl, 1.111111111111112dd)) FAILURE if (!do_d128_to_d64 (1.1111111111111135dl, 1.111111111111113dd)) FAILURE if (!do_d128_to_d64 (-1.1111111111111125dl, -1.111111111111113dd)) FAILURE if (!do_d128_to_d64 (-1.1111111111111135dl, -1.111111111111114dd)) FAILURE DFP_SETROUND (FE_DEC_TONEAREST); if (!do_d64_to_d32 (1.1111125dd, 1.111112df)) FAILURE if (!do_d64_to_d32 (1.1111135dd, 1.111114df)) FAILURE if (!do_d64_to_d32 (-1.1111125dd, -1.111112df)) FAILURE if (!do_d64_to_d32 (-1.1111135dd, -1.111114df)) FAILURE if (!do_d128_to_d32 (1.1111125dl, 1.111112df)) FAILURE if (!do_d128_to_d32 (1.1111135dl, 1.111114df)) FAILURE if (!do_d128_to_d32 (-1.1111125dl, -1.111112df)) FAILURE if (!do_d128_to_d32 (-1.1111135dl, -1.111114df)) FAILURE if (!do_d128_to_d64 (1.1111111111111125dl, 1.111111111111112dd)) FAILURE if (!do_d128_to_d64 (1.1111111111111135dl, 1.111111111111114dd)) FAILURE if (!do_d128_to_d64 (-1.1111111111111125dl, -1.111111111111112dd)) FAILURE if (!do_d128_to_d64 (-1.1111111111111135dl, -1.111111111111114dd)) FAILURE DFP_SETROUND (FE_DEC_TONEARESTFROMZERO); if (!do_d64_to_d32 (1.1111125dd, 1.111113df)) FAILURE if (!do_d64_to_d32 (1.1111135dd, 1.111114df)) FAILURE if (!do_d64_to_d32 (-1.1111125dd, -1.111113df)) FAILURE if (!do_d64_to_d32 (-1.1111135dd, -1.111114df)) FAILURE if (!do_d128_to_d32 (1.1111125dl, 1.111113df)) FAILURE if (!do_d128_to_d32 (1.1111135dl, 1.111114df)) FAILURE if (!do_d128_to_d32 (-1.1111125dl, -1.111113df)) FAILURE if (!do_d128_to_d32 (-1.1111135dl, -1.111114df)) FAILURE if (!do_d128_to_d64 (1.1111111111111125dl, 1.111111111111113dd)) FAILURE if (!do_d128_to_d64 (1.1111111111111135dl, 1.111111111111114dd)) FAILURE if (!do_d128_to_d64 (-1.1111111111111125dl, -1.111111111111113dd)) FAILURE if (!do_d128_to_d64 (-1.1111111111111135dl, -1.111111111111114dd)) FAILURE DFP_SETROUND (FE_DEC_TOWARDZERO); if (!do_d64_to_d32 (1.1111125dd, 1.111112df)) FAILURE if (!do_d64_to_d32 (1.1111135dd, 1.111113df)) FAILURE if (!do_d64_to_d32 (-1.1111125dd, -1.111112df)) FAILURE if (!do_d64_to_d32 (-1.1111135dd, -1.111113df)) FAILURE if (!do_d128_to_d32 (1.1111125dl, 1.111112df)) FAILURE if (!do_d128_to_d32 (1.1111135dl, 1.111113df)) FAILURE if (!do_d128_to_d32 (-1.1111125dl, -1.111112df)) FAILURE if (!do_d128_to_d32 (-1.1111135dl, -1.111113df)) FAILURE if (!do_d128_to_d64 (1.1111111111111125dl, 1.111111111111112dd)) FAILURE if (!do_d128_to_d64 (1.1111111111111135dl, 1.111111111111113dd)) FAILURE if (!do_d128_to_d64 (-1.1111111111111125dl, -1.111111111111112dd)) FAILURE if (!do_d128_to_d64 (-1.1111111111111135dl, -1.111111111111113dd)) FAILURE DFP_SETROUND (FE_DEC_UPWARD); if (!do_d64_to_d32 (1.1111125dd, 1.111113df)) FAILURE if (!do_d64_to_d32 (1.1111135dd, 1.111114df)) FAILURE if (!do_d64_to_d32 (-1.1111125dd, -1.111112df)) FAILURE if (!do_d64_to_d32 (-1.1111135dd, -1.111113df)) FAILURE if (!do_d128_to_d32 (1.1111125dl, 1.111113df)) FAILURE if (!do_d128_to_d32 (1.1111135dl, 1.111114df)) FAILURE if (!do_d128_to_d32 (-1.1111125dl, -1.111112df)) FAILURE if (!do_d128_to_d32 (-1.1111135dl, -1.111113df)) FAILURE if (!do_d128_to_d64 (1.1111111111111125dl, 1.111111111111113dd)) FAILURE if (!do_d128_to_d64 (1.1111111111111135dl, 1.111111111111114dd)) FAILURE if (!do_d128_to_d64 (-1.1111111111111125dl, -1.111111111111112dd)) FAILURE if (!do_d128_to_d64 (-1.1111111111111135dl, -1.111111111111113dd)) FAILURE if (failcnt) abort (); return 0; }