In addition to James's comments: Tamar Christina <tamar.christ...@arm.com> writes: > + [(const_int 0)] > + "{
"{ ... }" isn't necessary, we can just use { ... } > + unsigned HOST_WIDE_INT ival; > + if (!aarch64_reinterpret_float_as_int (operands[1], &ival)) > + FAIL; > + > + rtx tmp = gen_reg_rtx (SImode); > + aarch64_expand_mov_immediate (tmp, gen_int_mode (ival, SImode)); > + tmp = simplify_gen_subreg (HImode, tmp, SImode, 0); This looks wrong for big-endian, and... > + emit_move_insn (operands[0], gen_lowpart (HFmode, tmp)); ...either it should be OK to go directly from tmp to the HFmode lowpart, or we should move the HImode temporary into a fresh REG. Current validate_subreg seems to suggest that we need the latter. Isn't it possible to use a HImode move immediate instead of an SImode one? Thanks, Richard