Reviewers: dcarney,
Message:
Committed patchset #1 (id:1) manually as 24577 (tree was closed).
Description:
[arm] Drop SMMLS support.
Apparently
SMMLS r, b, c, a
computes
r = ((a << 32) - b * c) >> 32
while the documentation is kinda misleading and states that it should
compute
r = a - ((b * c) >> 32)
The actual behavior is kinda useless, so we drop the instruction again.
TEST=cctest,unittests
[email protected]
Committed: https://code.google.com/p/v8/source/detail?r=24577
Please review this at https://codereview.chromium.org/654653004/
Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Affected files (+0, -82 lines):
M src/arm/assembler-arm.h
M src/arm/assembler-arm.cc
M src/arm/disasm-arm.cc
M src/arm/simulator-arm.cc
M src/base/bits.h
M src/base/bits.cc
M test/cctest/test-assembler-arm.cc
M test/cctest/test-disasm-arm.cc
M test/unittests/base/bits-unittest.cc
Index: src/arm/assembler-arm.cc
diff --git a/src/arm/assembler-arm.cc b/src/arm/assembler-arm.cc
index
7e7456e78f90070cfe3fd52db5e9880f67fce342..45465119b35a6a7f945a2fb9c097596f5ac27ff9
100644
--- a/src/arm/assembler-arm.cc
+++ b/src/arm/assembler-arm.cc
@@ -1587,14 +1587,6 @@ void Assembler::smmla(Register dst, Register src1,
Register src2, Register srcA,
}
-void Assembler::smmls(Register dst, Register src1, Register src2, Register
srcA,
- Condition cond) {
- DCHECK(!dst.is(pc) && !src1.is(pc) && !src2.is(pc) && !srcA.is(pc));
- emit(cond | B26 | B25 | B24 | B22 | B20 | dst.code() * B16 |
- srcA.code() * B12 | src2.code() * B8 | B7 | B6 | B4 | src1.code());
-}
-
-
void Assembler::smmul(Register dst, Register src1, Register src2,
Condition cond) {
DCHECK(!dst.is(pc) && !src1.is(pc) && !src2.is(pc));
Index: src/arm/assembler-arm.h
diff --git a/src/arm/assembler-arm.h b/src/arm/assembler-arm.h
index
a87873d84650408b8e749ca9a497386b0b81c0bc..f78cc50b38f9e7d374057619e4b2f72df1c8caf6
100644
--- a/src/arm/assembler-arm.h
+++ b/src/arm/assembler-arm.h
@@ -978,9 +978,6 @@ class Assembler : public AssemblerBase {
void smmla(Register dst, Register src1, Register src2, Register srcA,
Condition cond = al);
- void smmls(Register dst, Register src1, Register src2, Register srcA,
- Condition cond = al);
-
void smmul(Register dst, Register src1, Register src2, Condition cond =
al);
void smlal(Register dstL, Register dstH, Register src1, Register src2,
Index: src/arm/disasm-arm.cc
diff --git a/src/arm/disasm-arm.cc b/src/arm/disasm-arm.cc
index
deaf552acc7e5c3388cd62c4b3f8d917ebca1699..2af6112a8170c683e48bb1c09ca742236470e8ad
100644
--- a/src/arm/disasm-arm.cc
+++ b/src/arm/disasm-arm.cc
@@ -1097,11 +1097,6 @@ void Decoder::DecodeType3(Instruction* instr) {
}
case db_x: {
if (instr->Bits(22, 20) == 0x5) {
- if (instr->Bits(7, 4) == 0xd) {
- // SMMLS (in V8 notation matching ARM ISA format)
- Format(instr, "smmls'cond 'rn, 'rm, 'rs, 'rd");
- break;
- }
if (instr->Bits(7, 4) == 0x1) {
if (instr->Bits(15, 12) == 0xF) {
Format(instr, "smmul'cond 'rn, 'rm, 'rs");
Index: src/arm/simulator-arm.cc
diff --git a/src/arm/simulator-arm.cc b/src/arm/simulator-arm.cc
index
df067656732c343dad9b31e70b9eee616797bed1..5105f1edb80daa4f964edefc931f881edd17ad41
100644
--- a/src/arm/simulator-arm.cc
+++ b/src/arm/simulator-arm.cc
@@ -2711,19 +2711,6 @@ void Simulator::DecodeType3(Instruction* instr) {
}
case db_x: {
if (instr->Bits(22, 20) == 0x5) {
- if (instr->Bits(7, 4) == 0xd) {
- // SMMLS (in V8 notation matching ARM ISA format)
- // Format(instr, "smmls'cond 'rn, 'rm, 'rs, 'rd");
- int rm = instr->RmValue();
- int32_t rm_val = get_register(rm);
- int rs = instr->RsValue();
- int32_t rs_val = get_register(rs);
- int rd = instr->RdValue();
- int32_t rd_val = get_register(rd);
- rn_val = base::bits::SignedMulHighAndSub32(rm_val, rs_val,
rd_val);
- set_register(rn, rn_val);
- return;
- }
if (instr->Bits(7, 4) == 0x1) {
int rm = instr->RmValue();
int32_t rm_val = get_register(rm);
Index: src/base/bits.cc
diff --git a/src/base/bits.cc b/src/base/bits.cc
index
7a3fb6d33159dfd64c88fb16683aabf2248f05a8..2818b939aa94bb1c43761ef7add1386b0050c214
100644
--- a/src/base/bits.cc
+++ b/src/base/bits.cc
@@ -32,13 +32,6 @@ int32_t SignedMulHighAndAdd32(int32_t lhs, int32_t rhs,
int32_t acc) {
bit_cast<uint32_t>(SignedMulHigh32(lhs, rhs)));
}
-
-int32_t SignedMulHighAndSub32(int32_t lhs, int32_t rhs, int32_t acc) {
- return bit_cast<int32_t>(bit_cast<uint32_t>(acc) -
- bit_cast<uint32_t>(SignedMulHigh32(lhs, rhs)));
-}
-
-
} // namespace bits
} // namespace base
} // namespace v8
Index: src/base/bits.h
diff --git a/src/base/bits.h b/src/base/bits.h
index
e094882431c46fe4f11ad4b143af2149daa9cf9a..5e0e248a02ba082535543f6cb8ad1df5ba65f161
100644
--- a/src/base/bits.h
+++ b/src/base/bits.h
@@ -199,12 +199,6 @@ int32_t SignedMulHigh32(int32_t lhs, int32_t rhs);
// adds the accumulate value |acc|.
int32_t SignedMulHighAndAdd32(int32_t lhs, int32_t rhs, int32_t acc);
-
-// SignedMulHighAndAdd32(lhs, rhs, acc) multiplies two signed 32-bit values
-// |lhs| and |rhs|, extracts the most significant 32 bits of the result,
and
-// subtracts it from the accumulate value |acc|.
-int32_t SignedMulHighAndSub32(int32_t lhs, int32_t rhs, int32_t acc);
-
} // namespace bits
} // namespace base
} // namespace v8
Index: test/cctest/test-assembler-arm.cc
diff --git a/test/cctest/test-assembler-arm.cc
b/test/cctest/test-assembler-arm.cc
index
f19d68cb5efe2103a57f6543119d32ec9bba53cb..8c1a4d9410d9927dffac56645c3263ec39026eea
100644
--- a/test/cctest/test-assembler-arm.cc
+++ b/test/cctest/test-assembler-arm.cc
@@ -1524,32 +1524,6 @@ TEST(smmla) {
}
-TEST(smmls) {
- CcTest::InitializeVM();
- Isolate* const isolate = CcTest::i_isolate();
- HandleScope scope(isolate);
- RandomNumberGenerator* const rng = isolate->random_number_generator();
- Assembler assm(isolate, nullptr, 0);
- __ smmls(r1, r1, r2, r3);
- __ str(r1, MemOperand(r0));
- __ bx(lr);
- CodeDesc desc;
- assm.GetCode(&desc);
- Handle<Code> code = isolate->factory()->NewCode(
- desc, Code::ComputeFlags(Code::STUB), Handle<Code>());
-#ifdef OBJECT_PRINT
- code->Print(std::cout);
-#endif
- F3 f = FUNCTION_CAST<F3>(code->entry());
- for (size_t i = 0; i < 128; ++i) {
- int32_t r, x = rng->NextInt(), y = rng->NextInt(), z = rng->NextInt();
- Object* dummy = CALL_GENERATED_CODE(f, &r, x, y, z, 0);
- CHECK_EQ(bits::SignedMulHighAndSub32(x, y, z), r);
- USE(dummy);
- }
-}
-
-
TEST(smmul) {
CcTest::InitializeVM();
Isolate* const isolate = CcTest::i_isolate();
Index: test/cctest/test-disasm-arm.cc
diff --git a/test/cctest/test-disasm-arm.cc b/test/cctest/test-disasm-arm.cc
index
3de35509346ce4679eaf0da9ceb69b6a32a47cd5..1fabdc2adc4812c10346dad439193a66de958cd0
100644
--- a/test/cctest/test-disasm-arm.cc
+++ b/test/cctest/test-disasm-arm.cc
@@ -420,9 +420,6 @@ TEST(Type3) {
"e6cf3474 uxtb16 r3, r4, ror #8");
}
- COMPARE(smmls(r0, r1, r2, r3), "e75032d1 smmls r0, r1, r2, r3");
- COMPARE(smmls(r10, r9, r8, r7), "e75a78d9 smmls r10, r9, r8, r7");
-
COMPARE(smmla(r0, r1, r2, r3), "e7503211 smmla r0, r1, r2, r3");
COMPARE(smmla(r10, r9, r8, r7), "e75a7819 smmla r10, r9, r8, r7");
Index: test/unittests/base/bits-unittest.cc
diff --git a/test/unittests/base/bits-unittest.cc
b/test/unittests/base/bits-unittest.cc
index
65b0a76a013a00137c05d71f54003b7e410c3e4c..be41007f691128a0838b05847e5dbe3ac34c88d5
100644
--- a/test/unittests/base/bits-unittest.cc
+++ b/test/unittests/base/bits-unittest.cc
@@ -224,17 +224,6 @@ TEST(Bits, SignedMulHighAndAdd32) {
}
}
-
-TEST(Bits, SignedMulHighAndSub32) {
- TRACED_FORRANGE(int32_t, i, 1, 50) {
- EXPECT_EQ(i, SignedMulHighAndSub32(0, 0, i));
- TRACED_FORRANGE(int32_t, j, 1, i) {
- EXPECT_EQ(i, SignedMulHighAndSub32(j, j, i));
- }
- EXPECT_EQ(i - 1, SignedMulHighAndSub32(1024 * 1024 * 1024, 4, i));
- }
-}
-
} // namespace bits
} // namespace base
} // namespace v8
--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
---
You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.