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

Side by Side Diff: src/ppc/macro-assembler-ppc.h

Issue 2523473002: [cleanup] Drop handwritten KeyedStoreIC code (Closed)
Patch Set: rebased Created 4 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
« no previous file with comments | « src/ppc/codegen-ppc.cc ('k') | src/ppc/macro-assembler-ppc.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 #ifndef V8_PPC_MACRO_ASSEMBLER_PPC_H_ 5 #ifndef V8_PPC_MACRO_ASSEMBLER_PPC_H_
6 #define V8_PPC_MACRO_ASSEMBLER_PPC_H_ 6 #define V8_PPC_MACRO_ASSEMBLER_PPC_H_
7 7
8 #include "src/assembler.h" 8 #include "src/assembler.h"
9 #include "src/bailout-reason.h" 9 #include "src/bailout-reason.h"
10 #include "src/frames.h" 10 #include "src/frames.h"
(...skipping 452 matching lines...) Expand 10 before | Expand all | Expand 10 after
463 // Load the global object from the current context. 463 // Load the global object from the current context.
464 void LoadGlobalObject(Register dst) { 464 void LoadGlobalObject(Register dst) {
465 LoadNativeContextSlot(Context::EXTENSION_INDEX, dst); 465 LoadNativeContextSlot(Context::EXTENSION_INDEX, dst);
466 } 466 }
467 467
468 // Load the global proxy from the current context. 468 // Load the global proxy from the current context.
469 void LoadGlobalProxy(Register dst) { 469 void LoadGlobalProxy(Register dst) {
470 LoadNativeContextSlot(Context::GLOBAL_PROXY_INDEX, dst); 470 LoadNativeContextSlot(Context::GLOBAL_PROXY_INDEX, dst);
471 } 471 }
472 472
473 // Conditionally load the cached Array transitioned map of type
474 // transitioned_kind from the native context if the map in register
475 // map_in_out is the cached Array map in the native context of
476 // expected_kind.
477 void LoadTransitionedArrayMapConditional(ElementsKind expected_kind,
478 ElementsKind transitioned_kind,
479 Register map_in_out,
480 Register scratch,
481 Label* no_map_match);
482
483 void LoadNativeContextSlot(int index, Register dst); 473 void LoadNativeContextSlot(int index, Register dst);
484 474
485 // Load the initial map from the global function. The registers 475 // Load the initial map from the global function. The registers
486 // function and map can be the same, function is then overwritten. 476 // function and map can be the same, function is then overwritten.
487 void LoadGlobalFunctionInitialMap(Register function, Register map, 477 void LoadGlobalFunctionInitialMap(Register function, Register map,
488 Register scratch); 478 Register scratch);
489 479
490 void InitializeRootRegister() { 480 void InitializeRootRegister() {
491 ExternalReference roots_array_start = 481 ExternalReference roots_array_start =
492 ExternalReference::roots_array_start(isolate()); 482 ExternalReference::roots_array_start(isolate());
(...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after
796 // other registers. 786 // other registers.
797 // Type_reg can be no_reg. In that case ip is used. 787 // Type_reg can be no_reg. In that case ip is used.
798 void CompareObjectType(Register heap_object, Register map, Register type_reg, 788 void CompareObjectType(Register heap_object, Register map, Register type_reg,
799 InstanceType type); 789 InstanceType type);
800 790
801 // Compare instance type in a map. map contains a valid map object whose 791 // Compare instance type in a map. map contains a valid map object whose
802 // object type should be compared with the given type. This both 792 // object type should be compared with the given type. This both
803 // sets the flags and leaves the object type in the type_reg register. 793 // sets the flags and leaves the object type in the type_reg register.
804 void CompareInstanceType(Register map, Register type_reg, InstanceType type); 794 void CompareInstanceType(Register map, Register type_reg, InstanceType type);
805 795
806 // Check if a map for a JSObject indicates that the object can have both smi
807 // and HeapObject elements. Jump to the specified label if it does not.
808 void CheckFastObjectElements(Register map, Register scratch, Label* fail);
809
810 // Check if a map for a JSObject indicates that the object has fast smi only
811 // elements. Jump to the specified label if it does not.
812 void CheckFastSmiElements(Register map, Register scratch, Label* fail);
813
814 // Check to see if maybe_number can be stored as a double in
815 // FastDoubleElements. If it can, store it at the index specified by key in
816 // the FastDoubleElements array elements. Otherwise jump to fail.
817 void StoreNumberToDoubleElements(Register value_reg, Register key_reg,
818 Register elements_reg, Register scratch1,
819 DoubleRegister double_scratch, Label* fail,
820 int elements_offset = 0);
821
822 // Compare an object's map with the specified map and its transitioned 796 // Compare an object's map with the specified map and its transitioned
823 // elements maps if mode is ALLOW_ELEMENT_TRANSITION_MAPS. Condition flags are 797 // elements maps if mode is ALLOW_ELEMENT_TRANSITION_MAPS. Condition flags are
824 // set with result of map compare. If multiple map compares are required, the 798 // set with result of map compare. If multiple map compares are required, the
825 // compare sequences branches to early_success. 799 // compare sequences branches to early_success.
826 void CompareMap(Register obj, Register scratch, Handle<Map> map, 800 void CompareMap(Register obj, Register scratch, Handle<Map> map,
827 Label* early_success); 801 Label* early_success);
828 802
829 // As above, but the map of the object is already loaded into the register 803 // As above, but the map of the object is already loaded into the register
830 // which is preserved by the code generated. 804 // which is preserved by the code generated.
831 void CompareMap(Register obj_map, Handle<Map> map, Label* early_success); 805 void CompareMap(Register obj_map, Handle<Map> map, Label* early_success);
(...skipping 470 matching lines...) Expand 10 before | Expand all | Expand 10 after
1302 SmiToArrayOffset(dst, src, elementSizeLog2); 1276 SmiToArrayOffset(dst, src, elementSizeLog2);
1303 } else { 1277 } else {
1304 ShiftLeftImm(dst, src, Operand(elementSizeLog2)); 1278 ShiftLeftImm(dst, src, Operand(elementSizeLog2));
1305 } 1279 }
1306 } 1280 }
1307 1281
1308 // Untag the source value into destination and jump if source is a smi. 1282 // Untag the source value into destination and jump if source is a smi.
1309 // Souce and destination can be the same register. 1283 // Souce and destination can be the same register.
1310 void UntagAndJumpIfSmi(Register dst, Register src, Label* smi_case); 1284 void UntagAndJumpIfSmi(Register dst, Register src, Label* smi_case);
1311 1285
1312 // Untag the source value into destination and jump if source is not a smi.
1313 // Souce and destination can be the same register.
1314 void UntagAndJumpIfNotSmi(Register dst, Register src, Label* non_smi_case);
1315
1316 inline void TestIfSmi(Register value, Register scratch) { 1286 inline void TestIfSmi(Register value, Register scratch) {
1317 TestBitRange(value, kSmiTagSize - 1, 0, scratch); 1287 TestBitRange(value, kSmiTagSize - 1, 0, scratch);
1318 } 1288 }
1319 1289
1320 inline void TestIfPositiveSmi(Register value, Register scratch) { 1290 inline void TestIfPositiveSmi(Register value, Register scratch) {
1321 #if V8_TARGET_ARCH_PPC64 1291 #if V8_TARGET_ARCH_PPC64
1322 rldicl(scratch, value, 1, kBitsPerPointer - (1 + kSmiTagSize), SetRC); 1292 rldicl(scratch, value, 1, kBitsPerPointer - (1 + kSmiTagSize), SetRC);
1323 #else 1293 #else
1324 rlwinm(scratch, value, 1, kBitsPerPointer - (1 + kSmiTagSize), 1294 rlwinm(scratch, value, 1, kBitsPerPointer - (1 + kSmiTagSize),
1325 kBitsPerPointer - 1, SetRC); 1295 kBitsPerPointer - 1, SetRC);
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after
1521 // AllocationMemento object that can be checked for in order to pretransition 1491 // AllocationMemento object that can be checked for in order to pretransition
1522 // to another type. 1492 // to another type.
1523 // On entry, receiver_reg should point to the array object. 1493 // On entry, receiver_reg should point to the array object.
1524 // scratch_reg gets clobbered. 1494 // scratch_reg gets clobbered.
1525 // If allocation info is present, condition flags are set to eq. 1495 // If allocation info is present, condition flags are set to eq.
1526 void TestJSArrayForAllocationMemento(Register receiver_reg, 1496 void TestJSArrayForAllocationMemento(Register receiver_reg,
1527 Register scratch_reg, 1497 Register scratch_reg,
1528 Register scratch2_reg, 1498 Register scratch2_reg,
1529 Label* no_memento_found); 1499 Label* no_memento_found);
1530 1500
1531 void JumpIfJSArrayHasAllocationMemento(Register receiver_reg,
1532 Register scratch_reg,
1533 Register scratch2_reg,
1534 Label* memento_found) {
1535 Label no_memento_found;
1536 TestJSArrayForAllocationMemento(receiver_reg, scratch_reg, scratch2_reg,
1537 &no_memento_found);
1538 beq(memento_found);
1539 bind(&no_memento_found);
1540 }
1541
1542 // Jumps to found label if a prototype map has dictionary elements.
1543 void JumpIfDictionaryInPrototypeChain(Register object, Register scratch0,
1544 Register scratch1, Label* found);
1545
1546 // Loads the constant pool pointer (kConstantPoolRegister). 1501 // Loads the constant pool pointer (kConstantPoolRegister).
1547 void LoadConstantPoolPointerRegisterFromCodeTargetAddress( 1502 void LoadConstantPoolPointerRegisterFromCodeTargetAddress(
1548 Register code_target_address); 1503 Register code_target_address);
1549 void LoadConstantPoolPointerRegister(); 1504 void LoadConstantPoolPointerRegister();
1550 void LoadConstantPoolPointerRegister(Register base, int code_entry_delta = 0); 1505 void LoadConstantPoolPointerRegister(Register base, int code_entry_delta = 0);
1551 1506
1552 void AbortConstantPoolBuilding() { 1507 void AbortConstantPoolBuilding() {
1553 #ifdef DEBUG 1508 #ifdef DEBUG
1554 // Avoid DCHECK(!is_linked()) failure in ~Label() 1509 // Avoid DCHECK(!is_linked()) failure in ~Label()
1555 bind(ConstantPoolPosition()); 1510 bind(ConstantPoolPosition());
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
1647 inline MemOperand NativeContextMemOperand() { 1602 inline MemOperand NativeContextMemOperand() {
1648 return ContextMemOperand(cp, Context::NATIVE_CONTEXT_INDEX); 1603 return ContextMemOperand(cp, Context::NATIVE_CONTEXT_INDEX);
1649 } 1604 }
1650 1605
1651 #define ACCESS_MASM(masm) masm-> 1606 #define ACCESS_MASM(masm) masm->
1652 1607
1653 } // namespace internal 1608 } // namespace internal
1654 } // namespace v8 1609 } // namespace v8
1655 1610
1656 #endif // V8_PPC_MACRO_ASSEMBLER_PPC_H_ 1611 #endif // V8_PPC_MACRO_ASSEMBLER_PPC_H_
OLDNEW
« no previous file with comments | « src/ppc/codegen-ppc.cc ('k') | src/ppc/macro-assembler-ppc.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698