Index: runtime/vm/assembler_arm.cc |
=================================================================== |
--- runtime/vm/assembler_arm.cc (revision 44897) |
+++ runtime/vm/assembler_arm.cc (working copy) |
@@ -410,13 +410,8 @@ |
void Assembler::mla(Register rd, Register rn, |
Register rm, Register ra, Condition cond) { |
// rd <- ra + rn * rm. |
- if (TargetCPUFeatures::arm_version() == ARMv7) { |
- // Assembler registers rd, rn, rm, ra are encoded as rn, rm, rs, rd. |
- EmitMulOp(cond, B21, ra, rd, rn, rm); |
- } else { |
- mul(IP, rn, rm, cond); |
- add(rd, ra, Operand(IP), cond); |
- } |
+ // Assembler registers rd, rn, rm, ra are encoded as rn, rm, rs, rd. |
+ EmitMulOp(cond, B21, ra, rd, rn, rm); |
} |
@@ -442,23 +437,13 @@ |
void Assembler::umull(Register rd_lo, Register rd_hi, |
Register rn, Register rm, Condition cond) { |
- ASSERT(TargetCPUFeatures::arm_version() == ARMv7); |
// Assembler registers rd_lo, rd_hi, rn, rm are encoded as rd, rn, rm, rs. |
EmitMulOp(cond, B23, rd_lo, rd_hi, rn, rm); |
} |
-void Assembler::smlal(Register rd_lo, Register rd_hi, |
- Register rn, Register rm, Condition cond) { |
- ASSERT(TargetCPUFeatures::arm_version() == ARMv7); |
- // Assembler registers rd_lo, rd_hi, rn, rm are encoded as rd, rn, rm, rs. |
- EmitMulOp(cond, B23 | B22 | B21, rd_lo, rd_hi, rn, rm); |
-} |
- |
- |
void Assembler::umlal(Register rd_lo, Register rd_hi, |
Register rn, Register rm, Condition cond) { |
- ASSERT(TargetCPUFeatures::arm_version() == ARMv7); |
// Assembler registers rd_lo, rd_hi, rn, rm are encoded as rd, rn, rm, rs. |
EmitMulOp(cond, B23 | B21, rd_lo, rd_hi, rn, rm); |
} |
@@ -466,9 +451,15 @@ |
void Assembler::umaal(Register rd_lo, Register rd_hi, |
Register rn, Register rm, Condition cond) { |
- ASSERT(TargetCPUFeatures::arm_version() == ARMv7); |
- // Assembler registers rd_lo, rd_hi, rn, rm are encoded as rd, rn, rm, rs. |
- EmitMulOp(cond, B22, rd_lo, rd_hi, rn, rm); |
+ if (TargetCPUFeatures::arm_version() != ARMv5TE) { |
+ // Assembler registers rd_lo, rd_hi, rn, rm are encoded as rd, rn, rm, rs. |
+ EmitMulOp(cond, B22, rd_lo, rd_hi, rn, rm); |
+ } else { |
regis
2015/04/07 16:24:37
You should assert that none of the registers are I
zra
2015/04/07 17:34:43
Done.
|
+ mov(IP, Operand(0), cond); |
+ umlal(rd_lo, IP, rn, rm, cond); |
+ adds(rd_lo, rd_lo, Operand(rd_hi), cond); |
regis
2015/04/07 16:24:37
You cannot set the flags and expect the next instr
zra
2015/04/07 17:34:43
Whoops. Since we aren't using umaal conditionally
|
+ adc(rd_hi, IP, Operand(0), cond); |
+ } |
} |