Chromium Code Reviews| Index: runtime/vm/intrinsifier.cc |
| =================================================================== |
| --- runtime/vm/intrinsifier.cc (revision 15181) |
| +++ runtime/vm/intrinsifier.cc (working copy) |
| @@ -64,6 +64,8 @@ |
| bool Intrinsifier::CanIntrinsify(const Function& function) { |
| if (!FLAG_intrinsify) return false; |
| if (function.IsClosureFunction()) return false; |
| + // Can occur because of compile-all flag. |
| + if (function.is_external()) return false; |
| // Intrinsic kind is set lazily below. |
| if (function.intrinsic_kind() == Function::kIsIntrinsic) return true; |
| if (function.intrinsic_kind() == Function::kIsNotIntrinsic) return false; |
| @@ -77,7 +79,7 @@ |
| return false; |
| } |
| const char* class_name = String::Handle(function_class.Name()).ToCString(); |
| -#define FIND_INTRINSICS(test_class_name, test_function_name, destination) \ |
| +#define FIND_INTRINSICS(test_class_name, test_function_name, destination, fp) \ |
| if (TestFunction(function, \ |
| class_name, function_name, \ |
| #test_class_name, #test_function_name)) { \ |
| @@ -91,15 +93,30 @@ |
| return false; |
| } |
| + |
| +static bool CheckFingerprint(const Function& function, intptr_t fp) { |
| + if (function.SourceFingerprint() != fp) { |
| + OS::Print("FP mismatch while intrinsifying %s:" |
| + " expecting %"Pd" found %d\n", |
| + function.ToFullyQualifiedCString(), |
| + fp, |
| + function.SourceFingerprint()); |
| + return false; |
| + } |
| + return true; |
| +} |
|
siva
2012/11/21 17:33:14
Since this function is used only under ASSERT you
srdjan
2012/11/21 18:11:14
Done.
srdjan
2012/11/21 18:55:38
Backed out, since all functions used in ASSERT mus
|
| + |
| + |
| bool Intrinsifier::Intrinsify(const Function& function, Assembler* assembler) { |
| if (!CanIntrinsify(function)) return false; |
| const char* function_name = String::Handle(function.name()).ToCString(); |
| const Class& function_class = Class::Handle(function.Owner()); |
| const char* class_name = String::Handle(function_class.Name()).ToCString(); |
| -#define FIND_INTRINSICS(test_class_name, test_function_name, destination) \ |
| +#define FIND_INTRINSICS(test_class_name, test_function_name, destination, fp) \ |
| if (TestFunction(function, \ |
| class_name, function_name, \ |
| #test_class_name, #test_function_name)) { \ |
| + ASSERT(CheckFingerprint(function, fp)); \ |
| return destination(assembler); \ |
| } \ |