Commit 331b87e2 authored by bmeurer's avatar bmeurer Committed by Commit bot

Remove more uses of the deprecated EnumSet template class.

EnumtSet has been deprecated for quite some time, and replaced with the
more general and type safe base::Flags template class.

R=jarin@chromium.org

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

Cr-Commit-Position: refs/heads/master@{#29564}
parent dcb4498c
...@@ -2,8 +2,6 @@ ...@@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#include "src/v8.h"
#include "src/ast.h" #include "src/ast.h"
#include "src/ast-numbering.h" #include "src/ast-numbering.h"
#include "src/scopes.h" #include "src/scopes.h"
...@@ -11,7 +9,6 @@ ...@@ -11,7 +9,6 @@
namespace v8 { namespace v8 {
namespace internal { namespace internal {
class AstNumberingVisitor final : public AstVisitor { class AstNumberingVisitor final : public AstVisitor {
public: public:
explicit AstNumberingVisitor(Isolate* isolate, Zone* zone) explicit AstNumberingVisitor(Isolate* isolate, Zone* zone)
...@@ -46,7 +43,7 @@ class AstNumberingVisitor final : public AstVisitor { ...@@ -46,7 +43,7 @@ class AstNumberingVisitor final : public AstVisitor {
void IncrementNodeCount() { properties_.add_node_count(1); } void IncrementNodeCount() { properties_.add_node_count(1); }
void DisableSelfOptimization() { void DisableSelfOptimization() {
properties_.flags()->Add(kDontSelfOptimize); properties_.flags() |= AstProperties::kDontSelfOptimize;
} }
void DisableOptimization(BailoutReason reason) { void DisableOptimization(BailoutReason reason) {
dont_optimize_reason_ = reason; dont_optimize_reason_ = reason;
...@@ -54,10 +51,11 @@ class AstNumberingVisitor final : public AstVisitor { ...@@ -54,10 +51,11 @@ class AstNumberingVisitor final : public AstVisitor {
} }
void DisableCrankshaft(BailoutReason reason) { void DisableCrankshaft(BailoutReason reason) {
if (FLAG_turbo_shipping) { if (FLAG_turbo_shipping) {
return properties_.flags()->Add(kDontCrankshaft); properties_.flags() |= AstProperties::kDontCrankshaft;
} else {
dont_optimize_reason_ = reason;
DisableSelfOptimization();
} }
dont_optimize_reason_ = reason;
DisableSelfOptimization();
} }
template <typename Node> template <typename Node>
......
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
#include "src/assembler.h" #include "src/assembler.h"
#include "src/ast-value-factory.h" #include "src/ast-value-factory.h"
#include "src/bailout-reason.h" #include "src/bailout-reason.h"
#include "src/base/flags.h"
#include "src/factory.h" #include "src/factory.h"
#include "src/isolate.h" #include "src/isolate.h"
#include "src/jsregexp.h" #include "src/jsregexp.h"
...@@ -137,9 +138,6 @@ typedef ZoneList<Handle<Object>> ZoneObjectList; ...@@ -137,9 +138,6 @@ typedef ZoneList<Handle<Object>> ZoneObjectList;
friend class AstNodeFactory; friend class AstNodeFactory;
enum AstPropertiesFlag { kDontSelfOptimize, kDontCrankshaft };
class FeedbackVectorRequirements { class FeedbackVectorRequirements {
public: public:
FeedbackVectorRequirements(int slots, int ic_slots) FeedbackVectorRequirements(int slots, int ic_slots)
...@@ -175,11 +173,18 @@ typedef List<VariableICSlotPair> ICSlotCache; ...@@ -175,11 +173,18 @@ typedef List<VariableICSlotPair> ICSlotCache;
class AstProperties final BASE_EMBEDDED { class AstProperties final BASE_EMBEDDED {
public: public:
class Flags : public EnumSet<AstPropertiesFlag, int> {}; enum Flag {
kNoFlags = 0,
kDontSelfOptimize = 1 << 0,
kDontCrankshaft = 1 << 1
};
typedef base::Flags<Flag> Flags;
explicit AstProperties(Zone* zone) : node_count_(0), spec_(zone) {} explicit AstProperties(Zone* zone) : node_count_(0), spec_(zone) {}
Flags* flags() { return &flags_; } Flags& flags() { return flags_; }
Flags flags() const { return flags_; }
int node_count() { return node_count_; } int node_count() { return node_count_; }
void add_node_count(int count) { node_count_ += count; } void add_node_count(int count) { node_count_ += count; }
...@@ -197,6 +202,8 @@ class AstProperties final BASE_EMBEDDED { ...@@ -197,6 +202,8 @@ class AstProperties final BASE_EMBEDDED {
ZoneFeedbackVectorSpec spec_; ZoneFeedbackVectorSpec spec_;
}; };
DEFINE_OPERATORS_FOR_FLAGS(AstProperties::Flags)
class AstNode: public ZoneObject { class AstNode: public ZoneObject {
public: public:
...@@ -2587,7 +2594,7 @@ class FunctionLiteral final : public Expression { ...@@ -2587,7 +2594,7 @@ class FunctionLiteral final : public Expression {
FunctionKind kind() const { return FunctionKindBits::decode(bitfield_); } FunctionKind kind() const { return FunctionKindBits::decode(bitfield_); }
int ast_node_count() { return ast_properties_.node_count(); } int ast_node_count() { return ast_properties_.node_count(); }
AstProperties::Flags* flags() { return ast_properties_.flags(); } AstProperties::Flags flags() const { return ast_properties_.flags(); }
void set_ast_properties(AstProperties* ast_properties) { void set_ast_properties(AstProperties* ast_properties) {
ast_properties_ = *ast_properties; ast_properties_ = *ast_properties;
} }
......
...@@ -203,7 +203,8 @@ Code::Flags CompilationInfo::flags() const { ...@@ -203,7 +203,8 @@ Code::Flags CompilationInfo::flags() const {
// profiler, so they trigger their own optimization when they're called // profiler, so they trigger their own optimization when they're called
// for the SharedFunctionInfo::kCallsUntilPrimitiveOptimization-th time. // for the SharedFunctionInfo::kCallsUntilPrimitiveOptimization-th time.
bool CompilationInfo::ShouldSelfOptimize() { bool CompilationInfo::ShouldSelfOptimize() {
return FLAG_crankshaft && !function()->flags()->Contains(kDontSelfOptimize) && return FLAG_crankshaft &&
!(function()->flags() & AstProperties::kDontSelfOptimize) &&
!function()->dont_optimize() && !function()->dont_optimize() &&
function()->scope()->AllowsLazyCompilation() && function()->scope()->AllowsLazyCompilation() &&
(!has_shared_info() || !shared_info()->optimization_disabled()); (!has_shared_info() || !shared_info()->optimization_disabled());
...@@ -753,7 +754,8 @@ static bool Renumber(ParseInfo* parse_info) { ...@@ -753,7 +754,8 @@ static bool Renumber(ParseInfo* parse_info) {
FunctionLiteral* lit = parse_info->function(); FunctionLiteral* lit = parse_info->function();
shared_info->set_ast_node_count(lit->ast_node_count()); shared_info->set_ast_node_count(lit->ast_node_count());
MaybeDisableOptimization(shared_info, lit->dont_optimize_reason()); MaybeDisableOptimization(shared_info, lit->dont_optimize_reason());
shared_info->set_dont_crankshaft(lit->flags()->Contains(kDontCrankshaft)); shared_info->set_dont_crankshaft(lit->flags() &
AstProperties::kDontCrankshaft);
} }
return true; return true;
} }
......
...@@ -3014,7 +3014,7 @@ VectorSlotPair AstGraphBuilder::CreateVectorSlotPair( ...@@ -3014,7 +3014,7 @@ VectorSlotPair AstGraphBuilder::CreateVectorSlotPair(
uint32_t AstGraphBuilder::ComputeBitsetForDynamicGlobal(Variable* variable) { uint32_t AstGraphBuilder::ComputeBitsetForDynamicGlobal(Variable* variable) {
DCHECK_EQ(DYNAMIC_GLOBAL, variable->mode()); DCHECK_EQ(DYNAMIC_GLOBAL, variable->mode());
bool found_eval_scope = false; bool found_eval_scope = false;
EnumSet<int, uint32_t> check_depths; uint32_t check_depths = 0;
for (Scope* s = current_scope(); s != nullptr; s = s->outer_scope()) { for (Scope* s = current_scope(); s != nullptr; s = s->outer_scope()) {
if (s->num_heap_slots() <= 0) continue; if (s->num_heap_slots() <= 0) continue;
// TODO(mstarzinger): If we have reached an eval scope, we check all // TODO(mstarzinger): If we have reached an eval scope, we check all
...@@ -3026,15 +3026,15 @@ uint32_t AstGraphBuilder::ComputeBitsetForDynamicGlobal(Variable* variable) { ...@@ -3026,15 +3026,15 @@ uint32_t AstGraphBuilder::ComputeBitsetForDynamicGlobal(Variable* variable) {
if (depth > DynamicGlobalAccess::kMaxCheckDepth) { if (depth > DynamicGlobalAccess::kMaxCheckDepth) {
return DynamicGlobalAccess::kFullCheckRequired; return DynamicGlobalAccess::kFullCheckRequired;
} }
check_depths.Add(depth); check_depths |= 1 << depth;
} }
return check_depths.ToIntegral(); return check_depths;
} }
uint32_t AstGraphBuilder::ComputeBitsetForDynamicContext(Variable* variable) { uint32_t AstGraphBuilder::ComputeBitsetForDynamicContext(Variable* variable) {
DCHECK_EQ(DYNAMIC_LOCAL, variable->mode()); DCHECK_EQ(DYNAMIC_LOCAL, variable->mode());
EnumSet<int, uint32_t> check_depths; uint32_t check_depths = 0;
for (Scope* s = current_scope(); s != nullptr; s = s->outer_scope()) { for (Scope* s = current_scope(); s != nullptr; s = s->outer_scope()) {
if (s->num_heap_slots() <= 0) continue; if (s->num_heap_slots() <= 0) continue;
if (!s->calls_sloppy_eval() && s != variable->scope()) continue; if (!s->calls_sloppy_eval() && s != variable->scope()) continue;
...@@ -3042,10 +3042,10 @@ uint32_t AstGraphBuilder::ComputeBitsetForDynamicContext(Variable* variable) { ...@@ -3042,10 +3042,10 @@ uint32_t AstGraphBuilder::ComputeBitsetForDynamicContext(Variable* variable) {
if (depth > DynamicContextAccess::kMaxCheckDepth) { if (depth > DynamicContextAccess::kMaxCheckDepth) {
return DynamicContextAccess::kFullCheckRequired; return DynamicContextAccess::kFullCheckRequired;
} }
check_depths.Add(depth); check_depths |= 1 << depth;
if (s == variable->scope()) break; if (s == variable->scope()) break;
} }
return check_depths.ToIntegral(); return check_depths;
} }
......
...@@ -10620,8 +10620,8 @@ void SharedFunctionInfo::InitFromFunctionLiteral( ...@@ -10620,8 +10620,8 @@ void SharedFunctionInfo::InitFromFunctionLiteral(
if (lit->dont_optimize_reason() != kNoReason) { if (lit->dont_optimize_reason() != kNoReason) {
shared_info->DisableOptimization(lit->dont_optimize_reason()); shared_info->DisableOptimization(lit->dont_optimize_reason());
} }
shared_info->set_dont_crankshaft( shared_info->set_dont_crankshaft(lit->flags() &
lit->flags()->Contains(AstPropertiesFlag::kDontCrankshaft)); AstProperties::kDontCrankshaft);
shared_info->set_kind(lit->kind()); shared_info->set_kind(lit->kind());
shared_info->set_needs_home_object(lit->scope()->NeedsHomeObject()); shared_info->set_needs_home_object(lit->scope()->NeedsHomeObject());
shared_info->set_asm_function(lit->scope()->asm_function()); shared_info->set_asm_function(lit->scope()->asm_function());
......
...@@ -4974,13 +4974,15 @@ void FullCodeGenerator::VisitCountOperation(CountOperation* expr) { ...@@ -4974,13 +4974,15 @@ void FullCodeGenerator::VisitCountOperation(CountOperation* expr) {
} }
} }
SmiOperationExecutionMode mode; SmiOperationConstraints constraints =
mode.Add(PRESERVE_SOURCE_REGISTER); SmiOperationConstraint::kPreserveSourceRegister |
mode.Add(BAILOUT_ON_NO_OVERFLOW); SmiOperationConstraint::kBailoutOnNoOverflow;
if (expr->op() == Token::INC) { if (expr->op() == Token::INC) {
__ SmiAddConstant(rax, rax, Smi::FromInt(1), mode, &done, Label::kNear); __ SmiAddConstant(rax, rax, Smi::FromInt(1), constraints, &done,
Label::kNear);
} else { } else {
__ SmiSubConstant(rax, rax, Smi::FromInt(1), mode, &done, Label::kNear); __ SmiSubConstant(rax, rax, Smi::FromInt(1), constraints, &done,
Label::kNear);
} }
__ jmp(&stub_call, Label::kNear); __ jmp(&stub_call, Label::kNear);
__ bind(&slow); __ bind(&slow);
......
...@@ -1380,10 +1380,8 @@ void MacroAssembler::SmiAddConstant(const Operand& dst, Smi* constant) { ...@@ -1380,10 +1380,8 @@ void MacroAssembler::SmiAddConstant(const Operand& dst, Smi* constant) {
} }
void MacroAssembler::SmiAddConstant(Register dst, void MacroAssembler::SmiAddConstant(Register dst, Register src, Smi* constant,
Register src, SmiOperationConstraints constraints,
Smi* constant,
SmiOperationExecutionMode mode,
Label* bailout_label, Label* bailout_label,
Label::Distance near_jump) { Label::Distance near_jump) {
if (constant->value() == 0) { if (constant->value() == 0) {
...@@ -1394,12 +1392,12 @@ void MacroAssembler::SmiAddConstant(Register dst, ...@@ -1394,12 +1392,12 @@ void MacroAssembler::SmiAddConstant(Register dst,
DCHECK(!dst.is(kScratchRegister)); DCHECK(!dst.is(kScratchRegister));
LoadSmiConstant(kScratchRegister, constant); LoadSmiConstant(kScratchRegister, constant);
addp(dst, kScratchRegister); addp(dst, kScratchRegister);
if (mode.Contains(BAILOUT_ON_NO_OVERFLOW)) { if (constraints & SmiOperationConstraint::kBailoutOnNoOverflow) {
j(no_overflow, bailout_label, near_jump); j(no_overflow, bailout_label, near_jump);
DCHECK(mode.Contains(PRESERVE_SOURCE_REGISTER)); DCHECK(constraints & SmiOperationConstraint::kPreserveSourceRegister);
subp(dst, kScratchRegister); subp(dst, kScratchRegister);
} else if (mode.Contains(BAILOUT_ON_OVERFLOW)) { } else if (constraints & SmiOperationConstraint::kBailoutOnOverflow) {
if (mode.Contains(PRESERVE_SOURCE_REGISTER)) { if (constraints & SmiOperationConstraint::kPreserveSourceRegister) {
Label done; Label done;
j(no_overflow, &done, Label::kNear); j(no_overflow, &done, Label::kNear);
subp(dst, kScratchRegister); subp(dst, kScratchRegister);
...@@ -1410,11 +1408,11 @@ void MacroAssembler::SmiAddConstant(Register dst, ...@@ -1410,11 +1408,11 @@ void MacroAssembler::SmiAddConstant(Register dst,
j(overflow, bailout_label, near_jump); j(overflow, bailout_label, near_jump);
} }
} else { } else {
CHECK(mode.IsEmpty()); UNREACHABLE();
} }
} else { } else {
DCHECK(mode.Contains(PRESERVE_SOURCE_REGISTER)); DCHECK(constraints & SmiOperationConstraint::kPreserveSourceRegister);
DCHECK(mode.Contains(BAILOUT_ON_OVERFLOW)); DCHECK(constraints & SmiOperationConstraint::kBailoutOnOverflow);
LoadSmiConstant(dst, constant); LoadSmiConstant(dst, constant);
addp(dst, src); addp(dst, src);
j(overflow, bailout_label, near_jump); j(overflow, bailout_label, near_jump);
...@@ -1446,10 +1444,8 @@ void MacroAssembler::SmiSubConstant(Register dst, Register src, Smi* constant) { ...@@ -1446,10 +1444,8 @@ void MacroAssembler::SmiSubConstant(Register dst, Register src, Smi* constant) {
} }
void MacroAssembler::SmiSubConstant(Register dst, void MacroAssembler::SmiSubConstant(Register dst, Register src, Smi* constant,
Register src, SmiOperationConstraints constraints,
Smi* constant,
SmiOperationExecutionMode mode,
Label* bailout_label, Label* bailout_label,
Label::Distance near_jump) { Label::Distance near_jump) {
if (constant->value() == 0) { if (constant->value() == 0) {
...@@ -1460,12 +1456,12 @@ void MacroAssembler::SmiSubConstant(Register dst, ...@@ -1460,12 +1456,12 @@ void MacroAssembler::SmiSubConstant(Register dst,
DCHECK(!dst.is(kScratchRegister)); DCHECK(!dst.is(kScratchRegister));
LoadSmiConstant(kScratchRegister, constant); LoadSmiConstant(kScratchRegister, constant);
subp(dst, kScratchRegister); subp(dst, kScratchRegister);
if (mode.Contains(BAILOUT_ON_NO_OVERFLOW)) { if (constraints & SmiOperationConstraint::kBailoutOnNoOverflow) {
j(no_overflow, bailout_label, near_jump); j(no_overflow, bailout_label, near_jump);
DCHECK(mode.Contains(PRESERVE_SOURCE_REGISTER)); DCHECK(constraints & SmiOperationConstraint::kPreserveSourceRegister);
addp(dst, kScratchRegister); addp(dst, kScratchRegister);
} else if (mode.Contains(BAILOUT_ON_OVERFLOW)) { } else if (constraints & SmiOperationConstraint::kBailoutOnOverflow) {
if (mode.Contains(PRESERVE_SOURCE_REGISTER)) { if (constraints & SmiOperationConstraint::kPreserveSourceRegister) {
Label done; Label done;
j(no_overflow, &done, Label::kNear); j(no_overflow, &done, Label::kNear);
addp(dst, kScratchRegister); addp(dst, kScratchRegister);
...@@ -1476,11 +1472,11 @@ void MacroAssembler::SmiSubConstant(Register dst, ...@@ -1476,11 +1472,11 @@ void MacroAssembler::SmiSubConstant(Register dst,
j(overflow, bailout_label, near_jump); j(overflow, bailout_label, near_jump);
} }
} else { } else {
CHECK(mode.IsEmpty()); UNREACHABLE();
} }
} else { } else {
DCHECK(mode.Contains(PRESERVE_SOURCE_REGISTER)); DCHECK(constraints & SmiOperationConstraint::kPreserveSourceRegister);
DCHECK(mode.Contains(BAILOUT_ON_OVERFLOW)); DCHECK(constraints & SmiOperationConstraint::kBailoutOnOverflow);
if (constant->value() == Smi::kMinValue) { if (constant->value() == Smi::kMinValue) {
DCHECK(!dst.is(kScratchRegister)); DCHECK(!dst.is(kScratchRegister));
movp(dst, src); movp(dst, src);
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#include "src/assembler.h" #include "src/assembler.h"
#include "src/bailout-reason.h" #include "src/bailout-reason.h"
#include "src/base/flags.h"
#include "src/frames.h" #include "src/frames.h"
#include "src/globals.h" #include "src/globals.h"
...@@ -32,21 +33,15 @@ enum PointersToHereCheck { ...@@ -32,21 +33,15 @@ enum PointersToHereCheck {
kPointersToHereAreAlwaysInteresting kPointersToHereAreAlwaysInteresting
}; };
enum SmiOperationConstraint { enum class SmiOperationConstraint {
PRESERVE_SOURCE_REGISTER, kPreserveSourceRegister = 1 << 0,
BAILOUT_ON_NO_OVERFLOW, kBailoutOnNoOverflow = 1 << 1,
BAILOUT_ON_OVERFLOW, kBailoutOnOverflow = 1 << 2
NUMBER_OF_CONSTRAINTS
}; };
STATIC_ASSERT(NUMBER_OF_CONSTRAINTS <= 8); typedef base::Flags<SmiOperationConstraint> SmiOperationConstraints;
class SmiOperationExecutionMode : public EnumSet<SmiOperationConstraint, byte> { DEFINE_OPERATORS_FOR_FLAGS(SmiOperationConstraints)
public:
SmiOperationExecutionMode() : EnumSet<SmiOperationConstraint, byte>(0) { }
explicit SmiOperationExecutionMode(byte bits)
: EnumSet<SmiOperationConstraint, byte>(bits) { }
};
#ifdef DEBUG #ifdef DEBUG
bool AreAliased(Register reg1, bool AreAliased(Register reg1,
...@@ -546,11 +541,8 @@ class MacroAssembler: public Assembler { ...@@ -546,11 +541,8 @@ class MacroAssembler: public Assembler {
// Add an integer constant to a tagged smi, giving a tagged smi as result, // Add an integer constant to a tagged smi, giving a tagged smi as result,
// or jumping to a label if the result cannot be represented by a smi. // or jumping to a label if the result cannot be represented by a smi.
void SmiAddConstant(Register dst, void SmiAddConstant(Register dst, Register src, Smi* constant,
Register src, SmiOperationConstraints constraints, Label* bailout_label,
Smi* constant,
SmiOperationExecutionMode mode,
Label* bailout_label,
Label::Distance near_jump = Label::kFar); Label::Distance near_jump = Label::kFar);
// Subtract an integer constant from a tagged smi, giving a tagged smi as // Subtract an integer constant from a tagged smi, giving a tagged smi as
...@@ -560,11 +552,8 @@ class MacroAssembler: public Assembler { ...@@ -560,11 +552,8 @@ class MacroAssembler: public Assembler {
// Subtract an integer constant from a tagged smi, giving a tagged smi as // Subtract an integer constant from a tagged smi, giving a tagged smi as
// result, or jumping to a label if the result cannot be represented by a smi. // result, or jumping to a label if the result cannot be represented by a smi.
void SmiSubConstant(Register dst, void SmiSubConstant(Register dst, Register src, Smi* constant,
Register src, SmiOperationConstraints constraints, Label* bailout_label,
Smi* constant,
SmiOperationExecutionMode mode,
Label* bailout_label,
Label::Distance near_jump = Label::kFar); Label::Distance near_jump = Label::kFar);
// Negating a smi can give a negative zero or too large positive value. // Negating a smi can give a negative zero or too large positive value.
......
...@@ -736,28 +736,27 @@ static void SmiAddTest(MacroAssembler* masm, ...@@ -736,28 +736,27 @@ static void SmiAddTest(MacroAssembler* masm,
__ movl(rcx, Immediate(first)); __ movl(rcx, Immediate(first));
__ Integer32ToSmi(rcx, rcx); __ Integer32ToSmi(rcx, rcx);
i::SmiOperationExecutionMode mode; i::SmiOperationConstraints constraints =
mode.Add(i::PRESERVE_SOURCE_REGISTER); i::SmiOperationConstraint::kPreserveSourceRegister |
mode.Add(i::BAILOUT_ON_OVERFLOW); i::SmiOperationConstraint::kBailoutOnOverflow;
__ incq(rax); __ incq(rax);
__ SmiAddConstant(r9, rcx, Smi::FromInt(second), mode, exit); __ SmiAddConstant(r9, rcx, Smi::FromInt(second), constraints, exit);
__ cmpq(r9, r8); __ cmpq(r9, r8);
__ j(not_equal, exit); __ j(not_equal, exit);
__ incq(rax); __ incq(rax);
__ SmiAddConstant(rcx, rcx, Smi::FromInt(second), mode, exit); __ SmiAddConstant(rcx, rcx, Smi::FromInt(second), constraints, exit);
__ cmpq(rcx, r8); __ cmpq(rcx, r8);
__ j(not_equal, exit); __ j(not_equal, exit);
__ movl(rcx, Immediate(first)); __ movl(rcx, Immediate(first));
__ Integer32ToSmi(rcx, rcx); __ Integer32ToSmi(rcx, rcx);
mode.RemoveAll(); constraints = i::SmiOperationConstraint::kPreserveSourceRegister |
mode.Add(i::PRESERVE_SOURCE_REGISTER); i::SmiOperationConstraint::kBailoutOnNoOverflow;
mode.Add(i::BAILOUT_ON_NO_OVERFLOW);
Label done; Label done;
__ incq(rax); __ incq(rax);
__ SmiAddConstant(rcx, rcx, Smi::FromInt(second), mode, &done); __ SmiAddConstant(rcx, rcx, Smi::FromInt(second), constraints, &done);
__ jmp(exit); __ jmp(exit);
__ bind(&done); __ bind(&done);
__ cmpq(rcx, r8); __ cmpq(rcx, r8);
...@@ -799,14 +798,14 @@ static void SmiAddOverflowTest(MacroAssembler* masm, ...@@ -799,14 +798,14 @@ static void SmiAddOverflowTest(MacroAssembler* masm,
__ j(not_equal, exit); __ j(not_equal, exit);
} }
i::SmiOperationExecutionMode mode; i::SmiOperationConstraints constraints =
mode.Add(i::PRESERVE_SOURCE_REGISTER); i::SmiOperationConstraint::kPreserveSourceRegister |
mode.Add(i::BAILOUT_ON_OVERFLOW); i::SmiOperationConstraint::kBailoutOnOverflow;
__ movq(rcx, r11); __ movq(rcx, r11);
{ {
Label overflow_ok; Label overflow_ok;
__ incq(rax); __ incq(rax);
__ SmiAddConstant(r9, rcx, Smi::FromInt(y_min), mode, &overflow_ok); __ SmiAddConstant(r9, rcx, Smi::FromInt(y_min), constraints, &overflow_ok);
__ jmp(exit); __ jmp(exit);
__ bind(&overflow_ok); __ bind(&overflow_ok);
__ incq(rax); __ incq(rax);
...@@ -817,7 +816,7 @@ static void SmiAddOverflowTest(MacroAssembler* masm, ...@@ -817,7 +816,7 @@ static void SmiAddOverflowTest(MacroAssembler* masm,
{ {
Label overflow_ok; Label overflow_ok;
__ incq(rax); __ incq(rax);
__ SmiAddConstant(rcx, rcx, Smi::FromInt(y_min), mode, &overflow_ok); __ SmiAddConstant(rcx, rcx, Smi::FromInt(y_min), constraints, &overflow_ok);
__ jmp(exit); __ jmp(exit);
__ bind(&overflow_ok); __ bind(&overflow_ok);
__ incq(rax); __ incq(rax);
...@@ -853,7 +852,7 @@ static void SmiAddOverflowTest(MacroAssembler* masm, ...@@ -853,7 +852,7 @@ static void SmiAddOverflowTest(MacroAssembler* masm,
{ {
Label overflow_ok; Label overflow_ok;
__ incq(rax); __ incq(rax);
__ SmiAddConstant(r9, rcx, Smi::FromInt(y_max), mode, &overflow_ok); __ SmiAddConstant(r9, rcx, Smi::FromInt(y_max), constraints, &overflow_ok);
__ jmp(exit); __ jmp(exit);
__ bind(&overflow_ok); __ bind(&overflow_ok);
__ incq(rax); __ incq(rax);
...@@ -861,12 +860,11 @@ static void SmiAddOverflowTest(MacroAssembler* masm, ...@@ -861,12 +860,11 @@ static void SmiAddOverflowTest(MacroAssembler* masm,
__ j(not_equal, exit); __ j(not_equal, exit);
} }
mode.RemoveAll(); constraints = i::SmiOperationConstraint::kBailoutOnOverflow;
mode.Add(i::BAILOUT_ON_OVERFLOW);
{ {
Label overflow_ok; Label overflow_ok;
__ incq(rax); __ incq(rax);
__ SmiAddConstant(rcx, rcx, Smi::FromInt(y_max), mode, &overflow_ok); __ SmiAddConstant(rcx, rcx, Smi::FromInt(y_max), constraints, &overflow_ok);
__ jmp(exit); __ jmp(exit);
__ bind(&overflow_ok); __ bind(&overflow_ok);
__ incq(rax); __ incq(rax);
...@@ -952,28 +950,27 @@ static void SmiSubTest(MacroAssembler* masm, ...@@ -952,28 +950,27 @@ static void SmiSubTest(MacroAssembler* masm,
__ cmpq(rcx, r8); __ cmpq(rcx, r8);
__ j(not_equal, exit); __ j(not_equal, exit);
i::SmiOperationExecutionMode mode; i::SmiOperationConstraints constraints =
mode.Add(i::PRESERVE_SOURCE_REGISTER); i::SmiOperationConstraint::kPreserveSourceRegister |
mode.Add(i::BAILOUT_ON_OVERFLOW); i::SmiOperationConstraint::kBailoutOnOverflow;
__ Move(rcx, Smi::FromInt(first)); __ Move(rcx, Smi::FromInt(first));
__ incq(rax); // Test 4. __ incq(rax); // Test 4.
__ SmiSubConstant(rcx, rcx, Smi::FromInt(second), mode, exit); __ SmiSubConstant(rcx, rcx, Smi::FromInt(second), constraints, exit);
__ cmpq(rcx, r8); __ cmpq(rcx, r8);
__ j(not_equal, exit); __ j(not_equal, exit);
__ Move(rcx, Smi::FromInt(first)); __ Move(rcx, Smi::FromInt(first));
__ incq(rax); // Test 5. __ incq(rax); // Test 5.
__ SmiSubConstant(r9, rcx, Smi::FromInt(second), mode, exit); __ SmiSubConstant(r9, rcx, Smi::FromInt(second), constraints, exit);
__ cmpq(r9, r8); __ cmpq(r9, r8);
__ j(not_equal, exit); __ j(not_equal, exit);
mode.RemoveAll(); constraints = i::SmiOperationConstraint::kPreserveSourceRegister |
mode.Add(i::PRESERVE_SOURCE_REGISTER); i::SmiOperationConstraint::kBailoutOnNoOverflow;
mode.Add(i::BAILOUT_ON_NO_OVERFLOW);
__ Move(rcx, Smi::FromInt(first)); __ Move(rcx, Smi::FromInt(first));
Label done; Label done;
__ incq(rax); // Test 6. __ incq(rax); // Test 6.
__ SmiSubConstant(rcx, rcx, Smi::FromInt(second), mode, &done); __ SmiSubConstant(rcx, rcx, Smi::FromInt(second), constraints, &done);
__ jmp(exit); __ jmp(exit);
__ bind(&done); __ bind(&done);
__ cmpq(rcx, r8); __ cmpq(rcx, r8);
...@@ -1015,15 +1012,15 @@ static void SmiSubOverflowTest(MacroAssembler* masm, ...@@ -1015,15 +1012,15 @@ static void SmiSubOverflowTest(MacroAssembler* masm,
__ j(not_equal, exit); __ j(not_equal, exit);
} }
i::SmiOperationExecutionMode mode; i::SmiOperationConstraints constraints =
mode.Add(i::PRESERVE_SOURCE_REGISTER); i::SmiOperationConstraint::kPreserveSourceRegister |
mode.Add(i::BAILOUT_ON_OVERFLOW); i::SmiOperationConstraint::kBailoutOnOverflow;
__ movq(rcx, r11); __ movq(rcx, r11);
{ {
Label overflow_ok; Label overflow_ok;
__ incq(rax); __ incq(rax);
__ SmiSubConstant(r9, rcx, Smi::FromInt(y_min), mode, &overflow_ok); __ SmiSubConstant(r9, rcx, Smi::FromInt(y_min), constraints, &overflow_ok);
__ jmp(exit); __ jmp(exit);
__ bind(&overflow_ok); __ bind(&overflow_ok);
__ incq(rax); __ incq(rax);
...@@ -1034,7 +1031,7 @@ static void SmiSubOverflowTest(MacroAssembler* masm, ...@@ -1034,7 +1031,7 @@ static void SmiSubOverflowTest(MacroAssembler* masm,
{ {
Label overflow_ok; Label overflow_ok;
__ incq(rax); __ incq(rax);
__ SmiSubConstant(rcx, rcx, Smi::FromInt(y_min), mode, &overflow_ok); __ SmiSubConstant(rcx, rcx, Smi::FromInt(y_min), constraints, &overflow_ok);
__ jmp(exit); __ jmp(exit);
__ bind(&overflow_ok); __ bind(&overflow_ok);
__ incq(rax); __ incq(rax);
...@@ -1070,7 +1067,7 @@ static void SmiSubOverflowTest(MacroAssembler* masm, ...@@ -1070,7 +1067,7 @@ static void SmiSubOverflowTest(MacroAssembler* masm,
{ {
Label overflow_ok; Label overflow_ok;
__ incq(rax); __ incq(rax);
__ SmiSubConstant(rcx, rcx, Smi::FromInt(y_max), mode, &overflow_ok); __ SmiSubConstant(rcx, rcx, Smi::FromInt(y_max), constraints, &overflow_ok);
__ jmp(exit); __ jmp(exit);
__ bind(&overflow_ok); __ bind(&overflow_ok);
__ incq(rax); __ incq(rax);
...@@ -1078,13 +1075,12 @@ static void SmiSubOverflowTest(MacroAssembler* masm, ...@@ -1078,13 +1075,12 @@ static void SmiSubOverflowTest(MacroAssembler* masm,
__ j(not_equal, exit); __ j(not_equal, exit);
} }
mode.RemoveAll(); constraints = i::SmiOperationConstraint::kBailoutOnOverflow;
mode.Add(i::BAILOUT_ON_OVERFLOW);
__ movq(rcx, r11); __ movq(rcx, r11);
{ {
Label overflow_ok; Label overflow_ok;
__ incq(rax); __ incq(rax);
__ SmiSubConstant(rcx, rcx, Smi::FromInt(y_max), mode, &overflow_ok); __ SmiSubConstant(rcx, rcx, Smi::FromInt(y_max), constraints, &overflow_ok);
__ jmp(exit); __ jmp(exit);
__ bind(&overflow_ok); __ bind(&overflow_ok);
__ incq(rax); __ incq(rax);
......
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