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

Side by Side Diff: src/compiler/raw-machine-assembler.h

Issue 2122853002: Implement UnaligedLoad and UnaligedStore turbofan operators. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Add UnalingedLoad and UnalignedStore tests Created 4 years, 5 months 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. 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_COMPILER_RAW_MACHINE_ASSEMBLER_H_ 5 #ifndef V8_COMPILER_RAW_MACHINE_ASSEMBLER_H_
6 #define V8_COMPILER_RAW_MACHINE_ASSEMBLER_H_ 6 #define V8_COMPILER_RAW_MACHINE_ASSEMBLER_H_
7 7
8 #include "src/assembler.h" 8 #include "src/assembler.h"
9 #include "src/compiler/common-operator.h" 9 #include "src/compiler/common-operator.h"
10 #include "src/compiler/graph.h" 10 #include "src/compiler/graph.h"
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
126 Node* Store(MachineRepresentation rep, Node* base, Node* value, 126 Node* Store(MachineRepresentation rep, Node* base, Node* value,
127 WriteBarrierKind write_barrier) { 127 WriteBarrierKind write_barrier) {
128 return Store(rep, base, IntPtrConstant(0), value, write_barrier); 128 return Store(rep, base, IntPtrConstant(0), value, write_barrier);
129 } 129 }
130 Node* Store(MachineRepresentation rep, Node* base, Node* index, Node* value, 130 Node* Store(MachineRepresentation rep, Node* base, Node* index, Node* value,
131 WriteBarrierKind write_barrier) { 131 WriteBarrierKind write_barrier) {
132 return AddNode(machine()->Store(StoreRepresentation(rep, write_barrier)), 132 return AddNode(machine()->Store(StoreRepresentation(rep, write_barrier)),
133 base, index, value); 133 base, index, value);
134 } 134 }
135 135
136 // Unaligned memory operations
137 Node* UnalignedLoad(MachineType rep, Node* base) {
138 return UnalignedLoad(rep, base, IntPtrConstant(0));
139 }
140 Node* UnalignedLoad(MachineType rep, Node* base, Node* index) {
141 if (machine()->UnalignedLoadSupported(rep, 1)) {
142 return AddNode(machine()->Load(rep), base, index);
143 } else {
144 return AddNode(machine()->UnalignedLoad(rep), base, index);
145 }
146 }
147 Node* UnalignedStore(MachineRepresentation rep, Node* base, Node* value) {
148 return UnalignedStore(rep, base, IntPtrConstant(0), value);
149 }
150 Node* UnalignedStore(MachineRepresentation rep, Node* base, Node* index,
151 Node* value) {
152 MachineType t = MachineType::TypeForRepresentation(rep);
153 if (machine()->UnalignedStoreSupported(t, 1)) {
154 return AddNode(machine()->Store(StoreRepresentation(
155 rep, WriteBarrierKind::kNoWriteBarrier)),
156 base, index, value);
157 } else {
158 return AddNode(
159 machine()->UnalignedStore(UnalignedStoreRepresentation(rep)), base,
160 index, value);
161 }
162 }
163
136 // Atomic memory operations. 164 // Atomic memory operations.
137 Node* AtomicLoad(MachineType rep, Node* base, Node* index) { 165 Node* AtomicLoad(MachineType rep, Node* base, Node* index) {
138 return AddNode(machine()->AtomicLoad(rep), base, index); 166 return AddNode(machine()->AtomicLoad(rep), base, index);
139 } 167 }
140 Node* AtomicStore(MachineRepresentation rep, Node* base, Node* index, 168 Node* AtomicStore(MachineRepresentation rep, Node* base, Node* index,
141 Node* value) { 169 Node* value) {
142 return AddNode(machine()->AtomicStore(rep), base, index, value); 170 return AddNode(machine()->AtomicStore(rep), base, index, value);
143 } 171 }
144 172
145 // Arithmetic Operations. 173 // Arithmetic Operations.
(...skipping 497 matching lines...) Expand 10 before | Expand all | Expand 10 after
643 // Parameters. 671 // Parameters.
644 Node* Parameter(size_t index); 672 Node* Parameter(size_t index);
645 673
646 // Pointer utilities. 674 // Pointer utilities.
647 Node* LoadFromPointer(void* address, MachineType rep, int32_t offset = 0) { 675 Node* LoadFromPointer(void* address, MachineType rep, int32_t offset = 0) {
648 return Load(rep, PointerConstant(address), Int32Constant(offset)); 676 return Load(rep, PointerConstant(address), Int32Constant(offset));
649 } 677 }
650 Node* StoreToPointer(void* address, MachineRepresentation rep, Node* node) { 678 Node* StoreToPointer(void* address, MachineRepresentation rep, Node* node) {
651 return Store(rep, PointerConstant(address), node, kNoWriteBarrier); 679 return Store(rep, PointerConstant(address), node, kNoWriteBarrier);
652 } 680 }
681 Node* UnalignedLoadFromPointer(void* address, MachineType rep,
682 int32_t offset = 0) {
683 return UnalignedLoad(rep, PointerConstant(address), Int32Constant(offset));
684 }
685 Node* UnalignedStoreToPointer(void* address, MachineRepresentation rep,
686 Node* node) {
687 return UnalignedStore(rep, PointerConstant(address), node);
688 }
653 Node* StringConstant(const char* string) { 689 Node* StringConstant(const char* string) {
654 return HeapConstant(isolate()->factory()->InternalizeUtf8String(string)); 690 return HeapConstant(isolate()->factory()->InternalizeUtf8String(string));
655 } 691 }
656 692
657 // Call a given call descriptor and the given arguments. 693 // Call a given call descriptor and the given arguments.
658 Node* CallN(CallDescriptor* desc, Node* function, Node** args); 694 Node* CallN(CallDescriptor* desc, Node* function, Node** args);
659 // Call a given call descriptor and the given arguments and frame-state. 695 // Call a given call descriptor and the given arguments and frame-state.
660 Node* CallNWithFrameState(CallDescriptor* desc, Node* function, Node** args, 696 Node* CallNWithFrameState(CallDescriptor* desc, Node* function, Node** args,
661 Node* frame_state); 697 Node* frame_state);
662 // Call to a runtime function with zero arguments. 698 // Call to a runtime function with zero arguments.
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
795 bool deferred_; 831 bool deferred_;
796 friend class RawMachineAssembler; 832 friend class RawMachineAssembler;
797 DISALLOW_COPY_AND_ASSIGN(RawMachineLabel); 833 DISALLOW_COPY_AND_ASSIGN(RawMachineLabel);
798 }; 834 };
799 835
800 } // namespace compiler 836 } // namespace compiler
801 } // namespace internal 837 } // namespace internal
802 } // namespace v8 838 } // namespace v8
803 839
804 #endif // V8_COMPILER_RAW_MACHINE_ASSEMBLER_H_ 840 #endif // V8_COMPILER_RAW_MACHINE_ASSEMBLER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698