mirror of
https://github.com/yuzu-emu/unicorn.git
synced 2025-08-04 07:01:01 +00:00
target/arm: Convert T32 ADDW/SUBW
Backports commit 145952e87fb86aaa9434d768c31eedbd323f7157 from qemu
This commit is contained in:
parent
7b9025910d
commit
d5d98450f3
|
@ -30,6 +30,7 @@
|
||||||
&rrrr rd rn rm ra
|
&rrrr rd rn rm ra
|
||||||
&rrr rd rn rm
|
&rrr rd rn rm
|
||||||
&rr rd rm
|
&rr rd rm
|
||||||
|
&ri rd imm
|
||||||
&r rm
|
&r rm
|
||||||
&i imm
|
&i imm
|
||||||
&msr_reg rn r mask
|
&msr_reg rn r mask
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
&rrrr !extern rd rn rm ra
|
&rrrr !extern rd rn rm ra
|
||||||
&rrr !extern rd rn rm
|
&rrr !extern rd rn rm
|
||||||
&rr !extern rd rm
|
&rr !extern rd rm
|
||||||
|
&ri !extern rd imm
|
||||||
&r !extern rm
|
&r !extern rm
|
||||||
&i !extern imm
|
&i !extern imm
|
||||||
&msr_reg !extern rn r mask
|
&msr_reg !extern rn r mask
|
||||||
|
@ -121,6 +122,24 @@ SBC_rri 1111 0.0 1011 . .... 0 ... .... ........ @s_rri_rot
|
||||||
}
|
}
|
||||||
RSB_rri 1111 0.0 1110 . .... 0 ... .... ........ @s_rri_rot
|
RSB_rri 1111 0.0 1110 . .... 0 ... .... ........ @s_rri_rot
|
||||||
|
|
||||||
|
# Data processing (plain binary immediate)
|
||||||
|
|
||||||
|
%imm12_26_12_0 26:1 12:3 0:8
|
||||||
|
%neg12_26_12_0 26:1 12:3 0:8 !function=negate
|
||||||
|
@s0_rri_12 .... ... .... . rn:4 . ... rd:4 ........ \
|
||||||
|
&s_rri_rot imm=%imm12_26_12_0 rot=0 s=0
|
||||||
|
|
||||||
|
{
|
||||||
|
ADR 1111 0.1 0000 0 1111 0 ... rd:4 ........ \
|
||||||
|
&ri imm=%imm12_26_12_0
|
||||||
|
ADD_rri 1111 0.1 0000 0 .... 0 ... .... ........ @s0_rri_12
|
||||||
|
}
|
||||||
|
{
|
||||||
|
ADR 1111 0.1 0101 0 1111 0 ... rd:4 ........ \
|
||||||
|
&ri imm=%neg12_26_12_0
|
||||||
|
SUB_rri 1111 0.1 0101 0 .... 0 ... .... ........ @s0_rri_12
|
||||||
|
}
|
||||||
|
|
||||||
# Multiply and multiply accumulate
|
# Multiply and multiply accumulate
|
||||||
|
|
||||||
@s0_rnadm .... .... .... rn:4 ra:4 rd:4 .... rm:4 &s_rrrr s=0
|
@s0_rnadm .... .... .... rn:4 ra:4 rd:4 .... rm:4 &s_rrrr s=0
|
||||||
|
|
|
@ -7802,6 +7802,11 @@ static void arm_skip_unless(DisasContext *s, uint32_t cond)
|
||||||
* Constant expanders for the decoders.
|
* Constant expanders for the decoders.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
static int negate(DisasContext *s, int x)
|
||||||
|
{
|
||||||
|
return -x;
|
||||||
|
}
|
||||||
|
|
||||||
static int times_2(DisasContext *s, int x)
|
static int times_2(DisasContext *s, int x)
|
||||||
{
|
{
|
||||||
return x * 2;
|
return x * 2;
|
||||||
|
@ -8219,6 +8224,12 @@ static bool trans_ORN_rri(DisasContext *s, arg_s_rri_rot *a)
|
||||||
#undef DO_ANY2
|
#undef DO_ANY2
|
||||||
#undef DO_CMP2
|
#undef DO_CMP2
|
||||||
|
|
||||||
|
static bool trans_ADR(DisasContext *s, arg_ri *a)
|
||||||
|
{
|
||||||
|
store_reg_bx(s, a->rd, add_reg_for_lit(s, 15, a->imm));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Multiply and multiply accumulate
|
* Multiply and multiply accumulate
|
||||||
*/
|
*/
|
||||||
|
@ -10959,17 +10970,8 @@ static void disas_thumb2_insn(DisasContext *s, uint32_t insn)
|
||||||
}
|
}
|
||||||
store_reg(s, rd, tmp);
|
store_reg(s, rd, tmp);
|
||||||
} else {
|
} else {
|
||||||
/* Add/sub 12-bit immediate. */
|
/* Add/sub 12-bit immediate, in decodetree */
|
||||||
if (insn & (1 << 23)) {
|
goto illegal_op;
|
||||||
imm = -imm;
|
|
||||||
}
|
|
||||||
tmp = add_reg_for_lit(s, rn, imm);
|
|
||||||
if (rn == 13 && rd == 13) {
|
|
||||||
/* ADD SP, SP, imm or SUB SP, SP, imm */
|
|
||||||
store_sp_checked(s, tmp);
|
|
||||||
} else {
|
|
||||||
store_reg(s, rd, tmp);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Reference in a new issue