Version 2.14.0-377.8.beta

* Cherry-pick abe2e7fd282c8ea7df83afb1b9ec41180724f008 to beta
diff --git a/runtime/vm/compiler/stub_code_compiler_arm64.cc b/runtime/vm/compiler/stub_code_compiler_arm64.cc
index 2c1288d..8694eb4 100644
--- a/runtime/vm/compiler/stub_code_compiler_arm64.cc
+++ b/runtime/vm/compiler/stub_code_compiler_arm64.cc
@@ -3173,15 +3173,14 @@
 }
 
 // Does identical check (object references are equal or not equal) with special
-// checks for boxed numbers.
-// Left and right are pushed on stack.
-// Return Zero condition flag set if equal.
-// Note: A Mint cannot contain a value that would fit in Smi.
+// checks for boxed numbers and returns with ZF set iff left and right are
+// identical.
 static void GenerateIdenticalWithNumberCheckStub(Assembler* assembler,
                                                  const Register left,
                                                  const Register right) {
-  Label reference_compare, done, check_mint;
+  Label reference_compare, check_mint;
   // If any of the arguments is Smi do reference compare.
+  // Note: A Mint cannot contain a value that would fit in Smi.
   __ BranchIfSmi(left, &reference_compare);
   __ BranchIfSmi(right, &reference_compare);
 
@@ -3189,27 +3188,31 @@
   __ CompareClassId(left, kDoubleCid);
   __ b(&check_mint, NE);
   __ CompareClassId(right, kDoubleCid);
-  __ b(&done, NE);
+  __ b(&reference_compare, NE);  // Do not branch directly to ret! See below.
 
   // Double values bitwise compare.
   __ LoadFieldFromOffset(left, left, target::Double::value_offset());
   __ LoadFieldFromOffset(right, right, target::Double::value_offset());
   __ CompareRegisters(left, right);
-  __ b(&done);
+  __ ret();
 
   __ Bind(&check_mint);
   __ CompareClassId(left, kMintCid);
   __ b(&reference_compare, NE);
   __ CompareClassId(right, kMintCid);
-  __ b(&done, NE);
+  __ b(&reference_compare, NE);  // Do not branch directly to ret! See below.
   __ LoadFieldFromOffset(left, left, target::Mint::value_offset());
   __ LoadFieldFromOffset(right, right, target::Mint::value_offset());
   __ CompareRegisters(left, right);
-  __ b(&done);
+  __ ret();
 
   __ Bind(&reference_compare);
   __ CompareObjectRegisters(left, right);
-  __ Bind(&done);
+  // None of the branches above go directly here to avoid generating a conditional 
+  // branch to a ret instruction.
+  // This is an attempt to work-around a possible CPU on Exynos 2100 SoC.
+  // See https://github.com/flutter/flutter/issues/88261
+  __ ret();
 }
 
 // Called only from unoptimized code. All relevant registers have been saved.
@@ -3235,7 +3238,6 @@
   __ LoadFromOffset(left, SP, 1 * target::kWordSize);
   __ LoadFromOffset(right, SP, 0 * target::kWordSize);
   GenerateIdenticalWithNumberCheckStub(assembler, left, right);
-  __ ret();
 
 #if !defined(PRODUCT)
   __ Bind(&stepping);
@@ -3259,7 +3261,6 @@
   __ LoadFromOffset(left, SP, 1 * target::kWordSize);
   __ LoadFromOffset(right, SP, 0 * target::kWordSize);
   GenerateIdenticalWithNumberCheckStub(assembler, left, right);
-  __ ret();
 }
 
 // Called from megamorphic call sites.
diff --git a/tools/VERSION b/tools/VERSION
index afb109a..baced14 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -28,4 +28,4 @@
 MINOR 14
 PATCH 0
 PRERELEASE 377
-PRERELEASE_PATCH 7
\ No newline at end of file
+PRERELEASE_PATCH 8
\ No newline at end of file