2015-01-09 14:19:55 +00:00
|
|
|
// Copyright 2015 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.
|
|
|
|
|
|
|
|
#include "src/compiler/opcodes.h"
|
|
|
|
#include "testing/gtest/include/gtest/gtest.h"
|
|
|
|
|
|
|
|
namespace v8 {
|
|
|
|
namespace internal {
|
|
|
|
namespace compiler {
|
|
|
|
|
2015-01-15 15:07:29 +00:00
|
|
|
namespace {
|
|
|
|
|
|
|
|
bool IsCommonOpcode(IrOpcode::Value opcode) {
|
|
|
|
switch (opcode) {
|
|
|
|
#define OPCODE(Opcode) \
|
|
|
|
case IrOpcode::k##Opcode: \
|
|
|
|
return true;
|
|
|
|
COMMON_OP_LIST(OPCODE)
|
|
|
|
CONTROL_OP_LIST(OPCODE)
|
|
|
|
#undef OPCODE
|
|
|
|
default:
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool IsControlOpcode(IrOpcode::Value opcode) {
|
|
|
|
switch (opcode) {
|
|
|
|
#define OPCODE(Opcode) \
|
|
|
|
case IrOpcode::k##Opcode: \
|
|
|
|
return true;
|
|
|
|
CONTROL_OP_LIST(OPCODE)
|
|
|
|
#undef OPCODE
|
|
|
|
default:
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool IsJsOpcode(IrOpcode::Value opcode) {
|
|
|
|
switch (opcode) {
|
|
|
|
#define OPCODE(Opcode) \
|
|
|
|
case IrOpcode::k##Opcode: \
|
|
|
|
return true;
|
|
|
|
JS_OP_LIST(OPCODE)
|
|
|
|
#undef OPCODE
|
|
|
|
default:
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2015-01-19 15:35:03 +00:00
|
|
|
bool IsConstantOpcode(IrOpcode::Value opcode) {
|
2015-01-15 15:07:29 +00:00
|
|
|
switch (opcode) {
|
|
|
|
#define OPCODE(Opcode) \
|
|
|
|
case IrOpcode::k##Opcode: \
|
|
|
|
return true;
|
2015-01-19 15:35:03 +00:00
|
|
|
CONSTANT_OP_LIST(OPCODE)
|
2015-01-15 15:07:29 +00:00
|
|
|
#undef OPCODE
|
|
|
|
default:
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2015-02-24 12:26:16 +00:00
|
|
|
bool IsComparisonOpcode(IrOpcode::Value opcode) {
|
|
|
|
switch (opcode) {
|
|
|
|
#define OPCODE(Opcode) \
|
|
|
|
case IrOpcode::k##Opcode: \
|
|
|
|
return true;
|
|
|
|
JS_COMPARE_BINOP_LIST(OPCODE)
|
|
|
|
SIMPLIFIED_COMPARE_BINOP_LIST(OPCODE)
|
|
|
|
MACHINE_COMPARE_BINOP_LIST(OPCODE)
|
|
|
|
#undef OPCODE
|
|
|
|
default:
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2015-01-15 15:07:29 +00:00
|
|
|
const IrOpcode::Value kInvalidOpcode = static_cast<IrOpcode::Value>(123456789);
|
|
|
|
|
|
|
|
} // namespace
|
|
|
|
|
|
|
|
|
|
|
|
TEST(IrOpcodeTest, IsCommonOpcode) {
|
|
|
|
EXPECT_FALSE(IrOpcode::IsCommonOpcode(kInvalidOpcode));
|
|
|
|
#define OPCODE(Opcode) \
|
|
|
|
EXPECT_EQ(IsCommonOpcode(IrOpcode::k##Opcode), \
|
|
|
|
IrOpcode::IsCommonOpcode(IrOpcode::k##Opcode));
|
|
|
|
ALL_OP_LIST(OPCODE)
|
|
|
|
#undef OPCODE
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
TEST(IrOpcodeTest, IsControlOpcode) {
|
|
|
|
EXPECT_FALSE(IrOpcode::IsControlOpcode(kInvalidOpcode));
|
|
|
|
#define OPCODE(Opcode) \
|
|
|
|
EXPECT_EQ(IsControlOpcode(IrOpcode::k##Opcode), \
|
|
|
|
IrOpcode::IsControlOpcode(IrOpcode::k##Opcode));
|
|
|
|
ALL_OP_LIST(OPCODE)
|
|
|
|
#undef OPCODE
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
TEST(IrOpcodeTest, IsJsOpcode) {
|
|
|
|
EXPECT_FALSE(IrOpcode::IsJsOpcode(kInvalidOpcode));
|
|
|
|
#define OPCODE(Opcode) \
|
|
|
|
EXPECT_EQ(IsJsOpcode(IrOpcode::k##Opcode), \
|
|
|
|
IrOpcode::IsJsOpcode(IrOpcode::k##Opcode));
|
|
|
|
ALL_OP_LIST(OPCODE)
|
|
|
|
#undef OPCODE
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2015-01-19 15:35:03 +00:00
|
|
|
TEST(IrOpcodeTest, IsConstantOpcode) {
|
|
|
|
EXPECT_FALSE(IrOpcode::IsConstantOpcode(kInvalidOpcode));
|
|
|
|
#define OPCODE(Opcode) \
|
|
|
|
EXPECT_EQ(IsConstantOpcode(IrOpcode::k##Opcode), \
|
|
|
|
IrOpcode::IsConstantOpcode(IrOpcode::k##Opcode));
|
2015-01-15 15:07:29 +00:00
|
|
|
ALL_OP_LIST(OPCODE)
|
|
|
|
#undef OPCODE
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2015-02-24 12:26:16 +00:00
|
|
|
TEST(IrOpcodeTest, IsComparisonOpcode) {
|
|
|
|
EXPECT_FALSE(IrOpcode::IsComparisonOpcode(kInvalidOpcode));
|
|
|
|
#define OPCODE(Opcode) \
|
|
|
|
EXPECT_EQ(IsComparisonOpcode(IrOpcode::k##Opcode), \
|
|
|
|
IrOpcode::IsComparisonOpcode(IrOpcode::k##Opcode));
|
|
|
|
ALL_OP_LIST(OPCODE)
|
|
|
|
#undef OPCODE
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2015-01-09 14:19:55 +00:00
|
|
|
TEST(IrOpcodeTest, Mnemonic) {
|
2015-01-15 15:07:29 +00:00
|
|
|
EXPECT_STREQ("UnknownOpcode", IrOpcode::Mnemonic(kInvalidOpcode));
|
2015-01-09 14:19:55 +00:00
|
|
|
#define OPCODE(Opcode) \
|
|
|
|
EXPECT_STREQ(#Opcode, IrOpcode::Mnemonic(IrOpcode::k##Opcode));
|
|
|
|
ALL_OP_LIST(OPCODE)
|
|
|
|
#undef OPCODE
|
|
|
|
}
|
|
|
|
|
|
|
|
} // namespace compiler
|
|
|
|
} // namespace internal
|
|
|
|
} // namespace v8
|