| Index: test/cctest/compiler/test-run-machops.cc
|
| diff --git a/test/cctest/compiler/test-run-machops.cc b/test/cctest/compiler/test-run-machops.cc
|
| index ea3ccdd46a73000989b6083a1dc2323b7490cbcd..6935771c2320711c84eb8697c4ba167bcbf94c5f 100644
|
| --- a/test/cctest/compiler/test-run-machops.cc
|
| +++ b/test/cctest/compiler/test-run-machops.cc
|
| @@ -556,6 +556,142 @@ TEST(RunInt32AddP) {
|
| }
|
|
|
|
|
| +TEST(RunInt32AddAndWord32EqualP) {
|
| + {
|
| + RawMachineAssemblerTester<int32_t> m(kMachInt32, kMachInt32, kMachInt32);
|
| + m.Return(m.Int32Add(m.Parameter(0),
|
| + m.Word32Equal(m.Parameter(1), m.Parameter(2))));
|
| + FOR_INT32_INPUTS(i) {
|
| + FOR_INT32_INPUTS(j) {
|
| + FOR_INT32_INPUTS(k) {
|
| + // Use uint32_t because signed overflow is UB in C.
|
| + int32_t const expected =
|
| + bit_cast<int32_t>(bit_cast<uint32_t>(*i) + (*j == *k));
|
| + CHECK_EQ(expected, m.Call(*i, *j, *k));
|
| + }
|
| + }
|
| + }
|
| + }
|
| + {
|
| + RawMachineAssemblerTester<int32_t> m(kMachInt32, kMachInt32, kMachInt32);
|
| + m.Return(m.Int32Add(m.Word32Equal(m.Parameter(0), m.Parameter(1)),
|
| + m.Parameter(2)));
|
| + FOR_INT32_INPUTS(i) {
|
| + FOR_INT32_INPUTS(j) {
|
| + FOR_INT32_INPUTS(k) {
|
| + // Use uint32_t because signed overflow is UB in C.
|
| + int32_t const expected =
|
| + bit_cast<int32_t>((*i == *j) + bit_cast<uint32_t>(*k));
|
| + CHECK_EQ(expected, m.Call(*i, *j, *k));
|
| + }
|
| + }
|
| + }
|
| + }
|
| +}
|
| +
|
| +
|
| +TEST(RunInt32AddAndWord32EqualImm) {
|
| + {
|
| + FOR_INT32_INPUTS(i) {
|
| + RawMachineAssemblerTester<int32_t> m(kMachInt32, kMachInt32);
|
| + m.Return(m.Int32Add(m.Int32Constant(*i),
|
| + m.Word32Equal(m.Parameter(0), m.Parameter(1))));
|
| + FOR_INT32_INPUTS(j) {
|
| + FOR_INT32_INPUTS(k) {
|
| + // Use uint32_t because signed overflow is UB in C.
|
| + int32_t const expected =
|
| + bit_cast<int32_t>(bit_cast<uint32_t>(*i) + (*j == *k));
|
| + CHECK_EQ(expected, m.Call(*j, *k));
|
| + }
|
| + }
|
| + }
|
| + }
|
| + {
|
| + FOR_INT32_INPUTS(i) {
|
| + RawMachineAssemblerTester<int32_t> m(kMachInt32, kMachInt32);
|
| + m.Return(m.Int32Add(m.Word32Equal(m.Int32Constant(*i), m.Parameter(0)),
|
| + m.Parameter(1)));
|
| + FOR_INT32_INPUTS(j) {
|
| + FOR_INT32_INPUTS(k) {
|
| + // Use uint32_t because signed overflow is UB in C.
|
| + int32_t const expected =
|
| + bit_cast<int32_t>((*i == *j) + bit_cast<uint32_t>(*k));
|
| + CHECK_EQ(expected, m.Call(*j, *k));
|
| + }
|
| + }
|
| + }
|
| + }
|
| +}
|
| +
|
| +
|
| +TEST(RunInt32AddAndWord32NotEqualP) {
|
| + {
|
| + RawMachineAssemblerTester<int32_t> m(kMachInt32, kMachInt32, kMachInt32);
|
| + m.Return(m.Int32Add(m.Parameter(0),
|
| + m.Word32NotEqual(m.Parameter(1), m.Parameter(2))));
|
| + FOR_INT32_INPUTS(i) {
|
| + FOR_INT32_INPUTS(j) {
|
| + FOR_INT32_INPUTS(k) {
|
| + // Use uint32_t because signed overflow is UB in C.
|
| + int32_t const expected =
|
| + bit_cast<int32_t>(bit_cast<uint32_t>(*i) + (*j != *k));
|
| + CHECK_EQ(expected, m.Call(*i, *j, *k));
|
| + }
|
| + }
|
| + }
|
| + }
|
| + {
|
| + RawMachineAssemblerTester<int32_t> m(kMachInt32, kMachInt32, kMachInt32);
|
| + m.Return(m.Int32Add(m.Word32NotEqual(m.Parameter(0), m.Parameter(1)),
|
| + m.Parameter(2)));
|
| + FOR_INT32_INPUTS(i) {
|
| + FOR_INT32_INPUTS(j) {
|
| + FOR_INT32_INPUTS(k) {
|
| + // Use uint32_t because signed overflow is UB in C.
|
| + int32_t const expected =
|
| + bit_cast<int32_t>((*i != *j) + bit_cast<uint32_t>(*k));
|
| + CHECK_EQ(expected, m.Call(*i, *j, *k));
|
| + }
|
| + }
|
| + }
|
| + }
|
| +}
|
| +
|
| +
|
| +TEST(RunInt32AddAndWord32NotEqualImm) {
|
| + {
|
| + FOR_INT32_INPUTS(i) {
|
| + RawMachineAssemblerTester<int32_t> m(kMachInt32, kMachInt32);
|
| + m.Return(m.Int32Add(m.Int32Constant(*i),
|
| + m.Word32NotEqual(m.Parameter(0), m.Parameter(1))));
|
| + FOR_INT32_INPUTS(j) {
|
| + FOR_INT32_INPUTS(k) {
|
| + // Use uint32_t because signed overflow is UB in C.
|
| + int32_t const expected =
|
| + bit_cast<int32_t>(bit_cast<uint32_t>(*i) + (*j != *k));
|
| + CHECK_EQ(expected, m.Call(*j, *k));
|
| + }
|
| + }
|
| + }
|
| + }
|
| + {
|
| + FOR_INT32_INPUTS(i) {
|
| + RawMachineAssemblerTester<int32_t> m(kMachInt32, kMachInt32);
|
| + m.Return(m.Int32Add(m.Word32NotEqual(m.Int32Constant(*i), m.Parameter(0)),
|
| + m.Parameter(1)));
|
| + FOR_INT32_INPUTS(j) {
|
| + FOR_INT32_INPUTS(k) {
|
| + // Use uint32_t because signed overflow is UB in C.
|
| + int32_t const expected =
|
| + bit_cast<int32_t>((*i != *j) + bit_cast<uint32_t>(*k));
|
| + CHECK_EQ(expected, m.Call(*j, *k));
|
| + }
|
| + }
|
| + }
|
| + }
|
| +}
|
| +
|
| +
|
| TEST(RunInt32AddAndWord32SarP) {
|
| {
|
| RawMachineAssemblerTester<int32_t> m(kMachUint32, kMachInt32, kMachUint32);
|
|
|