/* { dg-do run { target { ! avr_tiny } } } */ /* { dg-additional-options "-Os" } */ const long double vals[] = { 0.0625L, -0.125L, 0.25L, -0.5L, 1.0L, -2.0L, 4.0L, -8.0L, 16.0L }; #define ARRAY_SIZE(X) ((int) (sizeof(X) / sizeof(*X))) __attribute__((noipa)) void test1 (long double x) { int i; for (i = 0; i < ARRAY_SIZE (vals); ++i) { long double val0 = vals[i]; long double val1 = __builtin_powil (x, i - 4); __asm ("" : "+r" (val0)); if (val0 != val1) __builtin_exit (__LINE__); } } int main (void) { test1 (-2.0L); return 0; }