Commit c4a4c95e authored by plind44@gmail.com's avatar plind44@gmail.com

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 <kilvadyb@homejinni.com>.

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@17609 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent 4bc568b7
...@@ -2921,11 +2921,7 @@ void LCodeGen::DoLoadNamedField(LLoadNamedField* instr) { ...@@ -2921,11 +2921,7 @@ void LCodeGen::DoLoadNamedField(LLoadNamedField* instr) {
if (access.IsExternalMemory()) { if (access.IsExternalMemory()) {
Register result = ToRegister(instr->result()); Register result = ToRegister(instr->result());
MemOperand operand = MemOperand(object, offset); MemOperand operand = MemOperand(object, offset);
if (access.representation().IsByte()) { __ Load(result, operand, access.representation());
__ lb(result, operand);
} else {
__ lw(result, operand);
}
return; return;
} }
...@@ -2941,11 +2937,7 @@ void LCodeGen::DoLoadNamedField(LLoadNamedField* instr) { ...@@ -2941,11 +2937,7 @@ void LCodeGen::DoLoadNamedField(LLoadNamedField* instr) {
object = result; object = result;
} }
MemOperand operand = FieldMemOperand(object, offset); MemOperand operand = FieldMemOperand(object, offset);
if (access.representation().IsByte()) { __ Load(result, operand, access.representation());
__ lb(result, operand);
} else {
__ lw(result, operand);
}
} }
...@@ -4106,11 +4098,7 @@ void LCodeGen::DoStoreNamedField(LStoreNamedField* instr) { ...@@ -4106,11 +4098,7 @@ void LCodeGen::DoStoreNamedField(LStoreNamedField* instr) {
if (access.IsExternalMemory()) { if (access.IsExternalMemory()) {
Register value = ToRegister(instr->value()); Register value = ToRegister(instr->value());
MemOperand operand = MemOperand(object, offset); MemOperand operand = MemOperand(object, offset);
if (representation.IsByte()) { __ Store(value, operand, representation);
__ sb(value, operand);
} else {
__ sw(value, operand);
}
return; return;
} }
...@@ -4156,11 +4144,7 @@ void LCodeGen::DoStoreNamedField(LStoreNamedField* instr) { ...@@ -4156,11 +4144,7 @@ void LCodeGen::DoStoreNamedField(LStoreNamedField* instr) {
? OMIT_SMI_CHECK : INLINE_SMI_CHECK; ? OMIT_SMI_CHECK : INLINE_SMI_CHECK;
if (access.IsInobject()) { if (access.IsInobject()) {
MemOperand operand = FieldMemOperand(object, offset); MemOperand operand = FieldMemOperand(object, offset);
if (representation.IsByte()) { __ Store(value, operand, representation);
__ sb(value, operand);
} else {
__ sw(value, operand);
}
if (instr->hydrogen()->NeedsWriteBarrier()) { if (instr->hydrogen()->NeedsWriteBarrier()) {
// Update the write barrier for the object for in-object properties. // Update the write barrier for the object for in-object properties.
__ RecordWriteField(object, __ RecordWriteField(object,
...@@ -4175,11 +4159,7 @@ void LCodeGen::DoStoreNamedField(LStoreNamedField* instr) { ...@@ -4175,11 +4159,7 @@ void LCodeGen::DoStoreNamedField(LStoreNamedField* instr) {
} else { } else {
__ lw(scratch, FieldMemOperand(object, JSObject::kPropertiesOffset)); __ lw(scratch, FieldMemOperand(object, JSObject::kPropertiesOffset));
MemOperand operand = FieldMemOperand(scratch, offset); MemOperand operand = FieldMemOperand(scratch, offset);
if (representation.IsByte()) { __ Store(value, operand, representation);
__ sb(value, operand);
} else {
__ sw(value, operand);
}
if (instr->hydrogen()->NeedsWriteBarrier()) { if (instr->hydrogen()->NeedsWriteBarrier()) {
// Update the write barrier for the properties array. // Update the write barrier for the properties array.
// object is used as a scratch register. // object is used as a scratch register.
......
...@@ -53,6 +53,38 @@ MacroAssembler::MacroAssembler(Isolate* arg_isolate, void* buffer, int size) ...@@ -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, void MacroAssembler::LoadRoot(Register destination,
Heap::RootListIndex index) { Heap::RootListIndex index) {
lw(destination, MemOperand(s6, index << kPointerSizeLog2)); lw(destination, MemOperand(s6, index << kPointerSizeLog2));
......
...@@ -279,6 +279,9 @@ class MacroAssembler: public Assembler { ...@@ -279,6 +279,9 @@ class MacroAssembler: public Assembler {
Branch(L); 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. // Load an object from the root table.
void LoadRoot(Register destination, void LoadRoot(Register destination,
Heap::RootListIndex index); Heap::RootListIndex index);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment