[turbofan] Raise max virtual registers and call parameter limit.
Change InstructionOperand to use a 64-bit field for encoding the operand information instead of the 32-bit field that was used before. Ideally we wouldn't use the Zone-allocated bit field at all, and use an integer instead of the pointer; but that requires fixing the register allocator first, which will take some time. TEST=mjsunit/compiler/regress-3786 BUG=v8:3786 LOG=y Review URL: https://codereview.chromium.org/826673002 Cr-Commit-Position: refs/heads/master@{#25941}
This commit is contained in:
parent
96143d1931
commit
b5e8dd0e12
@ -64,7 +64,7 @@ class InstructionOperand : public ZoneObject {
|
||||
void ConvertTo(Kind kind, int index) {
|
||||
if (kind == REGISTER || kind == DOUBLE_REGISTER) DCHECK(index >= 0);
|
||||
value_ = KindField::encode(kind);
|
||||
value_ |= index << KindField::kSize;
|
||||
value_ |= bit_cast<unsigned>(index << KindField::kSize);
|
||||
DCHECK(this->index() == index);
|
||||
}
|
||||
|
||||
@ -73,9 +73,9 @@ class InstructionOperand : public ZoneObject {
|
||||
static void TearDownCaches();
|
||||
|
||||
protected:
|
||||
typedef BitField<Kind, 0, 3> KindField;
|
||||
typedef BitField64<Kind, 0, 3> KindField;
|
||||
|
||||
unsigned value_;
|
||||
uint64_t value_;
|
||||
};
|
||||
|
||||
typedef ZoneVector<InstructionOperand*> InstructionOperandVector;
|
||||
@ -128,9 +128,8 @@ class UnallocatedOperand : public InstructionOperand {
|
||||
DCHECK(policy == FIXED_SLOT);
|
||||
value_ |= VirtualRegisterField::encode(kInvalidVirtualRegister);
|
||||
value_ |= BasicPolicyField::encode(policy);
|
||||
value_ |= index << FixedSlotIndexField::kShift;
|
||||
// TODO(dcarney): 2^10 is not enough for the fixed slot index.
|
||||
CHECK(this->fixed_slot_index() == index);
|
||||
value_ |= static_cast<int64_t>(index) << FixedSlotIndexField::kShift;
|
||||
DCHECK(this->fixed_slot_index() == index);
|
||||
}
|
||||
|
||||
UnallocatedOperand(ExtendedPolicy policy, int index)
|
||||
@ -183,22 +182,22 @@ class UnallocatedOperand : public InstructionOperand {
|
||||
// +------------------------------------------+ P ... Policy
|
||||
//
|
||||
// The slot index is a signed value which requires us to decode it manually
|
||||
// instead of using the BitField utility class.
|
||||
// instead of using the BitField64 utility class.
|
||||
|
||||
// The superclass has a KindField.
|
||||
STATIC_ASSERT(KindField::kSize == 3);
|
||||
|
||||
// BitFields for all unallocated operands.
|
||||
class BasicPolicyField : public BitField<BasicPolicy, 3, 1> {};
|
||||
class VirtualRegisterField : public BitField<unsigned, 4, 18> {};
|
||||
class BasicPolicyField : public BitField64<BasicPolicy, 3, 1> {};
|
||||
class VirtualRegisterField : public BitField64<unsigned, 4, 30> {};
|
||||
|
||||
// BitFields specific to BasicPolicy::FIXED_SLOT.
|
||||
class FixedSlotIndexField : public BitField<int, 22, 10> {};
|
||||
class FixedSlotIndexField : public BitField64<int, 34, 30> {};
|
||||
|
||||
// BitFields specific to BasicPolicy::EXTENDED_POLICY.
|
||||
class ExtendedPolicyField : public BitField<ExtendedPolicy, 22, 3> {};
|
||||
class LifetimeField : public BitField<Lifetime, 25, 1> {};
|
||||
class FixedRegisterField : public BitField<int, 26, 6> {};
|
||||
class ExtendedPolicyField : public BitField64<ExtendedPolicy, 34, 3> {};
|
||||
class LifetimeField : public BitField64<Lifetime, 37, 1> {};
|
||||
class FixedRegisterField : public BitField64<int, 38, 6> {};
|
||||
|
||||
static const int kInvalidVirtualRegister = VirtualRegisterField::kMax;
|
||||
static const int kMaxVirtualRegisters = VirtualRegisterField::kMax;
|
||||
@ -245,7 +244,8 @@ class UnallocatedOperand : public InstructionOperand {
|
||||
// [fixed_slot_index]: Only for FIXED_SLOT.
|
||||
int fixed_slot_index() const {
|
||||
DCHECK(HasFixedSlotPolicy());
|
||||
return static_cast<int>(value_) >> FixedSlotIndexField::kShift;
|
||||
return static_cast<int>(bit_cast<int64_t>(value_) >>
|
||||
FixedSlotIndexField::kShift);
|
||||
}
|
||||
|
||||
// [fixed_register_index]: Only for FIXED_REGISTER or FIXED_DOUBLE_REGISTER.
|
||||
|
12
test/mjsunit/compiler/regress-3786.js
Normal file
12
test/mjsunit/compiler/regress-3786.js
Normal file
@ -0,0 +1,12 @@
|
||||
// Copyright 2014 the V8 project authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
var foo = (function Module(stdlib, foreign, heap) {
|
||||
"use asm";
|
||||
var f = stdlib.Math.cos;
|
||||
function foo() {
|
||||
return f(48,48,48,59,32,102,111,110,116,45,119,101,105,103,104,116,58,98,111,108,100,59,102,111,110,116,45,102,97,109,105,108,121,58,65,114,105,97,108,44,32,72,101,108,118,101,116,105,99,97,44,32,115,97,110,115,45,115,101,114,105,102,44,86,101,114,100,97,110,97,34,32,99,111,108,111,114,61,34,35,70,70,48,48,48,48,34,62,70,79,82,69,88,47,80,65,82,38,35,51,48,52,59,60,119,98,114,32,47,62,84,69,32,38,35,51,48,52,59,38,35,51,53,48,59,76,69,77,76,69,82,38,35,51,48,52,59,60,47,102,111,110,116,62,60,47,115,112,97,110,62,60,47,116,100,62,10,60,47,116,114,62,60,116,114,62,10,60,116,100,32,97,108,105,103,110,61,34,108,101,102,116,34,62,60,115,112,97,110,32,105,100,61,34,97,99,95,100,101,115,99,34,62,60,102,111,110,116,32,115,116,121,108,101,61,34,102,111,110,116,45,115,105,122,101,58,49,49,112,120,59,32,99,111,108,111,114,58,35,48,48,48,48,48,48,59,32,102,111,110,116,45,102,97,109,105,108,121,58,65,114,105,97,108,44,32,72,101,108,118,101,116,105,99,97,44,32,115,97,110,115,45,115,101,114,105,102,44,86,101,114,100,97,110,97,34,62,38,112,111,117,110,100,59,47,36,32,50,32,112,105,112,44,32,89,84,76,32,49,50,32,112,105,112,44,65,108,116,38,35,51,48,53,59,110,32,51,32,99,101,110,116,46,32,83,97,98,105,116,32,83,112,114,101,97,100,45,84,38,117,117,109,108,59,114,60,119,98,114,32,47,62,107,32,66,97,110,107,97,115,38,35,51,48,53,59,32,65,86,65,78,84,65,74,73,60,47,102,111,110,116,62,60,47,115,112,97,110,62,60,47,116,100,62,10,60,47,116,114,62,60,116,114,62,10,60,116,100,32,97,108,105,103,110,61,34,108,101,102,116,34,62,60,100,105,118,32,105,100,61,34,97,99,95,117,114,108,34,62,60,102,111,110,116,32,115,116,121,108,101,61,34,102,111,110,116,45,115,105,122,101,58,49,48,112,120,59,32,99,111,108,111,114,58,35,70,70,54,54,57,57,59,32,102,111,110,116,45,102,97114,105,97);
|
||||
}
|
||||
return { foo: foo };
|
||||
})(this, {}).foo();
|
Loading…
Reference in New Issue
Block a user