aboutsummaryrefslogtreecommitdiffstats
path: root/src/3rdparty
diff options
context:
space:
mode:
authorErik Verbruggen <erik.verbruggen@me.com>2013-10-18 17:02:57 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-12-04 16:42:46 +0100
commit7e3578728edec27301b71f5ab5d7b43874ae35a2 (patch)
tree25b66bfd38acd67a2ad032699edf9d00864c50c3 /src/3rdparty
parent102f57376f5d1ace2e9a3e0ffa829a1bbc0d002c (diff)
V4 IR: reverse propagate int32 truncation.
Change-Id: I5cb0c7798d0e530f3137710bf0e723bd7b64dc89 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Diffstat (limited to 'src/3rdparty')
-rw-r--r--src/3rdparty/masm/assembler/MacroAssemblerARMv7.h10
-rw-r--r--src/3rdparty/masm/assembler/MacroAssemblerX86Common.h20
2 files changed, 30 insertions, 0 deletions
diff --git a/src/3rdparty/masm/assembler/MacroAssemblerARMv7.h b/src/3rdparty/masm/assembler/MacroAssemblerARMv7.h
index 61c13acd35..9a8dc1f358 100644
--- a/src/3rdparty/masm/assembler/MacroAssemblerARMv7.h
+++ b/src/3rdparty/masm/assembler/MacroAssemblerARMv7.h
@@ -177,6 +177,11 @@ public:
}
}
+ void add32(RegisterID op1, RegisterID op2, RegisterID dest)
+ {
+ m_assembler.add(dest, op1, op2);
+ }
+
void add32(TrustedImm32 imm, Address address)
{
load32(address, dataTempRegister);
@@ -310,6 +315,11 @@ public:
m_assembler.smull(dest, dataTempRegister, src, dataTempRegister);
}
+ void mul32(RegisterID op1, RegisterID op2, RegisterID dest)
+ {
+ m_assembler.smull(dest, dataTempRegister, op1, op2);
+ }
+
void neg32(RegisterID srcDest)
{
m_assembler.neg(srcDest, srcDest);
diff --git a/src/3rdparty/masm/assembler/MacroAssemblerX86Common.h b/src/3rdparty/masm/assembler/MacroAssemblerX86Common.h
index 520cf915fa..94771be6a7 100644
--- a/src/3rdparty/masm/assembler/MacroAssemblerX86Common.h
+++ b/src/3rdparty/masm/assembler/MacroAssemblerX86Common.h
@@ -146,6 +146,16 @@ public:
m_assembler.andl_rr(src, dest);
}
+ void add32(RegisterID op1, RegisterID op2, RegisterID dest)
+ {
+ if (op2 == dest) {
+ add32(op1, dest);
+ } else {
+ move(op1, dest);
+ add32(op2, dest);
+ }
+ }
+
void and32(TrustedImm32 imm, RegisterID dest)
{
m_assembler.andl_ir(imm.m_value, dest);
@@ -226,6 +236,16 @@ public:
m_assembler.imull_rr(src, dest);
}
+ void mul32(RegisterID op1, RegisterID op2, RegisterID dest)
+ {
+ if (op2 == dest) {
+ mul32(op1, dest);
+ } else {
+ move(op1, dest);
+ mul32(op2, dest);
+ }
+ }
+
void mul32(Address src, RegisterID dest)
{
m_assembler.imull_mr(src.offset, src.base, dest);