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

Side by Side Diff: src/compiler/ia32/code-generator-ia32.cc

Issue 505713002: [turbofan] Add backend support for signed loads. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Fix x64. 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
OLDNEW
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 317 matching lines...) Expand 10 before | Expand all | Expand 10 after
328 __ add(i.OutputRegister(), Immediate(0x80000000)); 328 __ add(i.OutputRegister(), Immediate(0x80000000));
329 break; 329 break;
330 } 330 }
331 case kSSEInt32ToFloat64: 331 case kSSEInt32ToFloat64:
332 __ cvtsi2sd(i.OutputDoubleRegister(), i.InputOperand(0)); 332 __ cvtsi2sd(i.OutputDoubleRegister(), i.InputOperand(0));
333 break; 333 break;
334 case kSSEUint32ToFloat64: 334 case kSSEUint32ToFloat64:
335 // TODO(turbofan): IA32 SSE LoadUint32() should take an operand. 335 // TODO(turbofan): IA32 SSE LoadUint32() should take an operand.
336 __ LoadUint32(i.OutputDoubleRegister(), i.InputRegister(0)); 336 __ LoadUint32(i.OutputDoubleRegister(), i.InputRegister(0));
337 break; 337 break;
338 case kSSELoad: 338 case kIA32Movsxbl:
339 __ movsd(i.OutputDoubleRegister(), i.MemoryOperand()); 339 __ movsx_b(i.OutputRegister(), i.MemoryOperand());
340 break; 340 break;
341 case kSSEStore: { 341 case kIA32Movzxbl:
342 __ movzx_b(i.OutputRegister(), i.MemoryOperand());
343 break;
344 case kIA32Movb: {
342 int index = 0; 345 int index = 0;
343 Operand operand = i.MemoryOperand(&index); 346 Operand operand = i.MemoryOperand(&index);
344 __ movsd(operand, i.InputDoubleRegister(index)); 347 if (HasImmediateInput(instr, index)) {
348 __ mov_b(operand, i.InputInt8(index));
349 } else {
350 __ mov_b(operand, i.InputRegister(index));
351 }
345 break; 352 break;
346 } 353 }
347 case kIA32LoadWord8: 354 case kIA32Movsxwl:
348 __ movzx_b(i.OutputRegister(), i.MemoryOperand()); 355 __ movsx_w(i.OutputRegister(), i.MemoryOperand());
349 break; 356 break;
350 case kIA32StoreWord8: { 357 case kIA32Movzxwl:
358 __ movzx_w(i.OutputRegister(), i.MemoryOperand());
359 break;
360 case kIA32Movw: {
351 int index = 0; 361 int index = 0;
352 Operand operand = i.MemoryOperand(&index); 362 Operand operand = i.MemoryOperand(&index);
353 __ mov_b(operand, i.InputRegister(index)); 363 if (HasImmediateInput(instr, index)) {
364 __ mov_w(operand, i.InputInt16(index));
365 } else {
366 __ mov_w(operand, i.InputRegister(index));
367 }
354 break; 368 break;
355 } 369 }
356 case kIA32StoreWord8I: { 370 case kIA32Movl:
357 int index = 0; 371 if (instr->HasOutput()) {
358 Operand operand = i.MemoryOperand(&index); 372 __ mov(i.OutputRegister(), i.MemoryOperand());
359 __ mov_b(operand, i.InputInt8(index)); 373 } else {
374 int index = 0;
375 Operand operand = i.MemoryOperand(&index);
376 if (HasImmediateInput(instr, index)) {
377 __ mov(operand, i.InputImmediate(index));
378 } else {
379 __ mov(operand, i.InputRegister(index));
380 }
381 }
360 break; 382 break;
361 } 383 case kIA32Movsd:
362 case kIA32LoadWord16: 384 if (instr->HasOutput()) {
363 __ movzx_w(i.OutputRegister(), i.MemoryOperand()); 385 __ movsd(i.OutputDoubleRegister(), i.MemoryOperand());
386 } else {
387 int index = 0;
388 Operand operand = i.MemoryOperand(&index);
389 __ movsd(operand, i.InputDoubleRegister(index));
390 }
364 break; 391 break;
365 case kIA32StoreWord16: {
366 int index = 0;
367 Operand operand = i.MemoryOperand(&index);
368 __ mov_w(operand, i.InputRegister(index));
369 break;
370 }
371 case kIA32StoreWord16I: {
372 int index = 0;
373 Operand operand = i.MemoryOperand(&index);
374 __ mov_w(operand, i.InputInt16(index));
375 break;
376 }
377 case kIA32LoadWord32:
378 __ mov(i.OutputRegister(), i.MemoryOperand());
379 break;
380 case kIA32StoreWord32: {
381 int index = 0;
382 Operand operand = i.MemoryOperand(&index);
383 __ mov(operand, i.InputRegister(index));
384 break;
385 }
386 case kIA32StoreWord32I: {
387 int index = 0;
388 Operand operand = i.MemoryOperand(&index);
389 __ mov(operand, i.InputImmediate(index));
390 break;
391 }
392 case kIA32StoreWriteBarrier: { 392 case kIA32StoreWriteBarrier: {
393 Register object = i.InputRegister(0); 393 Register object = i.InputRegister(0);
394 Register index = i.InputRegister(1); 394 Register index = i.InputRegister(1);
395 Register value = i.InputRegister(2); 395 Register value = i.InputRegister(2);
396 __ mov(Operand(object, index, times_1, 0), value); 396 __ mov(Operand(object, index, times_1, 0), value);
397 __ lea(index, Operand(object, index, times_1, 0)); 397 __ lea(index, Operand(object, index, times_1, 0));
398 SaveFPRegsMode mode = code_->frame()->DidAllocateDoubleRegisters() 398 SaveFPRegsMode mode = code_->frame()->DidAllocateDoubleRegisters()
399 ? kSaveFPRegs 399 ? kSaveFPRegs
400 : kDontSaveFPRegs; 400 : kDontSaveFPRegs;
401 __ RecordWrite(object, index, value, mode); 401 __ RecordWrite(object, index, value, mode);
(...skipping 536 matching lines...) Expand 10 before | Expand all | Expand 10 after
938 } 938 }
939 939
940 940
941 void CodeGenerator::AddNopForSmiCodeInlining() { __ nop(); } 941 void CodeGenerator::AddNopForSmiCodeInlining() { __ nop(); }
942 942
943 #undef __ 943 #undef __
944 944
945 } 945 }
946 } 946 }
947 } // namespace v8::internal::compiler 947 } // namespace v8::internal::compiler
OLDNEW
« no previous file with comments | « src/compiler/arm64/instruction-selector-arm64.cc ('k') | src/compiler/ia32/instruction-codes-ia32.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698