| 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 <limits> | 5 #include <limits> |
| 6 | 6 |
| 7 #include "src/compiler/control-builders.h" | 7 #include "src/compiler/control-builders.h" |
| 8 #include "src/compiler/generic-node-inl.h" | 8 #include "src/compiler/generic-node-inl.h" |
| 9 #include "src/compiler/graph-visualizer.h" | 9 #include "src/compiler/graph-visualizer.h" |
| 10 #include "src/compiler/node-properties-inl.h" | 10 #include "src/compiler/node-properties-inl.h" |
| (...skipping 357 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 368 size_t num_elements; | 368 size_t num_elements; |
| 369 E* untagged_array; | 369 E* untagged_array; |
| 370 Handle<ByteArray> tagged_array; // TODO(titzer): use FixedArray for tagged. | 370 Handle<ByteArray> tagged_array; // TODO(titzer): use FixedArray for tagged. |
| 371 | 371 |
| 372 AccessTester(bool t, MachineRepresentation r, E* orig, size_t num) | 372 AccessTester(bool t, MachineRepresentation r, E* orig, size_t num) |
| 373 : tagged(t), | 373 : tagged(t), |
| 374 rep(r), | 374 rep(r), |
| 375 original_elements(orig), | 375 original_elements(orig), |
| 376 num_elements(num), | 376 num_elements(num), |
| 377 untagged_array(static_cast<E*>(malloc(ByteSize()))), | 377 untagged_array(static_cast<E*>(malloc(ByteSize()))), |
| 378 tagged_array(main_isolate()->factory()->NewByteArray(ByteSize())) { | 378 tagged_array(main_isolate()->factory()->NewByteArray( |
| 379 static_cast<int>(ByteSize()))) { |
| 379 Reinitialize(); | 380 Reinitialize(); |
| 380 } | 381 } |
| 381 | 382 |
| 382 ~AccessTester() { free(untagged_array); } | 383 ~AccessTester() { free(untagged_array); } |
| 383 | 384 |
| 384 size_t ByteSize() { return num_elements * sizeof(E); } | 385 size_t ByteSize() { return num_elements * sizeof(E); } |
| 385 | 386 |
| 386 // Nuke both {untagged_array} and {tagged_array} with {original_elements}. | 387 // Nuke both {untagged_array} and {tagged_array} with {original_elements}. |
| 387 void Reinitialize() { | 388 void Reinitialize() { |
| 388 memcpy(untagged_array, original_elements, ByteSize()); | 389 memcpy(untagged_array, original_elements, ByteSize()); |
| 389 CHECK_EQ(ByteSize(), tagged_array->length()); | 390 CHECK_EQ(static_cast<int>(ByteSize()), tagged_array->length()); |
| 390 E* raw = reinterpret_cast<E*>(tagged_array->GetDataStartAddress()); | 391 E* raw = reinterpret_cast<E*>(tagged_array->GetDataStartAddress()); |
| 391 memcpy(raw, original_elements, ByteSize()); | 392 memcpy(raw, original_elements, ByteSize()); |
| 392 } | 393 } |
| 393 | 394 |
| 394 // Create and run code that copies the element in either {untagged_array} | 395 // Create and run code that copies the element in either {untagged_array} |
| 395 // or {tagged_array} at index {from_index} to index {to_index}. | 396 // or {tagged_array} at index {from_index} to index {to_index}. |
| 396 void RunCopyElement(int from_index, int to_index) { | 397 void RunCopyElement(int from_index, int to_index) { |
| 397 // TODO(titzer): test element and field accesses where the base is not | 398 // TODO(titzer): test element and field accesses where the base is not |
| 398 // a constant in the code. | 399 // a constant in the code. |
| 399 BoundsCheck(from_index); | 400 BoundsCheck(from_index); |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 503 | 504 |
| 504 template <typename T> | 505 template <typename T> |
| 505 Node* GetBaseNode(SimplifiedLoweringTester<T>* t) { | 506 Node* GetBaseNode(SimplifiedLoweringTester<T>* t) { |
| 506 return tagged ? t->HeapConstant(tagged_array) | 507 return tagged ? t->HeapConstant(tagged_array) |
| 507 : t->PointerConstant(untagged_array); | 508 : t->PointerConstant(untagged_array); |
| 508 } | 509 } |
| 509 | 510 |
| 510 void BoundsCheck(int index) { | 511 void BoundsCheck(int index) { |
| 511 CHECK_GE(index, 0); | 512 CHECK_GE(index, 0); |
| 512 CHECK_LT(index, static_cast<int>(num_elements)); | 513 CHECK_LT(index, static_cast<int>(num_elements)); |
| 513 CHECK_EQ(ByteSize(), tagged_array->length()); | 514 CHECK_EQ(static_cast<int>(ByteSize()), tagged_array->length()); |
| 514 } | 515 } |
| 515 }; | 516 }; |
| 516 | 517 |
| 517 | 518 |
| 518 template <typename E> | 519 template <typename E> |
| 519 static void RunAccessTest(MachineRepresentation rep, E* original_elements, | 520 static void RunAccessTest(MachineRepresentation rep, E* original_elements, |
| 520 size_t num) { | 521 size_t num) { |
| 521 int num_elements = static_cast<int>(num); | 522 int num_elements = static_cast<int>(num); |
| 522 | 523 |
| 523 for (int taggedness = 0; taggedness < 2; taggedness++) { | 524 for (int taggedness = 0; taggedness < 2; taggedness++) { |
| (...skipping 839 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1363 | 1364 |
| 1364 Node* store = t.graph()->NewNode(t.simplified()->StoreField(access), t.p0, | 1365 Node* store = t.graph()->NewNode(t.simplified()->StoreField(access), t.p0, |
| 1365 t.p1, t.start, t.start); | 1366 t.p1, t.start, t.start); |
| 1366 t.Effect(store); | 1367 t.Effect(store); |
| 1367 t.Lower(); | 1368 t.Lower(); |
| 1368 | 1369 |
| 1369 CHECK_EQ(IrOpcode::kStore, store->opcode()); | 1370 CHECK_EQ(IrOpcode::kStore, store->opcode()); |
| 1370 CHECK_EQ(t.p0, store->InputAt(0)); | 1371 CHECK_EQ(t.p0, store->InputAt(0)); |
| 1371 CheckChangeOf(IrOpcode::kChangeTaggedToFloat64, t.p1, store->InputAt(2)); | 1372 CheckChangeOf(IrOpcode::kChangeTaggedToFloat64, t.p1, store->InputAt(2)); |
| 1372 } | 1373 } |
| OLD | NEW |