On 18/10/2019 14:18, Christophe Lyon wrote:
+thumb1_gen_const_int (rtx op0, HOST_WIDE_INT op1)
+{
+ bool mov_done_p = false;
+ int i;
+
+ /* Emit upper 3 bytes if needed. */
+ for (i = 0; i < 3; i++)
+ {
+ int byte = (op1 >> (8 * (3 - i))) & 0xff;
+
+ if (byte)
+ {
+ emit_set_insn (op0, mov_done_p
+ ? gen_rtx_PLUS (SImode,op0, GEN_INT (byte))
+ : GEN_INT (byte));
+ mov_done_p = true;
+ }
+
+ if (mov_done_p)
+ emit_set_insn (op0, gen_rtx_ASHIFT (SImode, op0, GEN_INT (8)));
+ }
+
+ /* Emit lower byte if needed. */
+ if (!mov_done_p)
+ emit_set_insn (op0, GEN_INT (op1 & 0xff));
+ else if (op1 & 0xff)
+ emit_set_insn (op0, gen_rtx_PLUS (SImode, op0, GEN_INT (op1 & 0xff)));
+}
+
What about Armv8-m.baseline, which has movw/movt?
R.