tcg-aarch64: Simplify tcg_out_ldst_9 encoding
At first glance the code appears to be using 1's compliment encoding, a-la AArch32. Except that the constant is "off", creating a complicated split field 2's compliment encoding. Much clearer to just use a normal mask and shift. Reviewed-by: Claudio Fontana <claudio.fontana@huawei.com> Signed-off-by: Richard Henderson <rth@twiddle.net>
This commit is contained in:
parent
017a86f7ad
commit
523fdc08cc
@ -305,18 +305,8 @@ static inline void tcg_out_ldst_9(TCGContext *s,
|
|||||||
TCGReg rd, TCGReg rn, tcg_target_long offset)
|
TCGReg rd, TCGReg rn, tcg_target_long offset)
|
||||||
{
|
{
|
||||||
/* use LDUR with BASE register with 9bit signed unscaled offset */
|
/* use LDUR with BASE register with 9bit signed unscaled offset */
|
||||||
unsigned int mod, off;
|
tcg_out32(s, op_data << 24 | op_type << 20
|
||||||
|
| (offset & 0x1ff) << 12 | rn << 5 | rd);
|
||||||
if (offset < 0) {
|
|
||||||
off = (256 + offset);
|
|
||||||
mod = 0x1;
|
|
||||||
} else {
|
|
||||||
off = offset;
|
|
||||||
mod = 0x0;
|
|
||||||
}
|
|
||||||
|
|
||||||
mod |= op_type;
|
|
||||||
tcg_out32(s, op_data << 24 | mod << 20 | off << 12 | rn << 5 | rd);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* tcg_out_ldst_12 expects a scaled unsigned immediate offset */
|
/* tcg_out_ldst_12 expects a scaled unsigned immediate offset */
|
||||||
|
Loading…
Reference in New Issue
Block a user