http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56570
--- Comment #5 from Richard Biener <rguenth at gcc dot gnu.org> 2013-03-08 12:15:13 UTC --- typedef struct { unsigned long long w[4]; } UINT256; static void add256 (UINT256 x, UINT256 y, UINT256 * pz) { UINT256 z; z.w[0] = x.w[0] + y.w[0]; z.w[1] = x.w[1] + y.w[1]; z.w[2] = x.w[2] + y.w[2]; z.w[3] = x.w[3] + y.w[3]; *pz = z; } static inline void bid128_ext_fma () { UINT256 C4; UINT256 R256; add256 (C4, R256, &R256); nr_digits256 (R256); } void __bid128_fma () { bid128_ext_fma (); } ICEs at -O2 -g -m32 with the extra checking.