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) {
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.
......
......@@ -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));
......
......@@ -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);
......
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