Commit 1a033e5d authored by balazs.kilvady's avatar balazs.kilvady Committed by Commit bot

MIPS: Refactor Map::ConstructionCount.

Port 35ff259b

Original commit message:
This combines Map::DoneInobjectSlackTracking and Map::ConstructionCount into one more generic 4-bit counter.

Counter values from 15 down to 8 are used for in-object slack tracking, values from 7 down to 0 are free to be used for a new counter when in-object slack tracking is inactive

BUG=

Review URL: https://codereview.chromium.org/780303003

Cr-Commit-Position: refs/heads/master@{#25692}
parent cd0a53bc
......@@ -382,21 +382,21 @@ static void Generate_JSConstructStubHelper(MacroAssembler* masm,
MemOperand bit_field3 = FieldMemOperand(a2, Map::kBitField3Offset);
// Check if slack tracking is enabled.
__ lw(t0, bit_field3);
__ DecodeField<Map::ConstructionCount>(t2, t0);
__ Branch(&allocate, eq, t2, Operand(JSFunction::kNoSlackTracking));
__ DecodeField<Map::Counter>(t2, t0);
__ Branch(&allocate, lt, t2, Operand(Map::kSlackTrackingCounterEnd));
// Decrease generous allocation count.
__ Subu(t0, t0, Operand(1 << Map::ConstructionCount::kShift));
__ Branch(USE_DELAY_SLOT,
&allocate, ne, t2, Operand(JSFunction::kFinishSlackTracking));
__ Subu(t0, t0, Operand(1 << Map::Counter::kShift));
__ Branch(USE_DELAY_SLOT, &allocate, ne, t2,
Operand(Map::kSlackTrackingCounterEnd));
__ sw(t0, bit_field3); // In delay slot.
__ Push(a1, a2, a1); // a1 = Constructor.
__ CallRuntime(Runtime::kFinalizeInstanceSize, 1);
__ Pop(a1, a2);
// Slack tracking counter is kNoSlackTracking after runtime call.
DCHECK(JSFunction::kNoSlackTracking == 0);
__ mov(t2, zero_reg);
// Slack tracking counter is Map::kSlackTrackingCounterEnd after runtime
// call.
__ li(t2, Map::kSlackTrackingCounterEnd);
__ bind(&allocate);
}
......@@ -443,8 +443,8 @@ static void Generate_JSConstructStubHelper(MacroAssembler* masm,
Label no_inobject_slack_tracking;
// Check if slack tracking is enabled.
__ Branch(&no_inobject_slack_tracking,
eq, t2, Operand(JSFunction::kNoSlackTracking));
__ Branch(&no_inobject_slack_tracking, lt, t2,
Operand(Map::kSlackTrackingCounterEnd));
// Allocate object with a slack.
__ lbu(a0, FieldMemOperand(a2, Map::kPreAllocatedPropertyFieldsOffset));
......
......@@ -382,15 +382,13 @@ static void Generate_JSConstructStubHelper(MacroAssembler* masm,
MemOperand bit_field3 = FieldMemOperand(a2, Map::kBitField3Offset);
// Check if slack tracking is enabled.
__ lwu(a4, bit_field3);
__ DecodeField<Map::ConstructionCount>(a6, a4);
__ Branch(&allocate,
eq,
a6,
Operand(static_cast<int64_t>(JSFunction::kNoSlackTracking)));
__ DecodeField<Map::Counter>(a6, a4);
__ Branch(&allocate, lt, a6,
Operand(static_cast<int64_t>(Map::kSlackTrackingCounterEnd)));
// Decrease generous allocation count.
__ Dsubu(a4, a4, Operand(1 << Map::ConstructionCount::kShift));
__ Branch(USE_DELAY_SLOT,
&allocate, ne, a6, Operand(JSFunction::kFinishSlackTracking));
__ Dsubu(a4, a4, Operand(1 << Map::Counter::kShift));
__ Branch(USE_DELAY_SLOT, &allocate, ne, a6,
Operand(Map::kSlackTrackingCounterEnd));
__ sw(a4, bit_field3); // In delay slot.
__ Push(a1, a2, a1); // a1 = Constructor.
......@@ -446,10 +444,8 @@ static void Generate_JSConstructStubHelper(MacroAssembler* masm,
Label no_inobject_slack_tracking;
// Check if slack tracking is enabled.
__ Branch(&no_inobject_slack_tracking,
eq,
a6,
Operand(static_cast<int64_t>(JSFunction::kNoSlackTracking)));
__ Branch(&no_inobject_slack_tracking, lt, a6,
Operand(static_cast<int64_t>(Map::kSlackTrackingCounterEnd)));
// Allocate object with a slack.
__ lwu(a0, FieldMemOperand(a2, Map::kInstanceSizesOffset));
......
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