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
This commit is contained in:
parent
4bc568b77a
commit
c4a4c95e32
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user