target/arm: Move general-use constant expanders up in translate.c

The constant-expander functions like negate, plus_2, etc, are
generally useful; move them up in translate.c so we can use them in
the VFP/Neon decoders as well as in the A32/T32/T16 decoders.

Backports f7ed0c9433e7c5c157d2e6235eb5c8b93234a71a
This commit is contained in:
Peter Maydell 2021-03-03 18:29:29 -05:00 committed by Lioncash
parent a72c744370
commit edae732810

View file

@ -103,6 +103,30 @@ static void arm_gen_condlabel(DisasContext *s)
} }
} }
/*
* Constant expanders for the decoders.
*/
static int negate(DisasContext *s, int x)
{
return -x;
}
static int plus_2(DisasContext *s, int x)
{
return x + 2;
}
static int times_2(DisasContext *s, int x)
{
return x * 2;
}
static int times_4(DisasContext *s, int x)
{
return x * 4;
}
/* Flags for the disas_set_da_iss info argument: /* Flags for the disas_set_da_iss info argument:
* lower bits hold the Rt register number, higher bits are flags. * lower bits hold the Rt register number, higher bits are flags.
*/ */
@ -5257,29 +5281,9 @@ static void arm_skip_unless(DisasContext *s, uint32_t cond)
} }
/* /*
* Constant expanders for the decoders. * Constant expanders used by T16/T32 decode
*/ */
static int negate(DisasContext *s, int x)
{
return -x;
}
static int plus_2(DisasContext *s, int x)
{
return x + 2;
}
static int times_2(DisasContext *s, int x)
{
return x * 2;
}
static int times_4(DisasContext *s, int x)
{
return x * 4;
}
/* Return only the rotation part of T32ExpandImm. */ /* Return only the rotation part of T32ExpandImm. */
static int t32_expandimm_rot(DisasContext *s, int x) static int t32_expandimm_rot(DisasContext *s, int x)
{ {