| 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 a8031a257079eb8c10c14ba3c54b9c5ff5d65c7c..1b74c04737739233c182868deeec2b2dddaedfb8 100644 | 
| --- a/test/cctest/compiler/test-run-machops.cc | 
| +++ b/test/cctest/compiler/test-run-machops.cc | 
| @@ -28,6 +28,39 @@ TEST(RunInt32Add) { | 
| CHECK_EQ(1, m.Call()); | 
| } | 
|  | 
| +static int RunInt32AddShift(bool is_left, int32_t add_left, int32_t add_right, | 
| +                            int32_t shift_left, int32_t shit_right) { | 
| +  RawMachineAssemblerTester<int32_t> m; | 
| +  Node* shift = | 
| +      m.Word32Shl(m.Int32Constant(shift_left), m.Int32Constant(shit_right)); | 
| +  Node* add = m.Int32Add(m.Int32Constant(add_left), m.Int32Constant(add_right)); | 
| +  Node* lsa = is_left ? m.Int32Add(shift, add) : m.Int32Add(add, shift); | 
| +  m.Return(lsa); | 
| +  return m.Call(); | 
| +} | 
| + | 
| +TEST(RunInt32AddShift) { | 
| +  struct Test_case { | 
| +    int32_t add_left, add_right, shift_left, shit_right, expected; | 
| +  }; | 
| + | 
| +  Test_case tc[] = { | 
| +      {20, 22, 4, 2, 58}, | 
| +      {20, 22, 4, 1, 50}, | 
| +      {20, 22, 1, 6, 106}, | 
| +      {INT_MAX - 2, 1, 1, 1, INT_MIN},  // INT_MAX - 2 + 1 + (1 << 1), overflow. | 
| +  }; | 
| +  const size_t tc_size = sizeof(tc) / sizeof(Test_case); | 
| + | 
| +  for (size_t i = 0; i < tc_size; ++i) { | 
| +    CHECK_EQ(tc[i].expected, | 
| +             RunInt32AddShift(false, tc[i].add_left, tc[i].add_right, | 
| +                              tc[i].shift_left, tc[i].shit_right)); | 
| +    CHECK_EQ(tc[i].expected, | 
| +             RunInt32AddShift(true, tc[i].add_left, tc[i].add_right, | 
| +                              tc[i].shift_left, tc[i].shit_right)); | 
| +  } | 
| +} | 
|  | 
| TEST(RunWord32ReverseBits) { | 
| BufferedRawMachineAssemblerTester<uint32_t> m(MachineType::Uint32()); | 
| @@ -636,6 +669,38 @@ TEST(RunInt64SubWithOverflowInBranchP) { | 
| } | 
| } | 
|  | 
| +static int64_t RunInt64AddShift(bool is_left, int64_t add_left, | 
| +                                int64_t add_right, int64_t shift_left, | 
| +                                int64_t shit_right) { | 
| +  RawMachineAssemblerTester<int64_t> m; | 
| +  Node* shift = m.Word64Shl(m.Int64Constant(4), m.Int64Constant(2)); | 
| +  Node* add = m.Int64Add(m.Int64Constant(20), m.Int64Constant(22)); | 
| +  Node* dlsa = is_left ? m.Int64Add(shift, add) : m.Int64Add(add, shift); | 
| +  m.Return(dlsa); | 
| +  return m.Call(); | 
| +} | 
| + | 
| +TEST(RunInt64AddShift) { | 
| +  struct Test_case { | 
| +    int64_t add_left, add_right, shift_left, shit_right, expected; | 
| +  }; | 
| + | 
| +  Test_case tc[] = { | 
| +      {20, 22, 4, 2, 58}, | 
| +      {20, 22, 4, 1, 50}, | 
| +      {20, 22, 1, 6, 106}, | 
| +      {INT64_MAX - 2, 1, 1, 1, | 
| +       INT64_MIN},  // INT64_MAX - 2 + 1 + (1 << 1), overflow. | 
| +  }; | 
| +  const size_t tc_size = sizeof(tc) / sizeof(Test_case); | 
| + | 
| +  for (size_t i = 0; i < tc_size; ++i) { | 
| +    CHECK_EQ(58, RunInt64AddShift(false, tc[i].add_left, tc[i].add_right, | 
| +                                  tc[i].shift_left, tc[i].shit_right)); | 
| +    CHECK_EQ(58, RunInt64AddShift(true, tc[i].add_left, tc[i].add_right, | 
| +                                  tc[i].shift_left, tc[i].shit_right)); | 
| +  } | 
| +} | 
|  | 
| // TODO(titzer): add tests that run 64-bit integer operations. | 
| #endif  // V8_TARGET_ARCH_64_BIT | 
|  |