From c4a4c95e3268a2bc2018c7182996c1a5a993aca7 Mon Sep 17 00:00:00 2001 From: "plind44@gmail.com" Date: Fri, 8 Nov 2013 19:35:37 +0000 Subject: [PATCH] MIPS: Reland 17588: Add signed/unsigned 8-bit and 16-bit Representations to Crankshaft. Port r17606 (bc5ef55) BUG= R=plind44@gmail.com Review URL: https://codereview.chromium.org/66163007 Patch from Balazs Kilvady . git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@17609 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/mips/lithium-codegen-mips.cc | 30 +++++------------------------- src/mips/macro-assembler-mips.cc | 32 ++++++++++++++++++++++++++++++++ src/mips/macro-assembler-mips.h | 3 +++ 3 files changed, 40 insertions(+), 25 deletions(-) diff --git a/src/mips/lithium-codegen-mips.cc b/src/mips/lithium-codegen-mips.cc index ecf738f..5c2d636 100644 --- a/src/mips/lithium-codegen-mips.cc +++ b/src/mips/lithium-codegen-mips.cc @@ -2921,11 +2921,7 @@ void LCodeGen::DoLoadNamedField(LLoadNamedField* instr) { if (access.IsExternalMemory()) { Register result = ToRegister(instr->result()); MemOperand operand = MemOperand(object, offset); - if (access.representation().IsByte()) { - __ lb(result, operand); - } else { - __ lw(result, operand); - } + __ Load(result, operand, access.representation()); return; } @@ -2941,11 +2937,7 @@ void LCodeGen::DoLoadNamedField(LLoadNamedField* instr) { object = result; } MemOperand operand = FieldMemOperand(object, offset); - if (access.representation().IsByte()) { - __ lb(result, operand); - } else { - __ lw(result, operand); - } + __ Load(result, operand, access.representation()); } @@ -4106,11 +4098,7 @@ void LCodeGen::DoStoreNamedField(LStoreNamedField* instr) { if (access.IsExternalMemory()) { Register value = ToRegister(instr->value()); MemOperand operand = MemOperand(object, offset); - if (representation.IsByte()) { - __ sb(value, operand); - } else { - __ sw(value, operand); - } + __ Store(value, operand, representation); return; } @@ -4156,11 +4144,7 @@ void LCodeGen::DoStoreNamedField(LStoreNamedField* instr) { ? OMIT_SMI_CHECK : INLINE_SMI_CHECK; if (access.IsInobject()) { MemOperand operand = FieldMemOperand(object, offset); - if (representation.IsByte()) { - __ sb(value, operand); - } else { - __ sw(value, operand); - } + __ Store(value, operand, representation); if (instr->hydrogen()->NeedsWriteBarrier()) { // Update the write barrier for the object for in-object properties. __ RecordWriteField(object, @@ -4175,11 +4159,7 @@ void LCodeGen::DoStoreNamedField(LStoreNamedField* instr) { } else { __ lw(scratch, FieldMemOperand(object, JSObject::kPropertiesOffset)); MemOperand operand = FieldMemOperand(scratch, offset); - if (representation.IsByte()) { - __ sb(value, operand); - } else { - __ sw(value, operand); - } + __ Store(value, operand, representation); if (instr->hydrogen()->NeedsWriteBarrier()) { // Update the write barrier for the properties array. // object is used as a scratch register. diff --git a/src/mips/macro-assembler-mips.cc b/src/mips/macro-assembler-mips.cc index f751e59..7b85688 100644 --- a/src/mips/macro-assembler-mips.cc +++ b/src/mips/macro-assembler-mips.cc @@ -53,6 +53,38 @@ MacroAssembler::MacroAssembler(Isolate* arg_isolate, void* buffer, int size) } +void MacroAssembler::Load(Register dst, + const MemOperand& src, + Representation r) { + ASSERT(!r.IsDouble()); + if (r.IsInteger8()) { + lb(dst, src); + } else if (r.IsUInteger8()) { + lbu(dst, src); + } else if (r.IsInteger16()) { + lh(dst, src); + } else if (r.IsUInteger16()) { + lhu(dst, src); + } else { + lw(dst, src); + } +} + + +void MacroAssembler::Store(Register src, + const MemOperand& dst, + Representation r) { + ASSERT(!r.IsDouble()); + if (r.IsInteger8() || r.IsUInteger8()) { + sb(src, dst); + } else if (r.IsInteger16() || r.IsUInteger16()) { + sh(src, dst); + } else { + sw(src, dst); + } +} + + void MacroAssembler::LoadRoot(Register destination, Heap::RootListIndex index) { lw(destination, MemOperand(s6, index << kPointerSizeLog2)); diff --git a/src/mips/macro-assembler-mips.h b/src/mips/macro-assembler-mips.h index 77f1e9b..a9ad5cf 100644 --- a/src/mips/macro-assembler-mips.h +++ b/src/mips/macro-assembler-mips.h @@ -279,6 +279,9 @@ class MacroAssembler: public Assembler { Branch(L); } + void Load(Register dst, const MemOperand& src, Representation r); + void Store(Register src, const MemOperand& dst, Representation r); + // Load an object from the root table. void LoadRoot(Register destination, Heap::RootListIndex index); -- 2.7.4