Fix the constant encoding in data transfer instructions on ARM
https://bugs.webkit.org/show_bug.cgi?id=42166
Reviewed by Gavin Barraclough.
The getImm function is designed to produce modified immediate constant
for data processing instructions. It should not be used to encode
any constant for data transfer. In the current situation there is no
way to use any immediate constant for data transfer. So, the moveImm
function is the desired method to pass the offset value to the data
transfer instructions.
Reported by Jacob Bramley.
* assembler/ARMAssembler.cpp:
(JSC::ARMAssembler::dataTransfer32):
* assembler/MacroAssemblerARM.h:
(JSC::MacroAssemblerARM::call32):
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@63228 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/JavaScriptCore/assembler/MacroAssemblerARM.h b/JavaScriptCore/assembler/MacroAssemblerARM.h
index 1c64071..bb1a6da 100644
--- a/JavaScriptCore/assembler/MacroAssemblerARM.h
+++ b/JavaScriptCore/assembler/MacroAssemblerARM.h
@@ -956,9 +956,9 @@
prepareCall();
m_assembler.dtr_u(true, targetReg, tmpReg, offset & 0xfff);
} else {
- ARMWord reg = m_assembler.getImm(offset, tmpReg);
+ m_assembler.moveImm(offset, tmpReg);
prepareCall();
- m_assembler.dtr_ur(true, targetReg, base, reg);
+ m_assembler.dtr_ur(true, targetReg, base, tmpReg);
}
} else {
offset = -offset;
@@ -970,9 +970,9 @@
prepareCall();
m_assembler.dtr_d(true, targetReg, tmpReg, offset & 0xfff);
} else {
- ARMWord reg = m_assembler.getImm(offset, tmpReg);
+ m_assembler.moveImm(offset, tmpReg);
prepareCall();
- m_assembler.dtr_dr(true, targetReg, base, reg);
+ m_assembler.dtr_dr(true, targetReg, base, tmpReg);
}
}
#if WTF_ARM_ARCH_AT_LEAST(5)