https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102211
--- Comment #1 from Hongtao.liu <crazylht at gmail dot com> --- But it's ok for float foo (float a, long b) { union{float a[2]; long b;}c; c.b = b; return c.a[0]; } foo: fmv.w.x fa0,a0 ret Which means movement between gpr and float reg is allowed.