Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(51)

Side by Side Diff: test/cctest/compiler/test-run-machops.cc

Issue 1513383003: [turbofan] Store nodes use only MachineRepresentation, not MachineType. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: please mips64 Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 the V8 project authors. All rights reserved. Use of this 1 // Copyright 2014 the V8 project authors. All rights reserved. Use of this
2 // source code is governed by a BSD-style license that can be found in the 2 // source code is governed by a BSD-style license that can be found in the
3 // LICENSE file. 3 // LICENSE file.
4 4
5 #include <cmath> 5 #include <cmath>
6 #include <functional> 6 #include <functional>
7 #include <limits> 7 #include <limits>
8 8
9 #include "src/base/bits.h" 9 #include "src/base/bits.h"
10 #include "src/base/utils/random-number-generator.h" 10 #include "src/base/utils/random-number-generator.h"
(...skipping 950 matching lines...) Expand 10 before | Expand all | Expand 10 after
961 961
962 FOR_INT32_INPUTS(i) { 962 FOR_INT32_INPUTS(i) {
963 int32_t magic = 0x2342aabb + *i * 3; 963 int32_t magic = 0x2342aabb + *i * 3;
964 RawMachineAssemblerTester<int32_t> m; 964 RawMachineAssemblerTester<int32_t> m;
965 int32_t offset = *i; 965 int32_t offset = *i;
966 byte* from = reinterpret_cast<byte*>(&p1) - offset; 966 byte* from = reinterpret_cast<byte*>(&p1) - offset;
967 byte* to = reinterpret_cast<byte*>(&p2) - offset; 967 byte* to = reinterpret_cast<byte*>(&p2) - offset;
968 // generate load [#base + #index] 968 // generate load [#base + #index]
969 Node* load = m.Load(MachineType::Float32(), m.PointerConstant(from), 969 Node* load = m.Load(MachineType::Float32(), m.PointerConstant(from),
970 m.IntPtrConstant(offset)); 970 m.IntPtrConstant(offset));
971 m.Store(MachineType::Float32(), m.PointerConstant(to), 971 m.Store(MachineRepresentation::kFloat32, m.PointerConstant(to),
972 m.IntPtrConstant(offset), load, kNoWriteBarrier); 972 m.IntPtrConstant(offset), load, kNoWriteBarrier);
973 m.Return(m.Int32Constant(magic)); 973 m.Return(m.Int32Constant(magic));
974 974
975 FOR_FLOAT32_INPUTS(j) { 975 FOR_FLOAT32_INPUTS(j) {
976 p1 = *j; 976 p1 = *j;
977 p2 = *j - 5; 977 p2 = *j - 5;
978 CHECK_EQ(magic, m.Call()); 978 CHECK_EQ(magic, m.Call());
979 CheckDoubleEq(p1, p2); 979 CheckDoubleEq(p1, p2);
980 } 980 }
981 } 981 }
982 } 982 }
983 983
984 984
985 TEST(RunLoadStoreFloat64Offset) { 985 TEST(RunLoadStoreFloat64Offset) {
986 double p1 = 0; // loads directly from this location. 986 double p1 = 0; // loads directly from this location.
987 double p2 = 0; // and stores directly into this location. 987 double p2 = 0; // and stores directly into this location.
988 988
989 FOR_INT32_INPUTS(i) { 989 FOR_INT32_INPUTS(i) {
990 int32_t magic = 0x2342aabb + *i * 3; 990 int32_t magic = 0x2342aabb + *i * 3;
991 RawMachineAssemblerTester<int32_t> m; 991 RawMachineAssemblerTester<int32_t> m;
992 int32_t offset = *i; 992 int32_t offset = *i;
993 byte* from = reinterpret_cast<byte*>(&p1) - offset; 993 byte* from = reinterpret_cast<byte*>(&p1) - offset;
994 byte* to = reinterpret_cast<byte*>(&p2) - offset; 994 byte* to = reinterpret_cast<byte*>(&p2) - offset;
995 // generate load [#base + #index] 995 // generate load [#base + #index]
996 Node* load = m.Load(MachineType::Float64(), m.PointerConstant(from), 996 Node* load = m.Load(MachineType::Float64(), m.PointerConstant(from),
997 m.IntPtrConstant(offset)); 997 m.IntPtrConstant(offset));
998 m.Store(MachineType::Float64(), m.PointerConstant(to), 998 m.Store(MachineRepresentation::kFloat64, m.PointerConstant(to),
999 m.IntPtrConstant(offset), load, kNoWriteBarrier); 999 m.IntPtrConstant(offset), load, kNoWriteBarrier);
1000 m.Return(m.Int32Constant(magic)); 1000 m.Return(m.Int32Constant(magic));
1001 1001
1002 FOR_FLOAT64_INPUTS(j) { 1002 FOR_FLOAT64_INPUTS(j) {
1003 p1 = *j; 1003 p1 = *j;
1004 p2 = *j - 5; 1004 p2 = *j - 5;
1005 CHECK_EQ(magic, m.Call()); 1005 CHECK_EQ(magic, m.Call());
1006 CheckDoubleEq(p1, p2); 1006 CheckDoubleEq(p1, p2);
1007 } 1007 }
1008 } 1008 }
(...skipping 2390 matching lines...) Expand 10 before | Expand all | Expand 10 after
3399 for (size_t i = 0; i < sizeof(buffer); i++) { 3399 for (size_t i = 0; i < sizeof(buffer); i++) {
3400 raw[i] = static_cast<byte>((i + sizeof(buffer)) ^ 0xAA); 3400 raw[i] = static_cast<byte>((i + sizeof(buffer)) ^ 0xAA);
3401 } 3401 }
3402 3402
3403 RawMachineAssemblerTester<int32_t> m; 3403 RawMachineAssemblerTester<int32_t> m;
3404 int32_t OK = 0x29000 + x; 3404 int32_t OK = 0x29000 + x;
3405 Node* base = m.PointerConstant(buffer); 3405 Node* base = m.PointerConstant(buffer);
3406 Node* index0 = m.IntPtrConstant(x * sizeof(buffer[0])); 3406 Node* index0 = m.IntPtrConstant(x * sizeof(buffer[0]));
3407 Node* load = m.Load(rep, base, index0); 3407 Node* load = m.Load(rep, base, index0);
3408 Node* index1 = m.IntPtrConstant(y * sizeof(buffer[0])); 3408 Node* index1 = m.IntPtrConstant(y * sizeof(buffer[0]));
3409 m.Store(rep, base, index1, load, kNoWriteBarrier); 3409 m.Store(rep.representation(), base, index1, load, kNoWriteBarrier);
3410 m.Return(m.Int32Constant(OK)); 3410 m.Return(m.Int32Constant(OK));
3411 3411
3412 CHECK(buffer[x] != buffer[y]); 3412 CHECK(buffer[x] != buffer[y]);
3413 CHECK_EQ(OK, m.Call()); 3413 CHECK_EQ(OK, m.Call());
3414 CHECK(buffer[x] == buffer[y]); 3414 CHECK(buffer[x] == buffer[y]);
3415 } 3415 }
3416 } 3416 }
3417 3417
3418 3418
3419 TEST(RunLoadStore) { 3419 TEST(RunLoadStore) {
(...skipping 619 matching lines...) Expand 10 before | Expand all | Expand 10 after
4039 RawMachineLabel blocka, blockb, end; 4039 RawMachineLabel blocka, blockb, end;
4040 Node* k1 = m.Float32Constant(constant); 4040 Node* k1 = m.Float32Constant(constant);
4041 Node* k2 = m.Float32Constant(0 - constant); 4041 Node* k2 = m.Float32Constant(0 - constant);
4042 m.Branch(m.Int32Constant(0), &blocka, &blockb); 4042 m.Branch(m.Int32Constant(0), &blocka, &blockb);
4043 m.Bind(&blocka); 4043 m.Bind(&blocka);
4044 m.Goto(&end); 4044 m.Goto(&end);
4045 m.Bind(&blockb); 4045 m.Bind(&blockb);
4046 m.Goto(&end); 4046 m.Goto(&end);
4047 m.Bind(&end); 4047 m.Bind(&end);
4048 Node* phi = m.Phi(MachineRepresentation::kFloat32, k2, k1); 4048 Node* phi = m.Phi(MachineRepresentation::kFloat32, k2, k1);
4049 m.Store(MachineType::Float32(), m.PointerConstant(&buffer), 4049 m.Store(MachineRepresentation::kFloat32, m.PointerConstant(&buffer),
4050 m.IntPtrConstant(0), phi, kNoWriteBarrier); 4050 m.IntPtrConstant(0), phi, kNoWriteBarrier);
4051 m.Return(m.Int32Constant(magic)); 4051 m.Return(m.Int32Constant(magic));
4052 4052
4053 CHECK_EQ(magic, m.Call()); 4053 CHECK_EQ(magic, m.Call());
4054 CHECK(constant == buffer); 4054 CHECK(constant == buffer);
4055 } 4055 }
4056 4056
4057 4057
4058 TEST(RunDoubleDiamond) { 4058 TEST(RunDoubleDiamond) {
4059 RawMachineAssemblerTester<int32_t> m; 4059 RawMachineAssemblerTester<int32_t> m;
4060 4060
4061 const int magic = 99645; 4061 const int magic = 99645;
4062 double buffer = 0.1; 4062 double buffer = 0.1;
4063 double constant = 99.99; 4063 double constant = 99.99;
4064 4064
4065 RawMachineLabel blocka, blockb, end; 4065 RawMachineLabel blocka, blockb, end;
4066 Node* k1 = m.Float64Constant(constant); 4066 Node* k1 = m.Float64Constant(constant);
4067 Node* k2 = m.Float64Constant(0 - constant); 4067 Node* k2 = m.Float64Constant(0 - constant);
4068 m.Branch(m.Int32Constant(0), &blocka, &blockb); 4068 m.Branch(m.Int32Constant(0), &blocka, &blockb);
4069 m.Bind(&blocka); 4069 m.Bind(&blocka);
4070 m.Goto(&end); 4070 m.Goto(&end);
4071 m.Bind(&blockb); 4071 m.Bind(&blockb);
4072 m.Goto(&end); 4072 m.Goto(&end);
4073 m.Bind(&end); 4073 m.Bind(&end);
4074 Node* phi = m.Phi(MachineRepresentation::kFloat64, k2, k1); 4074 Node* phi = m.Phi(MachineRepresentation::kFloat64, k2, k1);
4075 m.Store(MachineType::Float64(), m.PointerConstant(&buffer), 4075 m.Store(MachineRepresentation::kFloat64, m.PointerConstant(&buffer),
4076 m.Int32Constant(0), phi, kNoWriteBarrier); 4076 m.Int32Constant(0), phi, kNoWriteBarrier);
4077 m.Return(m.Int32Constant(magic)); 4077 m.Return(m.Int32Constant(magic));
4078 4078
4079 CHECK_EQ(magic, m.Call()); 4079 CHECK_EQ(magic, m.Call());
4080 CHECK_EQ(constant, buffer); 4080 CHECK_EQ(constant, buffer);
4081 } 4081 }
4082 4082
4083 4083
4084 TEST(RunRefDiamond) { 4084 TEST(RunRefDiamond) {
4085 RawMachineAssemblerTester<int32_t> m; 4085 RawMachineAssemblerTester<int32_t> m;
4086 4086
4087 const int magic = 99644; 4087 const int magic = 99644;
4088 Handle<String> rexpected = 4088 Handle<String> rexpected =
4089 CcTest::i_isolate()->factory()->InternalizeUtf8String("A"); 4089 CcTest::i_isolate()->factory()->InternalizeUtf8String("A");
4090 String* buffer; 4090 String* buffer;
4091 4091
4092 RawMachineLabel blocka, blockb, end; 4092 RawMachineLabel blocka, blockb, end;
4093 Node* k1 = m.StringConstant("A"); 4093 Node* k1 = m.StringConstant("A");
4094 Node* k2 = m.StringConstant("B"); 4094 Node* k2 = m.StringConstant("B");
4095 m.Branch(m.Int32Constant(0), &blocka, &blockb); 4095 m.Branch(m.Int32Constant(0), &blocka, &blockb);
4096 m.Bind(&blocka); 4096 m.Bind(&blocka);
4097 m.Goto(&end); 4097 m.Goto(&end);
4098 m.Bind(&blockb); 4098 m.Bind(&blockb);
4099 m.Goto(&end); 4099 m.Goto(&end);
4100 m.Bind(&end); 4100 m.Bind(&end);
4101 Node* phi = m.Phi(MachineRepresentation::kTagged, k2, k1); 4101 Node* phi = m.Phi(MachineRepresentation::kTagged, k2, k1);
4102 m.Store(MachineType::AnyTagged(), m.PointerConstant(&buffer), 4102 m.Store(MachineRepresentation::kTagged, m.PointerConstant(&buffer),
4103 m.Int32Constant(0), phi, kNoWriteBarrier); 4103 m.Int32Constant(0), phi, kNoWriteBarrier);
4104 m.Return(m.Int32Constant(magic)); 4104 m.Return(m.Int32Constant(magic));
4105 4105
4106 CHECK_EQ(magic, m.Call()); 4106 CHECK_EQ(magic, m.Call());
4107 CHECK(rexpected->SameValue(buffer)); 4107 CHECK(rexpected->SameValue(buffer));
4108 } 4108 }
4109 4109
4110 4110
4111 TEST(RunDoubleRefDiamond) { 4111 TEST(RunDoubleRefDiamond) {
4112 RawMachineAssemblerTester<int32_t> m; 4112 RawMachineAssemblerTester<int32_t> m;
(...skipping 11 matching lines...) Expand all
4124 Node* r1 = m.StringConstant("AX"); 4124 Node* r1 = m.StringConstant("AX");
4125 Node* r2 = m.StringConstant("BX"); 4125 Node* r2 = m.StringConstant("BX");
4126 m.Branch(m.Int32Constant(0), &blocka, &blockb); 4126 m.Branch(m.Int32Constant(0), &blocka, &blockb);
4127 m.Bind(&blocka); 4127 m.Bind(&blocka);
4128 m.Goto(&end); 4128 m.Goto(&end);
4129 m.Bind(&blockb); 4129 m.Bind(&blockb);
4130 m.Goto(&end); 4130 m.Goto(&end);
4131 m.Bind(&end); 4131 m.Bind(&end);
4132 Node* dphi = m.Phi(MachineRepresentation::kFloat64, d2, d1); 4132 Node* dphi = m.Phi(MachineRepresentation::kFloat64, d2, d1);
4133 Node* rphi = m.Phi(MachineRepresentation::kTagged, r2, r1); 4133 Node* rphi = m.Phi(MachineRepresentation::kTagged, r2, r1);
4134 m.Store(MachineType::Float64(), m.PointerConstant(&dbuffer), 4134 m.Store(MachineRepresentation::kFloat64, m.PointerConstant(&dbuffer),
4135 m.Int32Constant(0), dphi, kNoWriteBarrier); 4135 m.Int32Constant(0), dphi, kNoWriteBarrier);
4136 m.Store(MachineType::AnyTagged(), m.PointerConstant(&rbuffer), 4136 m.Store(MachineRepresentation::kTagged, m.PointerConstant(&rbuffer),
4137 m.Int32Constant(0), rphi, kNoWriteBarrier); 4137 m.Int32Constant(0), rphi, kNoWriteBarrier);
4138 m.Return(m.Int32Constant(magic)); 4138 m.Return(m.Int32Constant(magic));
4139 4139
4140 CHECK_EQ(magic, m.Call()); 4140 CHECK_EQ(magic, m.Call());
4141 CHECK_EQ(dconstant, dbuffer); 4141 CHECK_EQ(dconstant, dbuffer);
4142 CHECK(rexpected->SameValue(rbuffer)); 4142 CHECK(rexpected->SameValue(rbuffer));
4143 } 4143 }
4144 4144
4145 4145
4146 TEST(RunDoubleRefDoubleDiamond) { 4146 TEST(RunDoubleRefDoubleDiamond) {
(...skipping 22 matching lines...) Expand all
4169 m.Branch(m.Int32Constant(0), &blockd, &blocke); 4169 m.Branch(m.Int32Constant(0), &blockd, &blocke);
4170 4170
4171 m.Bind(&blockd); 4171 m.Bind(&blockd);
4172 m.Goto(&end); 4172 m.Goto(&end);
4173 m.Bind(&blocke); 4173 m.Bind(&blocke);
4174 m.Goto(&end); 4174 m.Goto(&end);
4175 m.Bind(&end); 4175 m.Bind(&end);
4176 Node* dphi2 = m.Phi(MachineRepresentation::kFloat64, d1, dphi1); 4176 Node* dphi2 = m.Phi(MachineRepresentation::kFloat64, d1, dphi1);
4177 Node* rphi2 = m.Phi(MachineRepresentation::kTagged, r1, rphi1); 4177 Node* rphi2 = m.Phi(MachineRepresentation::kTagged, r1, rphi1);
4178 4178
4179 m.Store(MachineType::Float64(), m.PointerConstant(&dbuffer), 4179 m.Store(MachineRepresentation::kFloat64, m.PointerConstant(&dbuffer),
4180 m.Int32Constant(0), dphi2, kNoWriteBarrier); 4180 m.Int32Constant(0), dphi2, kNoWriteBarrier);
4181 m.Store(MachineType::AnyTagged(), m.PointerConstant(&rbuffer), 4181 m.Store(MachineRepresentation::kTagged, m.PointerConstant(&rbuffer),
4182 m.Int32Constant(0), rphi2, kNoWriteBarrier); 4182 m.Int32Constant(0), rphi2, kNoWriteBarrier);
4183 m.Return(m.Int32Constant(magic)); 4183 m.Return(m.Int32Constant(magic));
4184 4184
4185 CHECK_EQ(magic, m.Call()); 4185 CHECK_EQ(magic, m.Call());
4186 CHECK_EQ(dconstant, dbuffer); 4186 CHECK_EQ(dconstant, dbuffer);
4187 CHECK(rexpected->SameValue(rbuffer)); 4187 CHECK(rexpected->SameValue(rbuffer));
4188 } 4188 }
4189 4189
4190 4190
4191 TEST(RunDoubleLoopPhi) { 4191 TEST(RunDoubleLoopPhi) {
4192 RawMachineAssemblerTester<int32_t> m; 4192 RawMachineAssemblerTester<int32_t> m;
4193 RawMachineLabel header, body, end; 4193 RawMachineLabel header, body, end;
4194 4194
4195 int magic = 99773; 4195 int magic = 99773;
4196 double buffer = 0.99; 4196 double buffer = 0.99;
4197 double dconstant = 777.1; 4197 double dconstant = 777.1;
4198 4198
4199 Node* zero = m.Int32Constant(0); 4199 Node* zero = m.Int32Constant(0);
4200 Node* dk = m.Float64Constant(dconstant); 4200 Node* dk = m.Float64Constant(dconstant);
4201 4201
4202 m.Goto(&header); 4202 m.Goto(&header);
4203 m.Bind(&header); 4203 m.Bind(&header);
4204 Node* phi = m.Phi(MachineRepresentation::kFloat64, dk, dk); 4204 Node* phi = m.Phi(MachineRepresentation::kFloat64, dk, dk);
4205 phi->ReplaceInput(1, phi); 4205 phi->ReplaceInput(1, phi);
4206 m.Branch(zero, &body, &end); 4206 m.Branch(zero, &body, &end);
4207 m.Bind(&body); 4207 m.Bind(&body);
4208 m.Goto(&header); 4208 m.Goto(&header);
4209 m.Bind(&end); 4209 m.Bind(&end);
4210 m.Store(MachineType::Float64(), m.PointerConstant(&buffer), 4210 m.Store(MachineRepresentation::kFloat64, m.PointerConstant(&buffer),
4211 m.Int32Constant(0), phi, kNoWriteBarrier); 4211 m.Int32Constant(0), phi, kNoWriteBarrier);
4212 m.Return(m.Int32Constant(magic)); 4212 m.Return(m.Int32Constant(magic));
4213 4213
4214 CHECK_EQ(magic, m.Call()); 4214 CHECK_EQ(magic, m.Call());
4215 } 4215 }
4216 4216
4217 4217
4218 TEST(RunCountToTenAccRaw) { 4218 TEST(RunCountToTenAccRaw) {
4219 RawMachineAssemblerTester<int32_t> m; 4219 RawMachineAssemblerTester<int32_t> m;
4220 4220
(...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after
4505 } 4505 }
4506 4506
4507 4507
4508 template <typename IntType> 4508 template <typename IntType>
4509 static void LoadStoreTruncation(MachineType kRepresentation) { 4509 static void LoadStoreTruncation(MachineType kRepresentation) {
4510 IntType input; 4510 IntType input;
4511 4511
4512 RawMachineAssemblerTester<int32_t> m; 4512 RawMachineAssemblerTester<int32_t> m;
4513 Node* a = m.LoadFromPointer(&input, kRepresentation); 4513 Node* a = m.LoadFromPointer(&input, kRepresentation);
4514 Node* ap1 = m.Int32Add(a, m.Int32Constant(1)); 4514 Node* ap1 = m.Int32Add(a, m.Int32Constant(1));
4515 m.StoreToPointer(&input, kRepresentation, ap1); 4515 m.StoreToPointer(&input, kRepresentation.representation(), ap1);
4516 m.Return(ap1); 4516 m.Return(ap1);
4517 4517
4518 const IntType max = std::numeric_limits<IntType>::max(); 4518 const IntType max = std::numeric_limits<IntType>::max();
4519 const IntType min = std::numeric_limits<IntType>::min(); 4519 const IntType min = std::numeric_limits<IntType>::min();
4520 4520
4521 // Test upper bound. 4521 // Test upper bound.
4522 input = max; 4522 input = max;
4523 CHECK_EQ(max + 1, m.Call()); 4523 CHECK_EQ(max + 1, m.Call());
4524 CHECK_EQ(min, input); 4524 CHECK_EQ(min, input);
4525 4525
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
4609 int32_t outputs[kInputSize]; 4609 int32_t outputs[kInputSize];
4610 for (int i = 0; i < kInputSize; i++) { 4610 for (int i = 0; i < kInputSize; i++) {
4611 inputs[i] = i; 4611 inputs[i] = i;
4612 outputs[i] = -1; 4612 outputs[i] = -1;
4613 } 4613 }
4614 RawMachineAssemblerTester<int32_t*> m; 4614 RawMachineAssemblerTester<int32_t*> m;
4615 Node* input = m.PointerConstant(&inputs[0]); 4615 Node* input = m.PointerConstant(&inputs[0]);
4616 Node* output = m.PointerConstant(&outputs[kInputSize - 1]); 4616 Node* output = m.PointerConstant(&outputs[kInputSize - 1]);
4617 Node* elem_size = m.IntPtrConstant(sizeof(inputs[0])); 4617 Node* elem_size = m.IntPtrConstant(sizeof(inputs[0]));
4618 for (int i = 0; i < kInputSize; i++) { 4618 for (int i = 0; i < kInputSize; i++) {
4619 m.Store(MachineType::Int32(), output, m.Load(MachineType::Int32(), input), 4619 m.Store(MachineRepresentation::kWord32, output,
4620 kNoWriteBarrier); 4620 m.Load(MachineType::Int32(), input), kNoWriteBarrier);
4621 input = m.IntPtrAdd(input, elem_size); 4621 input = m.IntPtrAdd(input, elem_size);
4622 output = m.IntPtrSub(output, elem_size); 4622 output = m.IntPtrSub(output, elem_size);
4623 } 4623 }
4624 m.Return(input); 4624 m.Return(input);
4625 CHECK_EQ(&inputs[kInputSize], m.Call()); 4625 CHECK_EQ(&inputs[kInputSize], m.Call());
4626 for (int i = 0; i < kInputSize; i++) { 4626 for (int i = 0; i < kInputSize; i++) {
4627 CHECK_EQ(i, inputs[i]); 4627 CHECK_EQ(i, inputs[i]);
4628 CHECK_EQ(kInputSize - i - 1, outputs[i]); 4628 CHECK_EQ(kInputSize - i - 1, outputs[i]);
4629 } 4629 }
4630 } 4630 }
4631 4631
4632 4632
4633 TEST(RunSpillLotsOfThings) { 4633 TEST(RunSpillLotsOfThings) {
4634 static const int kInputSize = 1000; 4634 static const int kInputSize = 1000;
4635 RawMachineAssemblerTester<int32_t> m; 4635 RawMachineAssemblerTester<int32_t> m;
4636 Node* accs[kInputSize]; 4636 Node* accs[kInputSize];
4637 int32_t outputs[kInputSize]; 4637 int32_t outputs[kInputSize];
4638 Node* one = m.Int32Constant(1); 4638 Node* one = m.Int32Constant(1);
4639 Node* acc = one; 4639 Node* acc = one;
4640 for (int i = 0; i < kInputSize; i++) { 4640 for (int i = 0; i < kInputSize; i++) {
4641 acc = m.Int32Add(acc, one); 4641 acc = m.Int32Add(acc, one);
4642 accs[i] = acc; 4642 accs[i] = acc;
4643 } 4643 }
4644 for (int i = 0; i < kInputSize; i++) { 4644 for (int i = 0; i < kInputSize; i++) {
4645 m.StoreToPointer(&outputs[i], MachineType::Int32(), accs[i]); 4645 m.StoreToPointer(&outputs[i], MachineRepresentation::kWord32, accs[i]);
4646 } 4646 }
4647 m.Return(one); 4647 m.Return(one);
4648 m.Call(); 4648 m.Call();
4649 for (int i = 0; i < kInputSize; i++) { 4649 for (int i = 0; i < kInputSize; i++) {
4650 CHECK_EQ(outputs[i], i + 2); 4650 CHECK_EQ(outputs[i], i + 2);
4651 } 4651 }
4652 } 4652 }
4653 4653
4654 4654
4655 TEST(RunSpillConstantsAndParameters) { 4655 TEST(RunSpillConstantsAndParameters) {
4656 static const int kInputSize = 1000; 4656 static const int kInputSize = 1000;
4657 static const int32_t kBase = 987; 4657 static const int32_t kBase = 987;
4658 RawMachineAssemblerTester<int32_t> m(MachineType::Int32(), 4658 RawMachineAssemblerTester<int32_t> m(MachineType::Int32(),
4659 MachineType::Int32()); 4659 MachineType::Int32());
4660 int32_t outputs[kInputSize]; 4660 int32_t outputs[kInputSize];
4661 Node* csts[kInputSize]; 4661 Node* csts[kInputSize];
4662 Node* accs[kInputSize]; 4662 Node* accs[kInputSize];
4663 Node* acc = m.Int32Constant(0); 4663 Node* acc = m.Int32Constant(0);
4664 for (int i = 0; i < kInputSize; i++) { 4664 for (int i = 0; i < kInputSize; i++) {
4665 csts[i] = m.Int32Constant(static_cast<int32_t>(kBase + i)); 4665 csts[i] = m.Int32Constant(static_cast<int32_t>(kBase + i));
4666 } 4666 }
4667 for (int i = 0; i < kInputSize; i++) { 4667 for (int i = 0; i < kInputSize; i++) {
4668 acc = m.Int32Add(acc, csts[i]); 4668 acc = m.Int32Add(acc, csts[i]);
4669 accs[i] = acc; 4669 accs[i] = acc;
4670 } 4670 }
4671 for (int i = 0; i < kInputSize; i++) { 4671 for (int i = 0; i < kInputSize; i++) {
4672 m.StoreToPointer(&outputs[i], MachineType::Int32(), accs[i]); 4672 m.StoreToPointer(&outputs[i], MachineRepresentation::kWord32, accs[i]);
4673 } 4673 }
4674 m.Return(m.Int32Add(acc, m.Int32Add(m.Parameter(0), m.Parameter(1)))); 4674 m.Return(m.Int32Add(acc, m.Int32Add(m.Parameter(0), m.Parameter(1))));
4675 FOR_INT32_INPUTS(i) { 4675 FOR_INT32_INPUTS(i) {
4676 FOR_INT32_INPUTS(j) { 4676 FOR_INT32_INPUTS(j) {
4677 int32_t expected = *i + *j; 4677 int32_t expected = *i + *j;
4678 for (int k = 0; k < kInputSize; k++) { 4678 for (int k = 0; k < kInputSize; k++) {
4679 expected += kBase + k; 4679 expected += kBase + k;
4680 } 4680 }
4681 CHECK_EQ(expected, m.Call(*i, *j)); 4681 CHECK_EQ(expected, m.Call(*i, *j));
4682 expected = 0; 4682 expected = 0;
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
4714 } 4714 }
4715 4715
4716 4716
4717 TEST(RunInt32AddWithOverflowP) { 4717 TEST(RunInt32AddWithOverflowP) {
4718 int32_t actual_val = -1; 4718 int32_t actual_val = -1;
4719 RawMachineAssemblerTester<int32_t> m; 4719 RawMachineAssemblerTester<int32_t> m;
4720 Int32BinopTester bt(&m); 4720 Int32BinopTester bt(&m);
4721 Node* add = m.Int32AddWithOverflow(bt.param0, bt.param1); 4721 Node* add = m.Int32AddWithOverflow(bt.param0, bt.param1);
4722 Node* val = m.Projection(0, add); 4722 Node* val = m.Projection(0, add);
4723 Node* ovf = m.Projection(1, add); 4723 Node* ovf = m.Projection(1, add);
4724 m.StoreToPointer(&actual_val, MachineType::Int32(), val); 4724 m.StoreToPointer(&actual_val, MachineRepresentation::kWord32, val);
4725 bt.AddReturn(ovf); 4725 bt.AddReturn(ovf);
4726 FOR_INT32_INPUTS(i) { 4726 FOR_INT32_INPUTS(i) {
4727 FOR_INT32_INPUTS(j) { 4727 FOR_INT32_INPUTS(j) {
4728 int32_t expected_val; 4728 int32_t expected_val;
4729 int expected_ovf = bits::SignedAddOverflow32(*i, *j, &expected_val); 4729 int expected_ovf = bits::SignedAddOverflow32(*i, *j, &expected_val);
4730 CHECK_EQ(expected_ovf, bt.call(*i, *j)); 4730 CHECK_EQ(expected_ovf, bt.call(*i, *j));
4731 CHECK_EQ(expected_val, actual_val); 4731 CHECK_EQ(expected_val, actual_val);
4732 } 4732 }
4733 } 4733 }
4734 } 4734 }
4735 4735
4736 4736
4737 TEST(RunInt32AddWithOverflowImm) { 4737 TEST(RunInt32AddWithOverflowImm) {
4738 int32_t actual_val = -1, expected_val = 0; 4738 int32_t actual_val = -1, expected_val = 0;
4739 FOR_INT32_INPUTS(i) { 4739 FOR_INT32_INPUTS(i) {
4740 { 4740 {
4741 RawMachineAssemblerTester<int32_t> m(MachineType::Int32()); 4741 RawMachineAssemblerTester<int32_t> m(MachineType::Int32());
4742 Node* add = m.Int32AddWithOverflow(m.Int32Constant(*i), m.Parameter(0)); 4742 Node* add = m.Int32AddWithOverflow(m.Int32Constant(*i), m.Parameter(0));
4743 Node* val = m.Projection(0, add); 4743 Node* val = m.Projection(0, add);
4744 Node* ovf = m.Projection(1, add); 4744 Node* ovf = m.Projection(1, add);
4745 m.StoreToPointer(&actual_val, MachineType::Int32(), val); 4745 m.StoreToPointer(&actual_val, MachineRepresentation::kWord32, val);
4746 m.Return(ovf); 4746 m.Return(ovf);
4747 FOR_INT32_INPUTS(j) { 4747 FOR_INT32_INPUTS(j) {
4748 int expected_ovf = bits::SignedAddOverflow32(*i, *j, &expected_val); 4748 int expected_ovf = bits::SignedAddOverflow32(*i, *j, &expected_val);
4749 CHECK_EQ(expected_ovf, m.Call(*j)); 4749 CHECK_EQ(expected_ovf, m.Call(*j));
4750 CHECK_EQ(expected_val, actual_val); 4750 CHECK_EQ(expected_val, actual_val);
4751 } 4751 }
4752 } 4752 }
4753 { 4753 {
4754 RawMachineAssemblerTester<int32_t> m(MachineType::Int32()); 4754 RawMachineAssemblerTester<int32_t> m(MachineType::Int32());
4755 Node* add = m.Int32AddWithOverflow(m.Parameter(0), m.Int32Constant(*i)); 4755 Node* add = m.Int32AddWithOverflow(m.Parameter(0), m.Int32Constant(*i));
4756 Node* val = m.Projection(0, add); 4756 Node* val = m.Projection(0, add);
4757 Node* ovf = m.Projection(1, add); 4757 Node* ovf = m.Projection(1, add);
4758 m.StoreToPointer(&actual_val, MachineType::Int32(), val); 4758 m.StoreToPointer(&actual_val, MachineRepresentation::kWord32, val);
4759 m.Return(ovf); 4759 m.Return(ovf);
4760 FOR_INT32_INPUTS(j) { 4760 FOR_INT32_INPUTS(j) {
4761 int expected_ovf = bits::SignedAddOverflow32(*i, *j, &expected_val); 4761 int expected_ovf = bits::SignedAddOverflow32(*i, *j, &expected_val);
4762 CHECK_EQ(expected_ovf, m.Call(*j)); 4762 CHECK_EQ(expected_ovf, m.Call(*j));
4763 CHECK_EQ(expected_val, actual_val); 4763 CHECK_EQ(expected_val, actual_val);
4764 } 4764 }
4765 } 4765 }
4766 FOR_INT32_INPUTS(j) { 4766 FOR_INT32_INPUTS(j) {
4767 RawMachineAssemblerTester<int32_t> m; 4767 RawMachineAssemblerTester<int32_t> m;
4768 Node* add = 4768 Node* add =
4769 m.Int32AddWithOverflow(m.Int32Constant(*i), m.Int32Constant(*j)); 4769 m.Int32AddWithOverflow(m.Int32Constant(*i), m.Int32Constant(*j));
4770 Node* val = m.Projection(0, add); 4770 Node* val = m.Projection(0, add);
4771 Node* ovf = m.Projection(1, add); 4771 Node* ovf = m.Projection(1, add);
4772 m.StoreToPointer(&actual_val, MachineType::Int32(), val); 4772 m.StoreToPointer(&actual_val, MachineRepresentation::kWord32, val);
4773 m.Return(ovf); 4773 m.Return(ovf);
4774 int expected_ovf = bits::SignedAddOverflow32(*i, *j, &expected_val); 4774 int expected_ovf = bits::SignedAddOverflow32(*i, *j, &expected_val);
4775 CHECK_EQ(expected_ovf, m.Call()); 4775 CHECK_EQ(expected_ovf, m.Call());
4776 CHECK_EQ(expected_val, actual_val); 4776 CHECK_EQ(expected_val, actual_val);
4777 } 4777 }
4778 } 4778 }
4779 } 4779 }
4780 4780
4781 4781
4782 TEST(RunInt32AddWithOverflowInBranchP) { 4782 TEST(RunInt32AddWithOverflowInBranchP) {
(...skipping 19 matching lines...) Expand all
4802 } 4802 }
4803 4803
4804 4804
4805 TEST(RunInt32SubWithOverflowP) { 4805 TEST(RunInt32SubWithOverflowP) {
4806 int32_t actual_val = -1; 4806 int32_t actual_val = -1;
4807 RawMachineAssemblerTester<int32_t> m; 4807 RawMachineAssemblerTester<int32_t> m;
4808 Int32BinopTester bt(&m); 4808 Int32BinopTester bt(&m);
4809 Node* add = m.Int32SubWithOverflow(bt.param0, bt.param1); 4809 Node* add = m.Int32SubWithOverflow(bt.param0, bt.param1);
4810 Node* val = m.Projection(0, add); 4810 Node* val = m.Projection(0, add);
4811 Node* ovf = m.Projection(1, add); 4811 Node* ovf = m.Projection(1, add);
4812 m.StoreToPointer(&actual_val, MachineType::Int32(), val); 4812 m.StoreToPointer(&actual_val, MachineRepresentation::kWord32, val);
4813 bt.AddReturn(ovf); 4813 bt.AddReturn(ovf);
4814 FOR_INT32_INPUTS(i) { 4814 FOR_INT32_INPUTS(i) {
4815 FOR_INT32_INPUTS(j) { 4815 FOR_INT32_INPUTS(j) {
4816 int32_t expected_val; 4816 int32_t expected_val;
4817 int expected_ovf = bits::SignedSubOverflow32(*i, *j, &expected_val); 4817 int expected_ovf = bits::SignedSubOverflow32(*i, *j, &expected_val);
4818 CHECK_EQ(expected_ovf, bt.call(*i, *j)); 4818 CHECK_EQ(expected_ovf, bt.call(*i, *j));
4819 CHECK_EQ(expected_val, actual_val); 4819 CHECK_EQ(expected_val, actual_val);
4820 } 4820 }
4821 } 4821 }
4822 } 4822 }
4823 4823
4824 4824
4825 TEST(RunInt32SubWithOverflowImm) { 4825 TEST(RunInt32SubWithOverflowImm) {
4826 int32_t actual_val = -1, expected_val = 0; 4826 int32_t actual_val = -1, expected_val = 0;
4827 FOR_INT32_INPUTS(i) { 4827 FOR_INT32_INPUTS(i) {
4828 { 4828 {
4829 RawMachineAssemblerTester<int32_t> m(MachineType::Int32()); 4829 RawMachineAssemblerTester<int32_t> m(MachineType::Int32());
4830 Node* add = m.Int32SubWithOverflow(m.Int32Constant(*i), m.Parameter(0)); 4830 Node* add = m.Int32SubWithOverflow(m.Int32Constant(*i), m.Parameter(0));
4831 Node* val = m.Projection(0, add); 4831 Node* val = m.Projection(0, add);
4832 Node* ovf = m.Projection(1, add); 4832 Node* ovf = m.Projection(1, add);
4833 m.StoreToPointer(&actual_val, MachineType::Int32(), val); 4833 m.StoreToPointer(&actual_val, MachineRepresentation::kWord32, val);
4834 m.Return(ovf); 4834 m.Return(ovf);
4835 FOR_INT32_INPUTS(j) { 4835 FOR_INT32_INPUTS(j) {
4836 int expected_ovf = bits::SignedSubOverflow32(*i, *j, &expected_val); 4836 int expected_ovf = bits::SignedSubOverflow32(*i, *j, &expected_val);
4837 CHECK_EQ(expected_ovf, m.Call(*j)); 4837 CHECK_EQ(expected_ovf, m.Call(*j));
4838 CHECK_EQ(expected_val, actual_val); 4838 CHECK_EQ(expected_val, actual_val);
4839 } 4839 }
4840 } 4840 }
4841 { 4841 {
4842 RawMachineAssemblerTester<int32_t> m(MachineType::Int32()); 4842 RawMachineAssemblerTester<int32_t> m(MachineType::Int32());
4843 Node* add = m.Int32SubWithOverflow(m.Parameter(0), m.Int32Constant(*i)); 4843 Node* add = m.Int32SubWithOverflow(m.Parameter(0), m.Int32Constant(*i));
4844 Node* val = m.Projection(0, add); 4844 Node* val = m.Projection(0, add);
4845 Node* ovf = m.Projection(1, add); 4845 Node* ovf = m.Projection(1, add);
4846 m.StoreToPointer(&actual_val, MachineType::Int32(), val); 4846 m.StoreToPointer(&actual_val, MachineRepresentation::kWord32, val);
4847 m.Return(ovf); 4847 m.Return(ovf);
4848 FOR_INT32_INPUTS(j) { 4848 FOR_INT32_INPUTS(j) {
4849 int expected_ovf = bits::SignedSubOverflow32(*j, *i, &expected_val); 4849 int expected_ovf = bits::SignedSubOverflow32(*j, *i, &expected_val);
4850 CHECK_EQ(expected_ovf, m.Call(*j)); 4850 CHECK_EQ(expected_ovf, m.Call(*j));
4851 CHECK_EQ(expected_val, actual_val); 4851 CHECK_EQ(expected_val, actual_val);
4852 } 4852 }
4853 } 4853 }
4854 FOR_INT32_INPUTS(j) { 4854 FOR_INT32_INPUTS(j) {
4855 RawMachineAssemblerTester<int32_t> m; 4855 RawMachineAssemblerTester<int32_t> m;
4856 Node* add = 4856 Node* add =
4857 m.Int32SubWithOverflow(m.Int32Constant(*i), m.Int32Constant(*j)); 4857 m.Int32SubWithOverflow(m.Int32Constant(*i), m.Int32Constant(*j));
4858 Node* val = m.Projection(0, add); 4858 Node* val = m.Projection(0, add);
4859 Node* ovf = m.Projection(1, add); 4859 Node* ovf = m.Projection(1, add);
4860 m.StoreToPointer(&actual_val, MachineType::Int32(), val); 4860 m.StoreToPointer(&actual_val, MachineRepresentation::kWord32, val);
4861 m.Return(ovf); 4861 m.Return(ovf);
4862 int expected_ovf = bits::SignedSubOverflow32(*i, *j, &expected_val); 4862 int expected_ovf = bits::SignedSubOverflow32(*i, *j, &expected_val);
4863 CHECK_EQ(expected_ovf, m.Call()); 4863 CHECK_EQ(expected_ovf, m.Call());
4864 CHECK_EQ(expected_val, actual_val); 4864 CHECK_EQ(expected_val, actual_val);
4865 } 4865 }
4866 } 4866 }
4867 } 4867 }
4868 4868
4869 4869
4870 TEST(RunInt32SubWithOverflowInBranchP) { 4870 TEST(RunInt32SubWithOverflowInBranchP) {
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
4907 CHECK_EQ(2, m.Call()); 4907 CHECK_EQ(2, m.Call());
4908 input = V8_INT64_C(0x100000000); 4908 input = V8_INT64_C(0x100000000);
4909 CHECK_EQ(2, m.Call()); 4909 CHECK_EQ(2, m.Call());
4910 } 4910 }
4911 4911
4912 4912
4913 TEST(RunChangeInt32ToInt64P) { 4913 TEST(RunChangeInt32ToInt64P) {
4914 if (kPointerSize < 8) return; 4914 if (kPointerSize < 8) return;
4915 int64_t actual = -1; 4915 int64_t actual = -1;
4916 RawMachineAssemblerTester<int32_t> m(MachineType::Int32()); 4916 RawMachineAssemblerTester<int32_t> m(MachineType::Int32());
4917 m.StoreToPointer(&actual, MachineType::Int64(), 4917 m.StoreToPointer(&actual, MachineRepresentation::kWord64,
4918 m.ChangeInt32ToInt64(m.Parameter(0))); 4918 m.ChangeInt32ToInt64(m.Parameter(0)));
4919 m.Return(m.Int32Constant(0)); 4919 m.Return(m.Int32Constant(0));
4920 FOR_INT32_INPUTS(i) { 4920 FOR_INT32_INPUTS(i) {
4921 int64_t expected = *i; 4921 int64_t expected = *i;
4922 CHECK_EQ(0, m.Call(*i)); 4922 CHECK_EQ(0, m.Call(*i));
4923 CHECK_EQ(expected, actual); 4923 CHECK_EQ(expected, actual);
4924 } 4924 }
4925 } 4925 }
4926 4926
4927 4927
4928 TEST(RunChangeUint32ToUint64P) { 4928 TEST(RunChangeUint32ToUint64P) {
4929 if (kPointerSize < 8) return; 4929 if (kPointerSize < 8) return;
4930 int64_t actual = -1; 4930 int64_t actual = -1;
4931 RawMachineAssemblerTester<int32_t> m(MachineType::Uint32()); 4931 RawMachineAssemblerTester<int32_t> m(MachineType::Uint32());
4932 m.StoreToPointer(&actual, MachineType::Uint64(), 4932 m.StoreToPointer(&actual, MachineRepresentation::kWord64,
4933 m.ChangeUint32ToUint64(m.Parameter(0))); 4933 m.ChangeUint32ToUint64(m.Parameter(0)));
4934 m.Return(m.Int32Constant(0)); 4934 m.Return(m.Int32Constant(0));
4935 FOR_UINT32_INPUTS(i) { 4935 FOR_UINT32_INPUTS(i) {
4936 int64_t expected = static_cast<uint64_t>(*i); 4936 int64_t expected = static_cast<uint64_t>(*i);
4937 CHECK_EQ(0, m.Call(*i)); 4937 CHECK_EQ(0, m.Call(*i));
4938 CHECK_EQ(expected, actual); 4938 CHECK_EQ(expected, actual);
4939 } 4939 }
4940 } 4940 }
4941 4941
4942 4942
(...skipping 464 matching lines...) Expand 10 before | Expand all | Expand 10 after
5407 5407
5408 TEST(RunCheckedStoreInt64) { 5408 TEST(RunCheckedStoreInt64) {
5409 const int64_t write = 0x5566778899aabbLL; 5409 const int64_t write = 0x5566778899aabbLL;
5410 const int64_t before = 0x33bbccddeeff0011LL; 5410 const int64_t before = 0x33bbccddeeff0011LL;
5411 int64_t buffer[] = {before, before}; 5411 int64_t buffer[] = {before, before};
5412 RawMachineAssemblerTester<int32_t> m(MachineType::Int32()); 5412 RawMachineAssemblerTester<int32_t> m(MachineType::Int32());
5413 Node* base = m.PointerConstant(buffer); 5413 Node* base = m.PointerConstant(buffer);
5414 Node* index = m.Parameter(0); 5414 Node* index = m.Parameter(0);
5415 Node* length = m.Int32Constant(16); 5415 Node* length = m.Int32Constant(16);
5416 Node* value = m.Int64Constant(write); 5416 Node* value = m.Int64Constant(write);
5417 Node* store = m.AddNode(m.machine()->CheckedStore(MachineType::Int64()), base, 5417 Node* store =
5418 index, length, value); 5418 m.AddNode(m.machine()->CheckedStore(MachineRepresentation::kWord64), base,
5419 index, length, value);
5419 USE(store); 5420 USE(store);
5420 m.Return(m.Int32Constant(11)); 5421 m.Return(m.Int32Constant(11));
5421 5422
5422 CHECK_EQ(11, m.Call(16)); 5423 CHECK_EQ(11, m.Call(16));
5423 CHECK_EQ(before, buffer[0]); 5424 CHECK_EQ(before, buffer[0]);
5424 CHECK_EQ(before, buffer[1]); 5425 CHECK_EQ(before, buffer[1]);
5425 5426
5426 CHECK_EQ(11, m.Call(0)); 5427 CHECK_EQ(11, m.Call(0));
5427 CHECK_EQ(write, buffer[0]); 5428 CHECK_EQ(write, buffer[0]);
5428 CHECK_EQ(before, buffer[1]); 5429 CHECK_EQ(before, buffer[1]);
5429 5430
5430 CHECK_EQ(11, m.Call(8)); 5431 CHECK_EQ(11, m.Call(8));
5431 CHECK_EQ(write, buffer[0]); 5432 CHECK_EQ(write, buffer[0]);
5432 CHECK_EQ(write, buffer[1]); 5433 CHECK_EQ(write, buffer[1]);
5433 } 5434 }
5434 5435
5435 5436
5436 TEST(RunBitcastInt64ToFloat64) { 5437 TEST(RunBitcastInt64ToFloat64) {
5437 int64_t input = 1; 5438 int64_t input = 1;
5438 double output = 0.0; 5439 double output = 0.0;
5439 RawMachineAssemblerTester<int32_t> m; 5440 RawMachineAssemblerTester<int32_t> m;
5440 m.StoreToPointer( 5441 m.StoreToPointer(
5441 &output, MachineType::Float64(), 5442 &output, MachineRepresentation::kFloat64,
5442 m.BitcastInt64ToFloat64(m.LoadFromPointer(&input, MachineType::Int64()))); 5443 m.BitcastInt64ToFloat64(m.LoadFromPointer(&input, MachineType::Int64())));
5443 m.Return(m.Int32Constant(11)); 5444 m.Return(m.Int32Constant(11));
5444 FOR_INT64_INPUTS(i) { 5445 FOR_INT64_INPUTS(i) {
5445 input = *i; 5446 input = *i;
5446 CHECK_EQ(11, m.Call()); 5447 CHECK_EQ(11, m.Call());
5447 double expected = bit_cast<double>(input); 5448 double expected = bit_cast<double>(input);
5448 CHECK_EQ(bit_cast<int64_t>(expected), bit_cast<int64_t>(output)); 5449 CHECK_EQ(bit_cast<int64_t>(expected), bit_cast<int64_t>(output));
5449 } 5450 }
5450 } 5451 }
5451 5452
(...skipping 18 matching lines...) Expand all
5470 } 5471 }
5471 } 5472 }
5472 5473
5473 5474
5474 TEST(RunTryTruncateFloat32ToInt64WithCheck) { 5475 TEST(RunTryTruncateFloat32ToInt64WithCheck) {
5475 int64_t success = 0; 5476 int64_t success = 0;
5476 BufferedRawMachineAssemblerTester<int64_t> m(MachineType::Float32()); 5477 BufferedRawMachineAssemblerTester<int64_t> m(MachineType::Float32());
5477 Node* trunc = m.TryTruncateFloat32ToInt64(m.Parameter(0)); 5478 Node* trunc = m.TryTruncateFloat32ToInt64(m.Parameter(0));
5478 Node* val = m.Projection(0, trunc); 5479 Node* val = m.Projection(0, trunc);
5479 Node* check = m.Projection(1, trunc); 5480 Node* check = m.Projection(1, trunc);
5480 m.StoreToPointer(&success, MachineType::Int64(), check); 5481 m.StoreToPointer(&success, MachineRepresentation::kWord64, check);
5481 m.Return(val); 5482 m.Return(val);
5482 5483
5483 FOR_FLOAT32_INPUTS(i) { 5484 FOR_FLOAT32_INPUTS(i) {
5484 if (*i < 9223372036854775808.0 && *i > -9223372036854775809.0) { 5485 if (*i < 9223372036854775808.0 && *i > -9223372036854775809.0) {
5485 CHECK_EQ(static_cast<int64_t>(*i), m.Call(*i)); 5486 CHECK_EQ(static_cast<int64_t>(*i), m.Call(*i));
5486 CHECK_NE(0, success); 5487 CHECK_NE(0, success);
5487 } else { 5488 } else {
5488 m.Call(*i); 5489 m.Call(*i);
5489 CHECK_EQ(0, success); 5490 CHECK_EQ(0, success);
5490 } 5491 }
(...skipping 11 matching lines...) Expand all
5502 } 5503 }
5503 } 5504 }
5504 5505
5505 5506
5506 TEST(RunTryTruncateFloat64ToInt64WithCheck) { 5507 TEST(RunTryTruncateFloat64ToInt64WithCheck) {
5507 int64_t success = 0; 5508 int64_t success = 0;
5508 BufferedRawMachineAssemblerTester<int64_t> m(MachineType::Float64()); 5509 BufferedRawMachineAssemblerTester<int64_t> m(MachineType::Float64());
5509 Node* trunc = m.TryTruncateFloat64ToInt64(m.Parameter(0)); 5510 Node* trunc = m.TryTruncateFloat64ToInt64(m.Parameter(0));
5510 Node* val = m.Projection(0, trunc); 5511 Node* val = m.Projection(0, trunc);
5511 Node* check = m.Projection(1, trunc); 5512 Node* check = m.Projection(1, trunc);
5512 m.StoreToPointer(&success, MachineType::Int64(), check); 5513 m.StoreToPointer(&success, MachineRepresentation::kWord64, check);
5513 m.Return(val); 5514 m.Return(val);
5514 5515
5515 FOR_FLOAT64_INPUTS(i) { 5516 FOR_FLOAT64_INPUTS(i) {
5516 if (*i < 9223372036854775808.0 && *i > -9223372036854775809.0) { 5517 if (*i < 9223372036854775808.0 && *i > -9223372036854775809.0) {
5517 // Conversions within this range should succeed. 5518 // Conversions within this range should succeed.
5518 CHECK_EQ(static_cast<int64_t>(*i), m.Call(*i)); 5519 CHECK_EQ(static_cast<int64_t>(*i), m.Call(*i));
5519 CHECK_NE(0, success); 5520 CHECK_NE(0, success);
5520 } else { 5521 } else {
5521 m.Call(*i); 5522 m.Call(*i);
5522 CHECK_EQ(0, success); 5523 CHECK_EQ(0, success);
(...skipping 19 matching lines...) Expand all
5542 } 5543 }
5543 } 5544 }
5544 5545
5545 5546
5546 TEST(RunTryTruncateFloat32ToUint64WithCheck) { 5547 TEST(RunTryTruncateFloat32ToUint64WithCheck) {
5547 int64_t success = 0; 5548 int64_t success = 0;
5548 BufferedRawMachineAssemblerTester<uint64_t> m(MachineType::Float32()); 5549 BufferedRawMachineAssemblerTester<uint64_t> m(MachineType::Float32());
5549 Node* trunc = m.TryTruncateFloat32ToUint64(m.Parameter(0)); 5550 Node* trunc = m.TryTruncateFloat32ToUint64(m.Parameter(0));
5550 Node* val = m.Projection(0, trunc); 5551 Node* val = m.Projection(0, trunc);
5551 Node* check = m.Projection(1, trunc); 5552 Node* check = m.Projection(1, trunc);
5552 m.StoreToPointer(&success, MachineType::Int64(), check); 5553 m.StoreToPointer(&success, MachineRepresentation::kWord64, check);
5553 m.Return(val); 5554 m.Return(val);
5554 5555
5555 FOR_FLOAT32_INPUTS(i) { 5556 FOR_FLOAT32_INPUTS(i) {
5556 if (*i < 18446744073709551616.0 && *i >= 0.0) { 5557 if (*i < 18446744073709551616.0 && *i >= 0.0) {
5557 // Conversions within this range should succeed. 5558 // Conversions within this range should succeed.
5558 CHECK_EQ(static_cast<uint64_t>(*i), m.Call(*i)); 5559 CHECK_EQ(static_cast<uint64_t>(*i), m.Call(*i));
5559 CHECK_NE(0, success); 5560 CHECK_NE(0, success);
5560 } else { 5561 } else {
5561 m.Call(*i); 5562 m.Call(*i);
5562 CHECK_EQ(0, success); 5563 CHECK_EQ(0, success);
(...skipping 15 matching lines...) Expand all
5578 } 5579 }
5579 } 5580 }
5580 5581
5581 5582
5582 TEST(RunTryTruncateFloat64ToUint64WithCheck) { 5583 TEST(RunTryTruncateFloat64ToUint64WithCheck) {
5583 int64_t success = 0; 5584 int64_t success = 0;
5584 BufferedRawMachineAssemblerTester<int64_t> m(MachineType::Float64()); 5585 BufferedRawMachineAssemblerTester<int64_t> m(MachineType::Float64());
5585 Node* trunc = m.TryTruncateFloat64ToUint64(m.Parameter(0)); 5586 Node* trunc = m.TryTruncateFloat64ToUint64(m.Parameter(0));
5586 Node* val = m.Projection(0, trunc); 5587 Node* val = m.Projection(0, trunc);
5587 Node* check = m.Projection(1, trunc); 5588 Node* check = m.Projection(1, trunc);
5588 m.StoreToPointer(&success, MachineType::Int64(), check); 5589 m.StoreToPointer(&success, MachineRepresentation::kWord64, check);
5589 m.Return(val); 5590 m.Return(val);
5590 5591
5591 FOR_FLOAT64_INPUTS(i) { 5592 FOR_FLOAT64_INPUTS(i) {
5592 if (*i < 18446744073709551616.0 && *i >= 0) { 5593 if (*i < 18446744073709551616.0 && *i >= 0) {
5593 // Conversions within this range should succeed. 5594 // Conversions within this range should succeed.
5594 CHECK_EQ(static_cast<uint64_t>(*i), m.Call(*i)); 5595 CHECK_EQ(static_cast<uint64_t>(*i), m.Call(*i));
5595 CHECK_NE(0, success); 5596 CHECK_NE(0, success);
5596 } else { 5597 } else {
5597 m.Call(*i); 5598 m.Call(*i);
5598 CHECK_EQ(0, success); 5599 CHECK_EQ(0, success);
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after
5808 CHECK_EQ(expected, m.Call()); 5809 CHECK_EQ(expected, m.Call());
5809 } 5810 }
5810 } 5811 }
5811 5812
5812 5813
5813 TEST(RunBitcastInt32ToFloat32) { 5814 TEST(RunBitcastInt32ToFloat32) {
5814 int32_t input = 1; 5815 int32_t input = 1;
5815 float output = 0.0; 5816 float output = 0.0;
5816 RawMachineAssemblerTester<int32_t> m; 5817 RawMachineAssemblerTester<int32_t> m;
5817 m.StoreToPointer( 5818 m.StoreToPointer(
5818 &output, MachineType::Float32(), 5819 &output, MachineRepresentation::kFloat32,
5819 m.BitcastInt32ToFloat32(m.LoadFromPointer(&input, MachineType::Int32()))); 5820 m.BitcastInt32ToFloat32(m.LoadFromPointer(&input, MachineType::Int32())));
5820 m.Return(m.Int32Constant(11)); 5821 m.Return(m.Int32Constant(11));
5821 FOR_INT32_INPUTS(i) { 5822 FOR_INT32_INPUTS(i) {
5822 input = *i; 5823 input = *i;
5823 CHECK_EQ(11, m.Call()); 5824 CHECK_EQ(11, m.Call());
5824 float expected = bit_cast<float>(input); 5825 float expected = bit_cast<float>(input);
5825 CHECK_EQ(bit_cast<int32_t>(expected), bit_cast<int32_t>(output)); 5826 CHECK_EQ(bit_cast<int32_t>(expected), bit_cast<int32_t>(output));
5826 } 5827 }
5827 } 5828 }
5828 5829
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
5873 Node* call = r.AddNode(r.common()->Call(desc), phi); 5874 Node* call = r.AddNode(r.common()->Call(desc), phi);
5874 r.Return(call); 5875 r.Return(call);
5875 5876
5876 CHECK_EQ(33, r.Call(1)); 5877 CHECK_EQ(33, r.Call(1));
5877 CHECK_EQ(44, r.Call(0)); 5878 CHECK_EQ(44, r.Call(0));
5878 } 5879 }
5879 5880
5880 } // namespace compiler 5881 } // namespace compiler
5881 } // namespace internal 5882 } // namespace internal
5882 } // namespace v8 5883 } // namespace v8
OLDNEW
« no previous file with comments | « test/cctest/compiler/test-machine-operator-reducer.cc ('k') | test/cctest/compiler/test-run-native-calls.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698