| OLD | NEW | 
|     1 // Copyright 2014 the V8 project authors. All rights reserved. |     1 // Copyright 2014 the V8 project authors. All rights reserved. | 
|     2 // Use of this source code is governed by a BSD-style license that can be |     2 // Use of this source code is governed by a BSD-style license that can be | 
|     3 // found in the LICENSE file. |     3 // found in the LICENSE file. | 
|     4  |     4  | 
|     5 #include <functional> |     5 #include <functional> | 
|     6 #include <limits> |     6 #include <limits> | 
|     7  |     7  | 
|     8 #include "src/base/bits.h" |     8 #include "src/base/bits.h" | 
|     9 #include "src/compiler/generic-node-inl.h" |     9 #include "src/compiler/generic-node-inl.h" | 
|    10 #include "test/cctest/cctest.h" |    10 #include "test/cctest/cctest.h" | 
| (...skipping 538 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   549   FOR_INT32_INPUTS(i) { |   549   FOR_INT32_INPUTS(i) { | 
|   550     FOR_INT32_INPUTS(j) { |   550     FOR_INT32_INPUTS(j) { | 
|   551       // Use uint32_t because signed overflow is UB in C. |   551       // Use uint32_t because signed overflow is UB in C. | 
|   552       int expected = static_cast<int32_t>(*i + *j); |   552       int expected = static_cast<int32_t>(*i + *j); | 
|   553       CHECK_EQ(expected, bt.call(*i, *j)); |   553       CHECK_EQ(expected, bt.call(*i, *j)); | 
|   554     } |   554     } | 
|   555   } |   555   } | 
|   556 } |   556 } | 
|   557  |   557  | 
|   558  |   558  | 
 |   559 TEST(RunInt32AddAndWord32EqualP) { | 
 |   560   { | 
 |   561     RawMachineAssemblerTester<int32_t> m(kMachInt32, kMachInt32, kMachInt32); | 
 |   562     m.Return(m.Int32Add(m.Parameter(0), | 
 |   563                         m.Word32Equal(m.Parameter(1), m.Parameter(2)))); | 
 |   564     FOR_INT32_INPUTS(i) { | 
 |   565       FOR_INT32_INPUTS(j) { | 
 |   566         FOR_INT32_INPUTS(k) { | 
 |   567           // Use uint32_t because signed overflow is UB in C. | 
 |   568           int32_t const expected = | 
 |   569               bit_cast<int32_t>(bit_cast<uint32_t>(*i) + (*j == *k)); | 
 |   570           CHECK_EQ(expected, m.Call(*i, *j, *k)); | 
 |   571         } | 
 |   572       } | 
 |   573     } | 
 |   574   } | 
 |   575   { | 
 |   576     RawMachineAssemblerTester<int32_t> m(kMachInt32, kMachInt32, kMachInt32); | 
 |   577     m.Return(m.Int32Add(m.Word32Equal(m.Parameter(0), m.Parameter(1)), | 
 |   578                         m.Parameter(2))); | 
 |   579     FOR_INT32_INPUTS(i) { | 
 |   580       FOR_INT32_INPUTS(j) { | 
 |   581         FOR_INT32_INPUTS(k) { | 
 |   582           // Use uint32_t because signed overflow is UB in C. | 
 |   583           int32_t const expected = | 
 |   584               bit_cast<int32_t>((*i == *j) + bit_cast<uint32_t>(*k)); | 
 |   585           CHECK_EQ(expected, m.Call(*i, *j, *k)); | 
 |   586         } | 
 |   587       } | 
 |   588     } | 
 |   589   } | 
 |   590 } | 
 |   591  | 
 |   592  | 
 |   593 TEST(RunInt32AddAndWord32EqualImm) { | 
 |   594   { | 
 |   595     FOR_INT32_INPUTS(i) { | 
 |   596       RawMachineAssemblerTester<int32_t> m(kMachInt32, kMachInt32); | 
 |   597       m.Return(m.Int32Add(m.Int32Constant(*i), | 
 |   598                           m.Word32Equal(m.Parameter(0), m.Parameter(1)))); | 
 |   599       FOR_INT32_INPUTS(j) { | 
 |   600         FOR_INT32_INPUTS(k) { | 
 |   601           // Use uint32_t because signed overflow is UB in C. | 
 |   602           int32_t const expected = | 
 |   603               bit_cast<int32_t>(bit_cast<uint32_t>(*i) + (*j == *k)); | 
 |   604           CHECK_EQ(expected, m.Call(*j, *k)); | 
 |   605         } | 
 |   606       } | 
 |   607     } | 
 |   608   } | 
 |   609   { | 
 |   610     FOR_INT32_INPUTS(i) { | 
 |   611       RawMachineAssemblerTester<int32_t> m(kMachInt32, kMachInt32); | 
 |   612       m.Return(m.Int32Add(m.Word32Equal(m.Int32Constant(*i), m.Parameter(0)), | 
 |   613                           m.Parameter(1))); | 
 |   614       FOR_INT32_INPUTS(j) { | 
 |   615         FOR_INT32_INPUTS(k) { | 
 |   616           // Use uint32_t because signed overflow is UB in C. | 
 |   617           int32_t const expected = | 
 |   618               bit_cast<int32_t>((*i == *j) + bit_cast<uint32_t>(*k)); | 
 |   619           CHECK_EQ(expected, m.Call(*j, *k)); | 
 |   620         } | 
 |   621       } | 
 |   622     } | 
 |   623   } | 
 |   624 } | 
 |   625  | 
 |   626  | 
 |   627 TEST(RunInt32AddAndWord32NotEqualP) { | 
 |   628   { | 
 |   629     RawMachineAssemblerTester<int32_t> m(kMachInt32, kMachInt32, kMachInt32); | 
 |   630     m.Return(m.Int32Add(m.Parameter(0), | 
 |   631                         m.Word32NotEqual(m.Parameter(1), m.Parameter(2)))); | 
 |   632     FOR_INT32_INPUTS(i) { | 
 |   633       FOR_INT32_INPUTS(j) { | 
 |   634         FOR_INT32_INPUTS(k) { | 
 |   635           // Use uint32_t because signed overflow is UB in C. | 
 |   636           int32_t const expected = | 
 |   637               bit_cast<int32_t>(bit_cast<uint32_t>(*i) + (*j != *k)); | 
 |   638           CHECK_EQ(expected, m.Call(*i, *j, *k)); | 
 |   639         } | 
 |   640       } | 
 |   641     } | 
 |   642   } | 
 |   643   { | 
 |   644     RawMachineAssemblerTester<int32_t> m(kMachInt32, kMachInt32, kMachInt32); | 
 |   645     m.Return(m.Int32Add(m.Word32NotEqual(m.Parameter(0), m.Parameter(1)), | 
 |   646                         m.Parameter(2))); | 
 |   647     FOR_INT32_INPUTS(i) { | 
 |   648       FOR_INT32_INPUTS(j) { | 
 |   649         FOR_INT32_INPUTS(k) { | 
 |   650           // Use uint32_t because signed overflow is UB in C. | 
 |   651           int32_t const expected = | 
 |   652               bit_cast<int32_t>((*i != *j) + bit_cast<uint32_t>(*k)); | 
 |   653           CHECK_EQ(expected, m.Call(*i, *j, *k)); | 
 |   654         } | 
 |   655       } | 
 |   656     } | 
 |   657   } | 
 |   658 } | 
 |   659  | 
 |   660  | 
 |   661 TEST(RunInt32AddAndWord32NotEqualImm) { | 
 |   662   { | 
 |   663     FOR_INT32_INPUTS(i) { | 
 |   664       RawMachineAssemblerTester<int32_t> m(kMachInt32, kMachInt32); | 
 |   665       m.Return(m.Int32Add(m.Int32Constant(*i), | 
 |   666                           m.Word32NotEqual(m.Parameter(0), m.Parameter(1)))); | 
 |   667       FOR_INT32_INPUTS(j) { | 
 |   668         FOR_INT32_INPUTS(k) { | 
 |   669           // Use uint32_t because signed overflow is UB in C. | 
 |   670           int32_t const expected = | 
 |   671               bit_cast<int32_t>(bit_cast<uint32_t>(*i) + (*j != *k)); | 
 |   672           CHECK_EQ(expected, m.Call(*j, *k)); | 
 |   673         } | 
 |   674       } | 
 |   675     } | 
 |   676   } | 
 |   677   { | 
 |   678     FOR_INT32_INPUTS(i) { | 
 |   679       RawMachineAssemblerTester<int32_t> m(kMachInt32, kMachInt32); | 
 |   680       m.Return(m.Int32Add(m.Word32NotEqual(m.Int32Constant(*i), m.Parameter(0)), | 
 |   681                           m.Parameter(1))); | 
 |   682       FOR_INT32_INPUTS(j) { | 
 |   683         FOR_INT32_INPUTS(k) { | 
 |   684           // Use uint32_t because signed overflow is UB in C. | 
 |   685           int32_t const expected = | 
 |   686               bit_cast<int32_t>((*i != *j) + bit_cast<uint32_t>(*k)); | 
 |   687           CHECK_EQ(expected, m.Call(*j, *k)); | 
 |   688         } | 
 |   689       } | 
 |   690     } | 
 |   691   } | 
 |   692 } | 
 |   693  | 
 |   694  | 
|   559 TEST(RunInt32AddAndWord32SarP) { |   695 TEST(RunInt32AddAndWord32SarP) { | 
|   560   { |   696   { | 
|   561     RawMachineAssemblerTester<int32_t> m(kMachUint32, kMachInt32, kMachUint32); |   697     RawMachineAssemblerTester<int32_t> m(kMachUint32, kMachInt32, kMachUint32); | 
|   562     m.Return(m.Int32Add(m.Parameter(0), |   698     m.Return(m.Int32Add(m.Parameter(0), | 
|   563                         m.Word32Sar(m.Parameter(1), m.Parameter(2)))); |   699                         m.Word32Sar(m.Parameter(1), m.Parameter(2)))); | 
|   564     FOR_UINT32_INPUTS(i) { |   700     FOR_UINT32_INPUTS(i) { | 
|   565       FOR_INT32_INPUTS(j) { |   701       FOR_INT32_INPUTS(j) { | 
|   566         FOR_UINT32_SHIFTS(shift) { |   702         FOR_UINT32_SHIFTS(shift) { | 
|   567           // Use uint32_t because signed overflow is UB in C. |   703           // Use uint32_t because signed overflow is UB in C. | 
|   568           int32_t expected = *i + (*j >> shift); |   704           int32_t expected = *i + (*j >> shift); | 
| (...skipping 3824 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  4393     float actual = *i; |  4529     float actual = *i; | 
|  4394     RawMachineAssemblerTester<int32_t> m; |  4530     RawMachineAssemblerTester<int32_t> m; | 
|  4395     m.StoreToPointer(&actual, kMachFloat32, m.Float32Constant(expected)); |  4531     m.StoreToPointer(&actual, kMachFloat32, m.Float32Constant(expected)); | 
|  4396     m.Return(m.Int32Constant(0)); |  4532     m.Return(m.Int32Constant(0)); | 
|  4397     CHECK_EQ(0, m.Call()); |  4533     CHECK_EQ(0, m.Call()); | 
|  4398     CHECK_EQ(expected, actual); |  4534     CHECK_EQ(expected, actual); | 
|  4399   } |  4535   } | 
|  4400 } |  4536 } | 
|  4401  |  4537  | 
|  4402 #endif  // V8_TURBOFAN_TARGET |  4538 #endif  // V8_TURBOFAN_TARGET | 
| OLD | NEW |