1#include <stdint.h> 2#include <stdio.h> 3#include "mtest.h" 4 5static struct f_i t[] = { 6#include "sanity/llroundf.h" 7#include "special/llroundf.h" 8 9}; 10 11int main(void) 12{ 13 #pragma STDC FENV_ACCESS ON 14 long long yi; 15 int e, i, err = 0; 16 struct f_i *p; 17 18 for (i = 0; i < sizeof t/sizeof *t; i++) { 19 p = t + i; 20 21 if (p->r < 0) 22 continue; 23 fesetround(p->r); 24 feclearexcept(FE_ALL_EXCEPT); 25 yi = llroundf(p->x); 26 e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW); 27 28 if (!checkexcept(e, p->e, p->r) && (e|INEXACT) != p->e) { 29 printf("%s:%d: bad fp exception: %s llroundf(%a)=%lld, want %s", 30 p->file, p->line, rstr(p->r), p->x, p->i, estr(p->e)); 31 printf(" got %s\n", estr(e)); 32 err++; 33 } 34 if (!(p->e&INVALID) && yi != p->i) { 35 printf("%s:%d: %s llroundf(%a) want %lld got %lld\n", 36 p->file, p->line, rstr(p->r), p->x, p->i, yi); 37 err++; 38 } 39 } 40 return !!err; 41} 42