PPC: Remove PropertyCell space
Port 16c8485a35
Original commit message:
Replaces StoreGlobalCell / LoadGlobalCell with NamedField variants that use write barriers.
R=mbrandy@us.ibm.com, svenpanne@chromium.org
BUG=
Review URL: https://codereview.chromium.org/1018333003
Cr-Commit-Position: refs/heads/master@{#27380}
This commit is contained in:
parent
1b16678f25
commit
c277e7efad
@ -3042,18 +3042,6 @@ void LCodeGen::DoReturn(LReturn* instr) {
|
||||
}
|
||||
|
||||
|
||||
void LCodeGen::DoLoadGlobalCell(LLoadGlobalCell* instr) {
|
||||
Register result = ToRegister(instr->result());
|
||||
__ mov(ip, Operand(Handle<Object>(instr->hydrogen()->cell().handle())));
|
||||
__ LoadP(result, FieldMemOperand(ip, Cell::kValueOffset));
|
||||
if (instr->hydrogen()->RequiresHoleCheck()) {
|
||||
__ LoadRoot(ip, Heap::kTheHoleValueRootIndex);
|
||||
__ cmp(result, ip);
|
||||
DeoptimizeIf(eq, instr, Deoptimizer::kHole);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
template <class T>
|
||||
void LCodeGen::EmitVectorLoadICRegisters(T* instr) {
|
||||
DCHECK(FLAG_vector_ics);
|
||||
@ -3089,31 +3077,6 @@ void LCodeGen::DoLoadGlobalGeneric(LLoadGlobalGeneric* instr) {
|
||||
}
|
||||
|
||||
|
||||
void LCodeGen::DoStoreGlobalCell(LStoreGlobalCell* instr) {
|
||||
Register value = ToRegister(instr->value());
|
||||
Register cell = scratch0();
|
||||
|
||||
// Load the cell.
|
||||
__ mov(cell, Operand(instr->hydrogen()->cell().handle()));
|
||||
|
||||
// If the cell we are storing to contains the hole it could have
|
||||
// been deleted from the property dictionary. In that case, we need
|
||||
// to update the property details in the property dictionary to mark
|
||||
// it as no longer deleted.
|
||||
if (instr->hydrogen()->RequiresHoleCheck()) {
|
||||
// We use a temp to check the payload (CompareRoot might clobber ip).
|
||||
Register payload = ToRegister(instr->temp());
|
||||
__ LoadP(payload, FieldMemOperand(cell, Cell::kValueOffset));
|
||||
__ CompareRoot(payload, Heap::kTheHoleValueRootIndex);
|
||||
DeoptimizeIf(eq, instr, Deoptimizer::kHole);
|
||||
}
|
||||
|
||||
// Store the value.
|
||||
__ StoreP(value, FieldMemOperand(cell, Cell::kValueOffset), r0);
|
||||
// Cells are always rescanned, so no write barrier here.
|
||||
}
|
||||
|
||||
|
||||
void LCodeGen::DoLoadContextSlot(LLoadContextSlot* instr) {
|
||||
Register context = ToRegister(instr->context());
|
||||
Register result = ToRegister(instr->result());
|
||||
|
@ -2098,14 +2098,6 @@ LInstruction* LChunkBuilder::DoConstant(HConstant* instr) {
|
||||
}
|
||||
|
||||
|
||||
LInstruction* LChunkBuilder::DoLoadGlobalCell(HLoadGlobalCell* instr) {
|
||||
LLoadGlobalCell* result = new (zone()) LLoadGlobalCell;
|
||||
return instr->RequiresHoleCheck()
|
||||
? AssignEnvironment(DefineAsRegister(result))
|
||||
: DefineAsRegister(result);
|
||||
}
|
||||
|
||||
|
||||
LInstruction* LChunkBuilder::DoLoadGlobalGeneric(HLoadGlobalGeneric* instr) {
|
||||
LOperand* context = UseFixed(instr->context(), cp);
|
||||
LOperand* global_object =
|
||||
@ -2120,17 +2112,6 @@ LInstruction* LChunkBuilder::DoLoadGlobalGeneric(HLoadGlobalGeneric* instr) {
|
||||
}
|
||||
|
||||
|
||||
LInstruction* LChunkBuilder::DoStoreGlobalCell(HStoreGlobalCell* instr) {
|
||||
LOperand* value = UseRegister(instr->value());
|
||||
// Use a temp to check the value in the cell in the case where we perform
|
||||
// a hole check.
|
||||
return instr->RequiresHoleCheck()
|
||||
? AssignEnvironment(new (zone())
|
||||
LStoreGlobalCell(value, TempRegister()))
|
||||
: new (zone()) LStoreGlobalCell(value, NULL);
|
||||
}
|
||||
|
||||
|
||||
LInstruction* LChunkBuilder::DoLoadContextSlot(HLoadContextSlot* instr) {
|
||||
LOperand* context = UseRegisterAtStart(instr->value());
|
||||
LInstruction* result =
|
||||
|
@ -100,7 +100,6 @@ class LCodeGen;
|
||||
V(LoadRoot) \
|
||||
V(LoadFieldByIndex) \
|
||||
V(LoadFunctionPrototype) \
|
||||
V(LoadGlobalCell) \
|
||||
V(LoadGlobalGeneric) \
|
||||
V(LoadKeyed) \
|
||||
V(LoadKeyedGeneric) \
|
||||
@ -142,7 +141,6 @@ class LCodeGen;
|
||||
V(StoreCodeEntry) \
|
||||
V(StoreContextSlot) \
|
||||
V(StoreFrameContext) \
|
||||
V(StoreGlobalCell) \
|
||||
V(StoreKeyed) \
|
||||
V(StoreKeyedGeneric) \
|
||||
V(StoreNamedField) \
|
||||
@ -1641,13 +1639,6 @@ class LLoadKeyedGeneric FINAL : public LTemplateInstruction<1, 3, 1> {
|
||||
};
|
||||
|
||||
|
||||
class LLoadGlobalCell FINAL : public LTemplateInstruction<1, 0, 0> {
|
||||
public:
|
||||
DECLARE_CONCRETE_INSTRUCTION(LoadGlobalCell, "load-global-cell")
|
||||
DECLARE_HYDROGEN_ACCESSOR(LoadGlobalCell)
|
||||
};
|
||||
|
||||
|
||||
class LLoadGlobalGeneric FINAL : public LTemplateInstruction<1, 2, 1> {
|
||||
public:
|
||||
LLoadGlobalGeneric(LOperand* context, LOperand* global_object,
|
||||
@ -1669,21 +1660,6 @@ class LLoadGlobalGeneric FINAL : public LTemplateInstruction<1, 2, 1> {
|
||||
};
|
||||
|
||||
|
||||
class LStoreGlobalCell FINAL : public LTemplateInstruction<0, 1, 1> {
|
||||
public:
|
||||
LStoreGlobalCell(LOperand* value, LOperand* temp) {
|
||||
inputs_[0] = value;
|
||||
temps_[0] = temp;
|
||||
}
|
||||
|
||||
LOperand* value() { return inputs_[0]; }
|
||||
LOperand* temp() { return temps_[0]; }
|
||||
|
||||
DECLARE_CONCRETE_INSTRUCTION(StoreGlobalCell, "store-global-cell")
|
||||
DECLARE_HYDROGEN_ACCESSOR(StoreGlobalCell)
|
||||
};
|
||||
|
||||
|
||||
class LLoadContextSlot FINAL : public LTemplateInstruction<1, 1, 0> {
|
||||
public:
|
||||
explicit LLoadContextSlot(LOperand* context) { inputs_[0] = context; }
|
||||
|
Loading…
Reference in New Issue
Block a user