Intrinsics in the RUNTIME_FUNCTION_LIST are now available with '_', too.
Now the three intrinsic lists only differ in their compiler support. Unifying the lists and making the logic what is supported in which compiler local to the compilers themselves is handled in a follow-up CL. BUG=v8:3947 LOG=n Review URL: https://codereview.chromium.org/983183002 Cr-Commit-Position: refs/heads/master@{#27046}
This commit is contained in:
parent
5de20c05d5
commit
e2ce456754
@ -9535,6 +9535,22 @@ const HOptimizedGraphBuilder::InlineFunctionGenerator
|
||||
#undef INLINE_FUNCTION_GENERATOR_ADDRESS
|
||||
|
||||
|
||||
HOptimizedGraphBuilder::InlineFunctionGenerator
|
||||
HOptimizedGraphBuilder::FindInlineFunctionGenerator(CallRuntime* expr) {
|
||||
const Runtime::Function* function = expr->function();
|
||||
if (function == nullptr || function->intrinsic_type != Runtime::INLINE) {
|
||||
return nullptr;
|
||||
}
|
||||
Runtime::FunctionId id = function->function_id;
|
||||
if (id < Runtime::kFirstInlineFunction) return nullptr;
|
||||
int lookup_index =
|
||||
static_cast<int>(id) - static_cast<int>(Runtime::kFirstInlineFunction);
|
||||
DCHECK(static_cast<size_t>(lookup_index) <
|
||||
arraysize(kInlineFunctionGenerators));
|
||||
return kInlineFunctionGenerators[lookup_index];
|
||||
}
|
||||
|
||||
|
||||
template <class ViewClass>
|
||||
void HGraphBuilder::BuildArrayBufferViewInitialization(
|
||||
HValue* obj,
|
||||
@ -9914,21 +9930,13 @@ void HOptimizedGraphBuilder::VisitCallRuntime(CallRuntime* expr) {
|
||||
const Runtime::Function* function = expr->function();
|
||||
DCHECK(function != NULL);
|
||||
|
||||
if (function->intrinsic_type == Runtime::INLINE) {
|
||||
InlineFunctionGenerator generator = FindInlineFunctionGenerator(expr);
|
||||
if (generator != nullptr) {
|
||||
DCHECK(expr->name()->length() > 0);
|
||||
DCHECK(expr->name()->Get(0) == '_');
|
||||
// Call to an inline function.
|
||||
int lookup_index = static_cast<int>(function->function_id) -
|
||||
static_cast<int>(Runtime::kFirstInlineFunction);
|
||||
DCHECK(lookup_index >= 0);
|
||||
DCHECK(static_cast<size_t>(lookup_index) <
|
||||
arraysize(kInlineFunctionGenerators));
|
||||
InlineFunctionGenerator generator = kInlineFunctionGenerators[lookup_index];
|
||||
|
||||
// Call the inline code generator using the pointer-to-member.
|
||||
(this->*generator)(expr);
|
||||
} else {
|
||||
DCHECK(function->intrinsic_type == Runtime::RUNTIME);
|
||||
Handle<String> name = expr->name();
|
||||
int argument_count = expr->arguments()->length();
|
||||
CHECK_ALIVE(VisitExpressions(expr->arguments()));
|
||||
|
@ -2122,6 +2122,8 @@ class HOptimizedGraphBuilder : public HGraphBuilder, public AstVisitor {
|
||||
typedef void (HOptimizedGraphBuilder::*InlineFunctionGenerator)
|
||||
(CallRuntime* call);
|
||||
|
||||
InlineFunctionGenerator FindInlineFunctionGenerator(CallRuntime* expr);
|
||||
|
||||
// Forward declarations for inner scope classes.
|
||||
class SubgraphScope;
|
||||
|
||||
|
@ -49,8 +49,8 @@ INLINE_FUNCTION_LIST(F)
|
||||
|
||||
static const Runtime::Function kIntrinsicFunctions[] = {
|
||||
RUNTIME_FUNCTION_LIST(F) INLINE_FUNCTION_LIST(F)
|
||||
INLINE_OPTIMIZED_FUNCTION_LIST(F) INLINE_FUNCTION_LIST(I)
|
||||
INLINE_OPTIMIZED_FUNCTION_LIST(I)};
|
||||
INLINE_OPTIMIZED_FUNCTION_LIST(F) RUNTIME_FUNCTION_LIST(I)
|
||||
INLINE_FUNCTION_LIST(I) INLINE_OPTIMIZED_FUNCTION_LIST(I)};
|
||||
|
||||
#undef I
|
||||
#undef F
|
||||
|
@ -771,8 +771,8 @@ class Runtime : public AllStatic {
|
||||
#define F(name, nargs, ressize) k##name,
|
||||
#define I(name, nargs, ressize) kInline##name,
|
||||
RUNTIME_FUNCTION_LIST(F) INLINE_FUNCTION_LIST(F)
|
||||
INLINE_OPTIMIZED_FUNCTION_LIST(F) INLINE_FUNCTION_LIST(I)
|
||||
INLINE_OPTIMIZED_FUNCTION_LIST(I)
|
||||
INLINE_OPTIMIZED_FUNCTION_LIST(F) RUNTIME_FUNCTION_LIST(I)
|
||||
INLINE_FUNCTION_LIST(I) INLINE_OPTIMIZED_FUNCTION_LIST(I)
|
||||
#undef I
|
||||
#undef F
|
||||
kNumFunctions,
|
||||
|
Loading…
Reference in New Issue
Block a user