OLD | NEW |
1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 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/code-generator.h" | 5 #include "src/compiler/code-generator.h" |
6 | 6 |
7 #include "src/compiler/code-generator-impl.h" | 7 #include "src/compiler/code-generator-impl.h" |
8 #include "src/compiler/gap-resolver.h" | 8 #include "src/compiler/gap-resolver.h" |
9 #include "src/compiler/node-matchers.h" | 9 #include "src/compiler/node-matchers.h" |
10 #include "src/compiler/node-properties-inl.h" | 10 #include "src/compiler/node-properties-inl.h" |
(...skipping 15 matching lines...) Expand all Loading... |
26 : InstructionOperandConverter(gen, instr) {} | 26 : InstructionOperandConverter(gen, instr) {} |
27 | 27 |
28 Operand InputOperand(int index) { return ToOperand(instr_->InputAt(index)); } | 28 Operand InputOperand(int index) { return ToOperand(instr_->InputAt(index)); } |
29 | 29 |
30 Immediate InputImmediate(int index) { | 30 Immediate InputImmediate(int index) { |
31 return ToImmediate(instr_->InputAt(index)); | 31 return ToImmediate(instr_->InputAt(index)); |
32 } | 32 } |
33 | 33 |
34 Operand OutputOperand() { return ToOperand(instr_->Output()); } | 34 Operand OutputOperand() { return ToOperand(instr_->Output()); } |
35 | 35 |
36 Operand TempOperand(int index) { return ToOperand(instr_->TempAt(index)); } | |
37 | |
38 Operand ToOperand(InstructionOperand* op, int extra = 0) { | 36 Operand ToOperand(InstructionOperand* op, int extra = 0) { |
39 if (op->IsRegister()) { | 37 if (op->IsRegister()) { |
40 DCHECK(extra == 0); | 38 DCHECK(extra == 0); |
41 return Operand(ToRegister(op)); | 39 return Operand(ToRegister(op)); |
42 } else if (op->IsDoubleRegister()) { | 40 } else if (op->IsDoubleRegister()) { |
43 DCHECK(extra == 0); | 41 DCHECK(extra == 0); |
44 return Operand(ToDoubleRegister(op)); | 42 return Operand(ToDoubleRegister(op)); |
45 } | 43 } |
46 DCHECK(op->IsStackSlot() || op->IsDoubleStackSlot()); | 44 DCHECK(op->IsStackSlot() || op->IsDoubleStackSlot()); |
47 // The linkage computes where all spill slots are located. | 45 // The linkage computes where all spill slots are located. |
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
273 break; | 271 break; |
274 case kIA32Sub: | 272 case kIA32Sub: |
275 if (HasImmediateInput(instr, 1)) { | 273 if (HasImmediateInput(instr, 1)) { |
276 __ sub(i.InputOperand(0), i.InputImmediate(1)); | 274 __ sub(i.InputOperand(0), i.InputImmediate(1)); |
277 } else { | 275 } else { |
278 __ sub(i.InputRegister(0), i.InputOperand(1)); | 276 __ sub(i.InputRegister(0), i.InputOperand(1)); |
279 } | 277 } |
280 break; | 278 break; |
281 case kIA32Shl: | 279 case kIA32Shl: |
282 if (HasImmediateInput(instr, 1)) { | 280 if (HasImmediateInput(instr, 1)) { |
283 __ shl(i.OutputRegister(), i.InputInt5(1)); | 281 __ shl(i.OutputOperand(), i.InputInt5(1)); |
284 } else { | 282 } else { |
285 __ shl_cl(i.OutputRegister()); | 283 __ shl_cl(i.OutputOperand()); |
286 } | 284 } |
287 break; | 285 break; |
288 case kIA32Shr: | 286 case kIA32Shr: |
289 if (HasImmediateInput(instr, 1)) { | 287 if (HasImmediateInput(instr, 1)) { |
290 __ shr(i.OutputRegister(), i.InputInt5(1)); | 288 __ shr(i.OutputOperand(), i.InputInt5(1)); |
291 } else { | 289 } else { |
292 __ shr_cl(i.OutputRegister()); | 290 __ shr_cl(i.OutputOperand()); |
293 } | 291 } |
294 break; | 292 break; |
295 case kIA32Sar: | 293 case kIA32Sar: |
296 if (HasImmediateInput(instr, 1)) { | 294 if (HasImmediateInput(instr, 1)) { |
297 __ sar(i.OutputRegister(), i.InputInt5(1)); | 295 __ sar(i.OutputOperand(), i.InputInt5(1)); |
298 } else { | 296 } else { |
299 __ sar_cl(i.OutputRegister()); | 297 __ sar_cl(i.OutputOperand()); |
300 } | 298 } |
301 break; | 299 break; |
302 case kIA32Ror: | 300 case kIA32Ror: |
303 if (HasImmediateInput(instr, 1)) { | 301 if (HasImmediateInput(instr, 1)) { |
304 __ ror(i.OutputRegister(), i.InputInt5(1)); | 302 __ ror(i.OutputOperand(), i.InputInt5(1)); |
305 } else { | 303 } else { |
306 __ ror_cl(i.OutputRegister()); | 304 __ ror_cl(i.OutputOperand()); |
307 } | 305 } |
308 break; | 306 break; |
309 case kSSEFloat64Cmp: | 307 case kSSEFloat64Cmp: |
310 __ ucomisd(i.InputDoubleRegister(0), i.InputOperand(1)); | 308 __ ucomisd(i.InputDoubleRegister(0), i.InputOperand(1)); |
311 break; | 309 break; |
312 case kSSEFloat64Add: | 310 case kSSEFloat64Add: |
313 __ addsd(i.InputDoubleRegister(0), i.InputDoubleRegister(1)); | 311 __ addsd(i.InputDoubleRegister(0), i.InputDoubleRegister(1)); |
314 break; | 312 break; |
315 case kSSEFloat64Sub: | 313 case kSSEFloat64Sub: |
316 __ subsd(i.InputDoubleRegister(0), i.InputDoubleRegister(1)); | 314 __ subsd(i.InputDoubleRegister(0), i.InputDoubleRegister(1)); |
(...skipping 714 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1031 } | 1029 } |
1032 } | 1030 } |
1033 MarkLazyDeoptSite(); | 1031 MarkLazyDeoptSite(); |
1034 } | 1032 } |
1035 | 1033 |
1036 #undef __ | 1034 #undef __ |
1037 | 1035 |
1038 } // namespace compiler | 1036 } // namespace compiler |
1039 } // namespace internal | 1037 } // namespace internal |
1040 } // namespace v8 | 1038 } // namespace v8 |
OLD | NEW |