[VM interpreter] Do not interpret some Bigint intrinsics (fixes #34901).
Update status file.
Change-Id: I43b222562488c90c9438fd792dc2505b14d5d373
Reviewed-on: https://dart-review.googlesource.com/c/81334
Commit-Queue: Régis Crelier <regis@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index fe0999e..92ac5fb 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -76,6 +76,7 @@
false,
"Remove script timestamps to allow for deterministic testing.");
+DECLARE_FLAG(bool, intrinsify);
DECLARE_FLAG(bool, show_invisible_frames);
DECLARE_FLAG(bool, trace_deoptimization);
DECLARE_FLAG(bool, trace_deoptimization_verbose);
@@ -5971,6 +5972,25 @@
#if !defined(DART_PRECOMPILED_RUNTIME)
bool Function::IsBytecodeAllowed(Zone* zone) const {
+ if (FLAG_intrinsify) {
+ // Bigint intrinsics should not be interpreted, because their Dart version
+ // is only to be used when intrinsics are disabled. Mixing an interpreted
+ // Dart version with a compiled intrinsified version results in a mismatch
+ // in the number of digits processed by each call.
+ switch (recognized_kind()) {
+ case MethodRecognizer::kBigint_lsh:
+ case MethodRecognizer::kBigint_rsh:
+ case MethodRecognizer::kBigint_absAdd:
+ case MethodRecognizer::kBigint_absSub:
+ case MethodRecognizer::kBigint_mulAdd:
+ case MethodRecognizer::kBigint_sqrAdd:
+ case MethodRecognizer::kBigint_estimateQuotientDigit:
+ case MethodRecognizer::kMontgomery_mulMod:
+ return false;
+ default:
+ break;
+ }
+ }
switch (kind()) {
case RawFunction::kImplicitGetter:
case RawFunction::kImplicitSetter:
diff --git a/tests/corelib_2/corelib_2.status b/tests/corelib_2/corelib_2.status
index 4af23ff..ea16c6f 100644
--- a/tests/corelib_2/corelib_2.status
+++ b/tests/corelib_2/corelib_2.status
@@ -59,10 +59,6 @@
int_modulo_arith_test/none: RuntimeError
string_from_environment3_test/03: Crash
-[ $compiler == dartkb ]
-bigint_from_test: RuntimeError, Pass # Issue 34901
-bigint_test: Skip # Issue 34901
-
[ $compiler == fasta ]
bool_from_environment2_test/03: MissingCompileTimeError
string_from_environment3_test/03: MissingCompileTimeError
@@ -421,7 +417,7 @@
[ !$strong && ($runtime == dart_precompiled || $runtime == vm) ]
list_test/*: RuntimeError # VM doesn't implement strong mode covariance checks
-[ $arch == simarm || $arch == simarm64 || $arch == simdbc64 || $compiler == dartkb ]
+[ $arch == simarm || $arch == simarm64 || $arch == simdbc64 ]
bigint_parse_radix_test: Skip # Issue 31659
bigint_test: Skip # Issue 31659