/* { dg-do assemble } */ /* { dg-require-effective-target ptr32plus } */ /* { dg-xfail-if "The array too big" { "h8300-*-*" } { "-mno-h" "-mn" } { "" } } */ /* PR c/6957 This testcase ICEd at -O2 on IA-32, because (insn 141 139 142 (set (subreg:SF (reg:QI 72) 0) (plus:SF (reg:SF 73) (reg:SF 76))) 525 {*fop_sf_comm_nosse} (insn_list 134 (nil)) (expr_list:REG_DEAD (reg:SF 73) (nil))) couldn't be reloaded. */ void foo (unsigned int n, int x, int y, unsigned char *z) { int a, b; float c[2048][4]; switch (x) { case 0x1906: a = b = -1; break; case 0x190A: a = b = -1; break; case 0x8049: a = b = -1; break; case 0x1907: a = 1; b = 2; break; default: return; } if (a >= 0) { unsigned char *d = z; unsigned int i; for (i = 0; i < n; i++) { do { union { float r; unsigned int i; } e; e.r = c[i][1]; d[a] = ((e.i >= 0x3f7f0000) ? ((int) e.i < 0) ? (unsigned char) 0 : (unsigned char) 255 : (e.r = e.r * (255.0F / 256.0F) + 32768.0F, (unsigned char) e.i)); } while (0); d += y; } } if (b >= 0) { unsigned char *d = z; unsigned int i; for (i = 0; i < n; i++) { do { union { float r; unsigned int i; } e; e.r = c[i][2]; d[b] = ((e.i >= 0x3f7f0000) ? ((int) e.i < 0) ? (unsigned char) 0 : (unsigned char) 255 : (e.r = e.r * (255.0F / 256.0F) + 32768.0F, (unsigned char) e.i)); } while (0); d += y; } } }