summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMason Reed <mason@vector35.com>2024-08-26 17:12:36 -0400
committermason <35282038+emesare@users.noreply.github.com>2024-08-27 11:16:59 -0700
commit6914de6113448a23a905cde761dfc83ed7993a25 (patch)
tree5cd9e9e5bc365bac5a37eec96bc36c7db4d0f5de
parent0214ae089090165217e7c1a55de5e259cf2d9f0c (diff)
Use split registers for VMOV
-rw-r--r--arch/armv7/thumb2_disasm/il_thumb2.cpp11
1 files changed, 5 insertions, 6 deletions
diff --git a/arch/armv7/thumb2_disasm/il_thumb2.cpp b/arch/armv7/thumb2_disasm/il_thumb2.cpp
index 07f02294..3ca95813 100644
--- a/arch/armv7/thumb2_disasm/il_thumb2.cpp
+++ b/arch/armv7/thumb2_disasm/il_thumb2.cpp
@@ -1615,15 +1615,14 @@ bool GetLowLevelILForNEONInstruction(Architecture* arch, LowLevelILFunction& il,
if (instr->format->operands[2].type == OPERAND_FORMAT_REG_FP)
{
// r3:r2 <- d12
- // The set reg will constrain the 8 byte to 4 byte _probably_.
- il.AddInstruction(WriteILOperand(il, instr, 0, ReadILOperand(il, instr, 2)));
- il.AddInstruction(WriteILOperand(il, instr, 1, il.LogicalShiftRight(4, ReadILOperand(il, instr, 2), il.Const(1, 32))));
+ il.SetRegisterSplit(4, ReadILOperand(il, instr, 0), ReadILOperand(il, instr, 1),
+ ReadILOperand(il, instr, 3));
} else
{
// d9 <- r1:r0
- il.AddInstruction(WriteILOperand(il, instr, 0, il.Or(4,
- il.ShiftLeft(4, ReadILOperand(il, instr, 2), il.Const(1, 32)),
- ReadILOperand(il, instr, 1))));
+ il.AddInstruction(WriteILOperand(il, instr, 0,
+ il.RegisterSplit(8, ReadILOperand(il, instr, 1),
+ ReadILOperand(il, instr, 2))));
}
}
else