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

Side by Side Diff: src/compiler/ia32/instruction-selector-ia32.cc

Issue 500343002: [turbofan] Add backend support for load/store float32 values. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: REBASE Created 6 years, 3 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 | Annotate | Revision Log
« no previous file with comments | « src/compiler/ia32/instruction-codes-ia32.h ('k') | src/compiler/instruction-selector.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 #include "src/compiler/instruction-selector-impl.h" 5 #include "src/compiler/instruction-selector-impl.h"
6 #include "src/compiler/node-matchers.h" 6 #include "src/compiler/node-matchers.h"
7 #include "src/compiler/node-properties-inl.h" 7 #include "src/compiler/node-properties-inl.h"
8 8
9 namespace v8 { 9 namespace v8 {
10 namespace internal { 10 namespace internal {
(...skipping 29 matching lines...) Expand all
40 }; 40 };
41 41
42 42
43 void InstructionSelector::VisitLoad(Node* node) { 43 void InstructionSelector::VisitLoad(Node* node) {
44 MachineType rep = RepresentationOf(OpParameter<MachineType>(node)); 44 MachineType rep = RepresentationOf(OpParameter<MachineType>(node));
45 MachineType typ = TypeOf(OpParameter<MachineType>(node)); 45 MachineType typ = TypeOf(OpParameter<MachineType>(node));
46 IA32OperandGenerator g(this); 46 IA32OperandGenerator g(this);
47 Node* base = node->InputAt(0); 47 Node* base = node->InputAt(0);
48 Node* index = node->InputAt(1); 48 Node* index = node->InputAt(1);
49 49
50 InstructionOperand* output = rep == kRepFloat64 50 InstructionOperand* output = (rep == kRepFloat32 || rep == kRepFloat64)
51 ? g.DefineAsDoubleRegister(node) 51 ? g.DefineAsDoubleRegister(node)
52 : g.DefineAsRegister(node); 52 : g.DefineAsRegister(node);
53 ArchOpcode opcode; 53 ArchOpcode opcode;
54 // TODO(titzer): signed/unsigned small loads 54 // TODO(titzer): signed/unsigned small loads
55 switch (rep) { 55 switch (rep) {
56 case kRepFloat32:
57 opcode = kIA32Movss;
58 break;
56 case kRepFloat64: 59 case kRepFloat64:
57 opcode = kIA32Movsd; 60 opcode = kIA32Movsd;
58 break; 61 break;
59 case kRepBit: // Fall through. 62 case kRepBit: // Fall through.
60 case kRepWord8: 63 case kRepWord8:
61 opcode = typ == kTypeInt32 ? kIA32Movsxbl : kIA32Movzxbl; 64 opcode = typ == kTypeInt32 ? kIA32Movsxbl : kIA32Movzxbl;
62 break; 65 break;
63 case kRepWord16: 66 case kRepWord16:
64 opcode = typ == kTypeInt32 ? kIA32Movsxwl : kIA32Movzxwl; 67 opcode = typ == kTypeInt32 ? kIA32Movsxwl : kIA32Movzxwl;
65 break; 68 break;
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
104 // and pass them here instead of using fixed regs 107 // and pass them here instead of using fixed regs
105 // TODO(dcarney): handle immediate indices. 108 // TODO(dcarney): handle immediate indices.
106 InstructionOperand* temps[] = {g.TempRegister(ecx), g.TempRegister(edx)}; 109 InstructionOperand* temps[] = {g.TempRegister(ecx), g.TempRegister(edx)};
107 Emit(kIA32StoreWriteBarrier, NULL, g.UseFixed(base, ebx), 110 Emit(kIA32StoreWriteBarrier, NULL, g.UseFixed(base, ebx),
108 g.UseFixed(index, ecx), g.UseFixed(value, edx), ARRAY_SIZE(temps), 111 g.UseFixed(index, ecx), g.UseFixed(value, edx), ARRAY_SIZE(temps),
109 temps); 112 temps);
110 return; 113 return;
111 } 114 }
112 DCHECK_EQ(kNoWriteBarrier, store_rep.write_barrier_kind); 115 DCHECK_EQ(kNoWriteBarrier, store_rep.write_barrier_kind);
113 InstructionOperand* val; 116 InstructionOperand* val;
114 if (rep == kRepFloat64) { 117 if (rep == kRepFloat32 || rep == kRepFloat64) {
115 val = g.UseDoubleRegister(value); 118 val = g.UseDoubleRegister(value);
116 } else { 119 } else {
117 if (g.CanBeImmediate(value)) { 120 if (g.CanBeImmediate(value)) {
118 val = g.UseImmediate(value); 121 val = g.UseImmediate(value);
119 } else if (rep == kRepWord8 || rep == kRepBit) { 122 } else if (rep == kRepWord8 || rep == kRepBit) {
120 val = g.UseByteRegister(value); 123 val = g.UseByteRegister(value);
121 } else { 124 } else {
122 val = g.UseRegister(value); 125 val = g.UseRegister(value);
123 } 126 }
124 } 127 }
125 ArchOpcode opcode; 128 ArchOpcode opcode;
126 switch (rep) { 129 switch (rep) {
130 case kRepFloat32:
131 opcode = kIA32Movss;
132 break;
127 case kRepFloat64: 133 case kRepFloat64:
128 opcode = kIA32Movsd; 134 opcode = kIA32Movsd;
129 break; 135 break;
130 case kRepBit: // Fall through. 136 case kRepBit: // Fall through.
131 case kRepWord8: 137 case kRepWord8:
132 opcode = kIA32Movb; 138 opcode = kIA32Movb;
133 break; 139 break;
134 case kRepWord16: 140 case kRepWord16:
135 opcode = kIA32Movw; 141 opcode = kIA32Movw;
136 break; 142 break;
(...skipping 429 matching lines...) Expand 10 before | Expand all | Expand 10 after
566 if (descriptor->kind() == CallDescriptor::kCallAddress && 572 if (descriptor->kind() == CallDescriptor::kCallAddress &&
567 buffer.pushed_nodes.size() > 0) { 573 buffer.pushed_nodes.size() > 0) {
568 DCHECK(deoptimization == NULL && continuation == NULL); 574 DCHECK(deoptimization == NULL && continuation == NULL);
569 Emit(kPopStack | MiscField::encode(buffer.pushed_nodes.size()), NULL); 575 Emit(kPopStack | MiscField::encode(buffer.pushed_nodes.size()), NULL);
570 } 576 }
571 } 577 }
572 578
573 } // namespace compiler 579 } // namespace compiler
574 } // namespace internal 580 } // namespace internal
575 } // namespace v8 581 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/ia32/instruction-codes-ia32.h ('k') | src/compiler/instruction-selector.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698