diff --git a/.dart_tool/package_config.json b/.dart_tool/package_config.json
index a203927..45febc4 100644
--- a/.dart_tool/package_config.json
+++ b/.dart_tool/package_config.json
@@ -11,7 +11,7 @@
     "constraint, update this by running tools/generate_package_config.dart."
   ],
   "configVersion": 2,
-  "generated": "2021-02-25T12:53:17.111860",
+  "generated": "2021-03-01T09:26:17.118461",
   "generator": "tools/generate_package_config.dart",
   "packages": [
     {
diff --git a/DEPS b/DEPS
index 35ba597..383b118 100644
--- a/DEPS
+++ b/DEPS
@@ -101,7 +101,7 @@
   "dart_style_tag": "1.3.11",  # Please see the note above before updating.
 
   "chromedriver_tag": "83.0.4103.39",
-  "dartdoc_rev" : "9e61a4f11091aaa8998525a2692b14148dc24ab5",
+  "dartdoc_rev" : "174021f3d76c2a8500b54977c80f32c5bbc099f1",
   "ffi_rev": "f3346299c55669cc0db48afae85b8110088bf8da",
   "fixnum_rev": "16d3890c6dc82ca629659da1934e412292508bba",
   "file_rev": "0e09370f581ab6388d46fda4cdab66638c0171a1",
diff --git a/pkg/front_end/testcases/const_functions/const_functions_simple_invocations.dart b/pkg/front_end/testcases/const_functions/const_functions_simple_invocations.dart
new file mode 100644
index 0000000..d77e883
--- /dev/null
+++ b/pkg/front_end/testcases/const_functions/const_functions_simple_invocations.dart
@@ -0,0 +1,50 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Tests function invocations that immediately return simple expressions.
+
+import "package:expect/expect.dart";
+
+const binary = binaryFn(2, 1);
+int binaryFn(int a, int b) => a - b;
+
+const optional = optionalFn(2);
+const optional1 = optionalFn(2, 1);
+int optionalFn(int c, [int d = 0]) => c + d;
+
+const named = namedFn(2, f: 2);
+const named1 = namedFn(2);
+int namedFn(int e, {int f = 3}) => e + f;
+
+const type = typeFn(6);
+T typeFn<T>(T x) => x;
+
+const str = stringFn("str");
+String stringFn(String s) => s + "ing";
+
+const eq = equalFn(2, 2);
+bool equalFn(int a, int b) => a == b;
+
+const negative = unary(2);
+int unary(int a) => -a;
+
+const boolean = boolFn(true, false);
+bool boolFn(bool a, bool b) => a || b;
+
+const doubleResult = doubleFn(2.2, 2);
+double doubleFn(double a, double b) => a * b;
+
+void main() {
+  Expect.equals(binary, 1);
+  Expect.equals(optional, 2);
+  Expect.equals(optional1, 3);
+  Expect.equals(named, 4);
+  Expect.equals(named1, 5);
+  Expect.equals(type, 6);
+  Expect.equals(str, "string");
+  Expect.equals(eq, true);
+  Expect.equals(negative, -2);
+  Expect.equals(boolean, true);
+  Expect.equals(doubleResult, 4.4);
+}
diff --git a/pkg/front_end/testcases/const_functions/const_functions_simple_invocations.dart.strong.expect b/pkg/front_end/testcases/const_functions/const_functions_simple_invocations.dart.strong.expect
new file mode 100644
index 0000000..977caaa
--- /dev/null
+++ b/pkg/front_end/testcases/const_functions/const_functions_simple_invocations.dart.strong.expect
@@ -0,0 +1,63 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "package:expect/expect.dart" as exp;
+
+import "package:expect/expect.dart";
+
+static const field core::int binary = #C1;
+static const field core::int optional = #C2;
+static const field core::int optional1 = #C3;
+static const field core::int named = #C4;
+static const field core::int named1 = #C5;
+static const field core::int type = #C6;
+static const field core::String str = #C7;
+static const field core::bool eq = #C8;
+static const field core::int negative = #C9;
+static const field core::bool boolean = #C8;
+static const field core::double doubleResult = #C10;
+static method binaryFn(core::int a, core::int b) → core::int
+  return a.{core::num::-}(b);
+static method optionalFn(core::int c, [core::int d = #C11]) → core::int
+  return c.{core::num::+}(d);
+static method namedFn(core::int e, {core::int f = #C3}) → core::int
+  return e.{core::num::+}(f);
+static method typeFn<T extends core::Object? = dynamic>(self::typeFn::T% x) → self::typeFn::T%
+  return x;
+static method stringFn(core::String s) → core::String
+  return s.{core::String::+}("ing");
+static method equalFn(core::int a, core::int b) → core::bool
+  return a.{core::num::==}(b);
+static method unary(core::int a) → core::int
+  return a.{core::int::unary-}();
+static method boolFn(core::bool a, core::bool b) → core::bool
+  return a || b;
+static method doubleFn(core::double a, core::double b) → core::double
+  return a.{core::double::*}(b);
+static method main() → void {
+  exp::Expect::equals(#C1, 1);
+  exp::Expect::equals(#C2, 2);
+  exp::Expect::equals(#C3, 3);
+  exp::Expect::equals(#C4, 4);
+  exp::Expect::equals(#C5, 5);
+  exp::Expect::equals(#C6, 6);
+  exp::Expect::equals(#C7, "string");
+  exp::Expect::equals(#C8, true);
+  exp::Expect::equals(#C9, 2.{core::int::unary-}());
+  exp::Expect::equals(#C8, true);
+  exp::Expect::equals(#C10, 4.4);
+}
+
+constants  {
+  #C1 = 1
+  #C2 = 2
+  #C3 = 3
+  #C4 = 4
+  #C5 = 5
+  #C6 = 6
+  #C7 = "string"
+  #C8 = true
+  #C9 = -2
+  #C10 = 4.4
+  #C11 = 0
+}
diff --git a/pkg/front_end/testcases/const_functions/const_functions_simple_invocations.dart.strong.transformed.expect b/pkg/front_end/testcases/const_functions/const_functions_simple_invocations.dart.strong.transformed.expect
new file mode 100644
index 0000000..920ec7f
--- /dev/null
+++ b/pkg/front_end/testcases/const_functions/const_functions_simple_invocations.dart.strong.transformed.expect
@@ -0,0 +1,67 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "package:expect/expect.dart" as exp;
+
+import "package:expect/expect.dart";
+
+static const field core::int binary = #C1;
+static const field core::int optional = #C2;
+static const field core::int optional1 = #C3;
+static const field core::int named = #C4;
+static const field core::int named1 = #C5;
+static const field core::int type = #C6;
+static const field core::String str = #C7;
+static const field core::bool eq = #C8;
+static const field core::int negative = #C9;
+static const field core::bool boolean = #C8;
+static const field core::double doubleResult = #C10;
+static method binaryFn(core::int a, core::int b) → core::int
+  return a.{core::num::-}(b);
+static method optionalFn(core::int c, [core::int d = #C11]) → core::int
+  return c.{core::num::+}(d);
+static method namedFn(core::int e, {core::int f = #C3}) → core::int
+  return e.{core::num::+}(f);
+static method typeFn<T extends core::Object? = dynamic>(self::typeFn::T% x) → self::typeFn::T%
+  return x;
+static method stringFn(core::String s) → core::String
+  return s.{core::String::+}("ing");
+static method equalFn(core::int a, core::int b) → core::bool
+  return a.{core::num::==}(b);
+static method unary(core::int a) → core::int
+  return a.{core::int::unary-}();
+static method boolFn(core::bool a, core::bool b) → core::bool
+  return a || b;
+static method doubleFn(core::double a, core::double b) → core::double
+  return a.{core::double::*}(b);
+static method main() → void {
+  exp::Expect::equals(#C1, 1);
+  exp::Expect::equals(#C2, 2);
+  exp::Expect::equals(#C3, 3);
+  exp::Expect::equals(#C4, 4);
+  exp::Expect::equals(#C5, 5);
+  exp::Expect::equals(#C6, 6);
+  exp::Expect::equals(#C7, "string");
+  exp::Expect::equals(#C8, true);
+  exp::Expect::equals(#C9, 2.{core::int::unary-}());
+  exp::Expect::equals(#C8, true);
+  exp::Expect::equals(#C10, 4.4);
+}
+
+constants  {
+  #C1 = 1
+  #C2 = 2
+  #C3 = 3
+  #C4 = 4
+  #C5 = 5
+  #C6 = 6
+  #C7 = "string"
+  #C8 = true
+  #C9 = -2
+  #C10 = 4.4
+  #C11 = 0
+}
+
+Extra constant evaluation status:
+Evaluated: MethodInvocation @ org-dartlang-testcase:///const_functions_simple_invocations.dart:47:27 -> IntConstant(-2)
+Extra constant evaluation: evaluated: 35, effectively constant: 1
diff --git a/pkg/front_end/testcases/const_functions/const_functions_simple_invocations.dart.textual_outline.expect b/pkg/front_end/testcases/const_functions/const_functions_simple_invocations.dart.textual_outline.expect
new file mode 100644
index 0000000..13bdbb5
--- /dev/null
+++ b/pkg/front_end/testcases/const_functions/const_functions_simple_invocations.dart.textual_outline.expect
@@ -0,0 +1,23 @@
+import "package:expect/expect.dart";
+
+const binary = binaryFn(2, 1);
+int binaryFn(int a, int b) => a - b;
+const optional = optionalFn(2);
+const optional1 = optionalFn(2, 1);
+int optionalFn(int c, [int d = 0]) => c + d;
+const named = namedFn(2, f: 2);
+const named1 = namedFn(2);
+int namedFn(int e, {int f = 3}) => e + f;
+const type = typeFn(6);
+T typeFn<T>(T x) => x;
+const str = stringFn("str");
+String stringFn(String s) => s + "ing";
+const eq = equalFn(2, 2);
+bool equalFn(int a, int b) => a == b;
+const negative = unary(2);
+int unary(int a) => -a;
+const boolean = boolFn(true, false);
+bool boolFn(bool a, bool b) => a || b;
+const doubleResult = doubleFn(2.2, 2);
+double doubleFn(double a, double b) => a * b;
+void main() {}
diff --git a/pkg/front_end/testcases/const_functions/const_functions_simple_invocations.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/const_functions/const_functions_simple_invocations.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..a3e7b8c
--- /dev/null
+++ b/pkg/front_end/testcases/const_functions/const_functions_simple_invocations.dart.textual_outline_modelled.expect
@@ -0,0 +1,23 @@
+import "package:expect/expect.dart";
+
+String stringFn(String s) => s + "ing";
+T typeFn<T>(T x) => x;
+bool boolFn(bool a, bool b) => a || b;
+bool equalFn(int a, int b) => a == b;
+const binary = binaryFn(2, 1);
+const boolean = boolFn(true, false);
+const doubleResult = doubleFn(2.2, 2);
+const eq = equalFn(2, 2);
+const named = namedFn(2, f: 2);
+const named1 = namedFn(2);
+const negative = unary(2);
+const optional = optionalFn(2);
+const optional1 = optionalFn(2, 1);
+const str = stringFn("str");
+const type = typeFn(6);
+double doubleFn(double a, double b) => a * b;
+int binaryFn(int a, int b) => a - b;
+int namedFn(int e, {int f = 3}) => e + f;
+int optionalFn(int c, [int d = 0]) => c + d;
+int unary(int a) => -a;
+void main() {}
diff --git a/pkg/front_end/testcases/const_functions/const_functions_simple_invocations.dart.weak.expect b/pkg/front_end/testcases/const_functions/const_functions_simple_invocations.dart.weak.expect
new file mode 100644
index 0000000..977caaa
--- /dev/null
+++ b/pkg/front_end/testcases/const_functions/const_functions_simple_invocations.dart.weak.expect
@@ -0,0 +1,63 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "package:expect/expect.dart" as exp;
+
+import "package:expect/expect.dart";
+
+static const field core::int binary = #C1;
+static const field core::int optional = #C2;
+static const field core::int optional1 = #C3;
+static const field core::int named = #C4;
+static const field core::int named1 = #C5;
+static const field core::int type = #C6;
+static const field core::String str = #C7;
+static const field core::bool eq = #C8;
+static const field core::int negative = #C9;
+static const field core::bool boolean = #C8;
+static const field core::double doubleResult = #C10;
+static method binaryFn(core::int a, core::int b) → core::int
+  return a.{core::num::-}(b);
+static method optionalFn(core::int c, [core::int d = #C11]) → core::int
+  return c.{core::num::+}(d);
+static method namedFn(core::int e, {core::int f = #C3}) → core::int
+  return e.{core::num::+}(f);
+static method typeFn<T extends core::Object? = dynamic>(self::typeFn::T% x) → self::typeFn::T%
+  return x;
+static method stringFn(core::String s) → core::String
+  return s.{core::String::+}("ing");
+static method equalFn(core::int a, core::int b) → core::bool
+  return a.{core::num::==}(b);
+static method unary(core::int a) → core::int
+  return a.{core::int::unary-}();
+static method boolFn(core::bool a, core::bool b) → core::bool
+  return a || b;
+static method doubleFn(core::double a, core::double b) → core::double
+  return a.{core::double::*}(b);
+static method main() → void {
+  exp::Expect::equals(#C1, 1);
+  exp::Expect::equals(#C2, 2);
+  exp::Expect::equals(#C3, 3);
+  exp::Expect::equals(#C4, 4);
+  exp::Expect::equals(#C5, 5);
+  exp::Expect::equals(#C6, 6);
+  exp::Expect::equals(#C7, "string");
+  exp::Expect::equals(#C8, true);
+  exp::Expect::equals(#C9, 2.{core::int::unary-}());
+  exp::Expect::equals(#C8, true);
+  exp::Expect::equals(#C10, 4.4);
+}
+
+constants  {
+  #C1 = 1
+  #C2 = 2
+  #C3 = 3
+  #C4 = 4
+  #C5 = 5
+  #C6 = 6
+  #C7 = "string"
+  #C8 = true
+  #C9 = -2
+  #C10 = 4.4
+  #C11 = 0
+}
diff --git a/pkg/front_end/testcases/const_functions/const_functions_simple_invocations.dart.weak.outline.expect b/pkg/front_end/testcases/const_functions/const_functions_simple_invocations.dart.weak.outline.expect
new file mode 100644
index 0000000..f3f61d3
--- /dev/null
+++ b/pkg/front_end/testcases/const_functions/const_functions_simple_invocations.dart.weak.outline.expect
@@ -0,0 +1,37 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "package:expect/expect.dart";
+
+static const field core::int binary = self::binaryFn(2, 1);
+static const field core::int optional = self::optionalFn(2);
+static const field core::int optional1 = self::optionalFn(2, 1);
+static const field core::int named = self::namedFn(2, f: 2);
+static const field core::int named1 = self::namedFn(2);
+static const field core::int type = self::typeFn<core::int>(6);
+static const field core::String str = self::stringFn("str");
+static const field core::bool eq = self::equalFn(2, 2);
+static const field core::int negative = self::unary(2);
+static const field core::bool boolean = self::boolFn(true, false);
+static const field core::double doubleResult = self::doubleFn(2.2, 2.0);
+static method binaryFn(core::int a, core::int b) → core::int
+  ;
+static method optionalFn(core::int c, [core::int d]) → core::int
+  ;
+static method namedFn(core::int e, {core::int f}) → core::int
+  ;
+static method typeFn<T extends core::Object? = dynamic>(self::typeFn::T% x) → self::typeFn::T%
+  ;
+static method stringFn(core::String s) → core::String
+  ;
+static method equalFn(core::int a, core::int b) → core::bool
+  ;
+static method unary(core::int a) → core::int
+  ;
+static method boolFn(core::bool a, core::bool b) → core::bool
+  ;
+static method doubleFn(core::double a, core::double b) → core::double
+  ;
+static method main() → void
+  ;
diff --git a/pkg/front_end/testcases/const_functions/const_functions_simple_invocations.dart.weak.transformed.expect b/pkg/front_end/testcases/const_functions/const_functions_simple_invocations.dart.weak.transformed.expect
new file mode 100644
index 0000000..920ec7f
--- /dev/null
+++ b/pkg/front_end/testcases/const_functions/const_functions_simple_invocations.dart.weak.transformed.expect
@@ -0,0 +1,67 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "package:expect/expect.dart" as exp;
+
+import "package:expect/expect.dart";
+
+static const field core::int binary = #C1;
+static const field core::int optional = #C2;
+static const field core::int optional1 = #C3;
+static const field core::int named = #C4;
+static const field core::int named1 = #C5;
+static const field core::int type = #C6;
+static const field core::String str = #C7;
+static const field core::bool eq = #C8;
+static const field core::int negative = #C9;
+static const field core::bool boolean = #C8;
+static const field core::double doubleResult = #C10;
+static method binaryFn(core::int a, core::int b) → core::int
+  return a.{core::num::-}(b);
+static method optionalFn(core::int c, [core::int d = #C11]) → core::int
+  return c.{core::num::+}(d);
+static method namedFn(core::int e, {core::int f = #C3}) → core::int
+  return e.{core::num::+}(f);
+static method typeFn<T extends core::Object? = dynamic>(self::typeFn::T% x) → self::typeFn::T%
+  return x;
+static method stringFn(core::String s) → core::String
+  return s.{core::String::+}("ing");
+static method equalFn(core::int a, core::int b) → core::bool
+  return a.{core::num::==}(b);
+static method unary(core::int a) → core::int
+  return a.{core::int::unary-}();
+static method boolFn(core::bool a, core::bool b) → core::bool
+  return a || b;
+static method doubleFn(core::double a, core::double b) → core::double
+  return a.{core::double::*}(b);
+static method main() → void {
+  exp::Expect::equals(#C1, 1);
+  exp::Expect::equals(#C2, 2);
+  exp::Expect::equals(#C3, 3);
+  exp::Expect::equals(#C4, 4);
+  exp::Expect::equals(#C5, 5);
+  exp::Expect::equals(#C6, 6);
+  exp::Expect::equals(#C7, "string");
+  exp::Expect::equals(#C8, true);
+  exp::Expect::equals(#C9, 2.{core::int::unary-}());
+  exp::Expect::equals(#C8, true);
+  exp::Expect::equals(#C10, 4.4);
+}
+
+constants  {
+  #C1 = 1
+  #C2 = 2
+  #C3 = 3
+  #C4 = 4
+  #C5 = 5
+  #C6 = 6
+  #C7 = "string"
+  #C8 = true
+  #C9 = -2
+  #C10 = 4.4
+  #C11 = 0
+}
+
+Extra constant evaluation status:
+Evaluated: MethodInvocation @ org-dartlang-testcase:///const_functions_simple_invocations.dart:47:27 -> IntConstant(-2)
+Extra constant evaluation: evaluated: 35, effectively constant: 1
diff --git a/pkg/front_end/testcases/const_functions/folder.options b/pkg/front_end/testcases/const_functions/folder.options
new file mode 100644
index 0000000..41f2c63
--- /dev/null
+++ b/pkg/front_end/testcases/const_functions/folder.options
@@ -0,0 +1 @@
+--enable-experiment=const-functions
diff --git a/runtime/lib/integers.cc b/runtime/lib/integers.cc
index e22f89c..2ea08c8 100644
--- a/runtime/lib/integers.cc
+++ b/runtime/lib/integers.cc
@@ -250,18 +250,6 @@
   return ShiftOperationHelper(Token::kSHL, value, amount);
 }
 
-DEFINE_NATIVE_ENTRY(Smi_bitAndFromSmi, 0, 2) {
-  const Smi& left = Smi::CheckedHandle(zone, arguments->NativeArgAt(0));
-  GET_NON_NULL_NATIVE_ARGUMENT(Smi, right, arguments->NativeArgAt(1));
-  if (FLAG_trace_intrinsified_natives) {
-    OS::PrintErr("Smi_bitAndFromSmi %s & %s\n", left.ToCString(),
-                 right.ToCString());
-  }
-  const Smi& left_value = Smi::Cast(left);
-  const Smi& right_value = Smi::Cast(right);
-  return Smi::New(left_value.Value() & right_value.Value());
-}
-
 DEFINE_NATIVE_ENTRY(Smi_bitNegate, 0, 1) {
   const Smi& operand = Smi::CheckedHandle(zone, arguments->NativeArgAt(0));
   if (FLAG_trace_intrinsified_natives) {
diff --git a/runtime/vm/bootstrap_natives.h b/runtime/vm/bootstrap_natives.h
index 2470e89..3190883 100644
--- a/runtime/vm/bootstrap_natives.h
+++ b/runtime/vm/bootstrap_natives.h
@@ -66,7 +66,6 @@
   V(SendPortImpl_get_hashcode, 1)                                              \
   V(SendPortImpl_sendInternal_, 2)                                             \
   V(SendPortImpl_sendAndExitInternal_, 2)                                      \
-  V(Smi_bitAndFromSmi, 2)                                                      \
   V(Smi_bitNegate, 1)                                                          \
   V(Smi_bitLength, 1)                                                          \
   V(Mint_bitNegate, 1)                                                         \
diff --git a/runtime/vm/compiler/asm_intrinsifier_arm.cc b/runtime/vm/compiler/asm_intrinsifier_arm.cc
index 8f5f98b..4dff2a2 100644
--- a/runtime/vm/compiler/asm_intrinsifier_arm.cc
+++ b/runtime/vm/compiler/asm_intrinsifier_arm.cc
@@ -91,8 +91,7 @@
   __ b(not_smi, NE);
 }
 
-void AsmIntrinsifier::Integer_addFromInteger(Assembler* assembler,
-                                             Label* normal_ir_body) {
+void AsmIntrinsifier::Integer_add(Assembler* assembler, Label* normal_ir_body) {
   TestBothArgumentsSmis(assembler, normal_ir_body);  // Checks two smis.
   __ adds(R0, R0, Operand(R1));                      // Adds.
   READS_RETURN_ADDRESS_FROM_LR(__ bx(LR, VC));       // Return if no overflow.
@@ -100,19 +99,6 @@
   __ Bind(normal_ir_body);
 }
 
-void AsmIntrinsifier::Integer_add(Assembler* assembler, Label* normal_ir_body) {
-  Integer_addFromInteger(assembler, normal_ir_body);
-}
-
-void AsmIntrinsifier::Integer_subFromInteger(Assembler* assembler,
-                                             Label* normal_ir_body) {
-  TestBothArgumentsSmis(assembler, normal_ir_body);
-  __ subs(R0, R0, Operand(R1));  // Subtract.
-  READS_RETURN_ADDRESS_FROM_LR(__ bx(LR, VC));  // Return if no overflow.
-  // Otherwise fall through.
-  __ Bind(normal_ir_body);
-}
-
 void AsmIntrinsifier::Integer_sub(Assembler* assembler, Label* normal_ir_body) {
   TestBothArgumentsSmis(assembler, normal_ir_body);
   __ subs(R0, R1, Operand(R0));  // Subtract.
@@ -121,8 +107,7 @@
   __ Bind(normal_ir_body);
 }
 
-void AsmIntrinsifier::Integer_mulFromInteger(Assembler* assembler,
-                                             Label* normal_ir_body) {
+void AsmIntrinsifier::Integer_mul(Assembler* assembler, Label* normal_ir_body) {
   TestBothArgumentsSmis(assembler, normal_ir_body);  // checks two smis
   __ SmiUntag(R0);           // Untags R0. We only want result shifted by one.
   __ smull(R0, IP, R0, R1);  // IP:R0 <- R0 * R1.
@@ -131,10 +116,6 @@
   __ Bind(normal_ir_body);  // Fall through on overflow.
 }
 
-void AsmIntrinsifier::Integer_mul(Assembler* assembler, Label* normal_ir_body) {
-  Integer_mulFromInteger(assembler, normal_ir_body);
-}
-
 // Optimizations:
 // - result is 0 if:
 //   - left is 0
@@ -189,14 +170,13 @@
 //      res = res + right;
 //    }
 //  }
-void AsmIntrinsifier::Integer_moduloFromInteger(Assembler* assembler,
-                                                Label* normal_ir_body) {
+void AsmIntrinsifier::Integer_mod(Assembler* assembler, Label* normal_ir_body) {
   if (!TargetCPUFeatures::can_divide()) {
     return;
   }
   // Check to see if we have integer division
-  __ ldr(R1, Address(SP, +0 * target::kWordSize));
-  __ ldr(R0, Address(SP, +1 * target::kWordSize));
+  __ ldr(R0, Address(SP, +0 * target::kWordSize));
+  __ ldr(R1, Address(SP, +1 * target::kWordSize));
   __ orr(TMP, R0, Operand(R1));
   __ tst(TMP, Operand(kSmiTagMask));
   __ b(normal_ir_body, NE);
@@ -257,8 +237,8 @@
   __ Bind(normal_ir_body);
 }
 
-void AsmIntrinsifier::Integer_bitAndFromInteger(Assembler* assembler,
-                                                Label* normal_ir_body) {
+void AsmIntrinsifier::Integer_bitAnd(Assembler* assembler,
+                                     Label* normal_ir_body) {
   TestBothArgumentsSmis(assembler, normal_ir_body);  // checks two smis
   __ and_(R0, R0, Operand(R1));
 
@@ -266,13 +246,8 @@
   __ Bind(normal_ir_body);
 }
 
-void AsmIntrinsifier::Integer_bitAnd(Assembler* assembler,
-                                     Label* normal_ir_body) {
-  Integer_bitAndFromInteger(assembler, normal_ir_body);
-}
-
-void AsmIntrinsifier::Integer_bitOrFromInteger(Assembler* assembler,
-                                               Label* normal_ir_body) {
+void AsmIntrinsifier::Integer_bitOr(Assembler* assembler,
+                                    Label* normal_ir_body) {
   TestBothArgumentsSmis(assembler, normal_ir_body);  // checks two smis
   __ orr(R0, R0, Operand(R1));
 
@@ -280,13 +255,8 @@
   __ Bind(normal_ir_body);
 }
 
-void AsmIntrinsifier::Integer_bitOr(Assembler* assembler,
-                                    Label* normal_ir_body) {
-  Integer_bitOrFromInteger(assembler, normal_ir_body);
-}
-
-void AsmIntrinsifier::Integer_bitXorFromInteger(Assembler* assembler,
-                                                Label* normal_ir_body) {
+void AsmIntrinsifier::Integer_bitXor(Assembler* assembler,
+                                     Label* normal_ir_body) {
   TestBothArgumentsSmis(assembler, normal_ir_body);  // checks two smis
   __ eor(R0, R0, Operand(R1));
 
@@ -294,11 +264,6 @@
   __ Bind(normal_ir_body);
 }
 
-void AsmIntrinsifier::Integer_bitXor(Assembler* assembler,
-                                     Label* normal_ir_body) {
-  Integer_bitXorFromInteger(assembler, normal_ir_body);
-}
-
 void AsmIntrinsifier::Integer_shl(Assembler* assembler, Label* normal_ir_body) {
   ASSERT(kSmiTagShift == 1);
   ASSERT(kSmiTag == 0);
@@ -428,14 +393,9 @@
   __ Bind(normal_ir_body);
 }
 
-void AsmIntrinsifier::Integer_greaterThanFromInt(Assembler* assembler,
-                                                 Label* normal_ir_body) {
-  CompareIntegers(assembler, normal_ir_body, LT);
-}
-
 void AsmIntrinsifier::Integer_lessThan(Assembler* assembler,
                                        Label* normal_ir_body) {
-  Integer_greaterThanFromInt(assembler, normal_ir_body);
+  CompareIntegers(assembler, normal_ir_body, LT);
 }
 
 void AsmIntrinsifier::Integer_greaterThan(Assembler* assembler,
@@ -550,11 +510,6 @@
   __ Ret();
 }
 
-void AsmIntrinsifier::Smi_bitAndFromSmi(Assembler* assembler,
-                                        Label* normal_ir_body) {
-  Integer_bitAndFromInteger(assembler, normal_ir_body);
-}
-
 void AsmIntrinsifier::Bigint_lsh(Assembler* assembler, Label* normal_ir_body) {
   // static void _lsh(Uint32List x_digits, int x_used, int n,
   //                  Uint32List r_digits)
diff --git a/runtime/vm/compiler/asm_intrinsifier_arm64.cc b/runtime/vm/compiler/asm_intrinsifier_arm64.cc
index 6bef2d7..3176eea 100644
--- a/runtime/vm/compiler/asm_intrinsifier_arm64.cc
+++ b/runtime/vm/compiler/asm_intrinsifier_arm64.cc
@@ -92,8 +92,7 @@
   __ BranchIfNotSmi(TMP, not_smi);
 }
 
-void AsmIntrinsifier::Integer_addFromInteger(Assembler* assembler,
-                                             Label* normal_ir_body) {
+void AsmIntrinsifier::Integer_add(Assembler* assembler, Label* normal_ir_body) {
   TestBothArgumentsSmis(assembler, normal_ir_body);  // Checks two smis.
 #if !defined(DART_COMPRESSED_POINTERS)
   __ adds(R0, R0, Operand(R1));  // Add.
@@ -107,25 +106,6 @@
   __ Bind(normal_ir_body);
 }
 
-void AsmIntrinsifier::Integer_add(Assembler* assembler, Label* normal_ir_body) {
-  Integer_addFromInteger(assembler, normal_ir_body);
-}
-
-void AsmIntrinsifier::Integer_subFromInteger(Assembler* assembler,
-                                             Label* normal_ir_body) {
-  TestBothArgumentsSmis(assembler, normal_ir_body);
-#if !defined(DART_COMPRESSED_POINTERS)
-  __ subs(R0, R0, Operand(R1));  // Subtract.
-  __ b(normal_ir_body, VS);      // Fall-through on overflow.
-#else
-  __ subsw(R0, R0, Operand(R1));  // Subtract (32-bit).
-  __ b(normal_ir_body, VS);       // Fall-through on overflow.
-  __ sxtw(R0, R0);                // Sign extend.
-#endif
-  __ ret();
-  __ Bind(normal_ir_body);
-}
-
 void AsmIntrinsifier::Integer_sub(Assembler* assembler, Label* normal_ir_body) {
   TestBothArgumentsSmis(assembler, normal_ir_body);
 #if !defined(DART_COMPRESSED_POINTERS)
@@ -140,8 +120,7 @@
   __ Bind(normal_ir_body);
 }
 
-void AsmIntrinsifier::Integer_mulFromInteger(Assembler* assembler,
-                                             Label* normal_ir_body) {
+void AsmIntrinsifier::Integer_mul(Assembler* assembler, Label* normal_ir_body) {
   TestBothArgumentsSmis(assembler, normal_ir_body);  // checks two smis
   __ SmiUntag(R0);  // Untags R6. We only want result shifted by one.
 
@@ -161,10 +140,6 @@
   __ Bind(normal_ir_body);
 }
 
-void AsmIntrinsifier::Integer_mul(Assembler* assembler, Label* normal_ir_body) {
-  Integer_mulFromInteger(assembler, normal_ir_body);
-}
-
 // Optimizations:
 // - result is 0 if:
 //   - left is 0
@@ -222,12 +197,11 @@
 //      res = res + right;
 //    }
 //  }
-void AsmIntrinsifier::Integer_moduloFromInteger(Assembler* assembler,
-                                                Label* normal_ir_body) {
+void AsmIntrinsifier::Integer_mod(Assembler* assembler, Label* normal_ir_body) {
   // Check to see if we have integer division
   Label neg_remainder, fall_through;
-  __ ldr(R1, Address(SP, +0 * target::kWordSize));
-  __ ldr(R0, Address(SP, +1 * target::kWordSize));
+  __ ldr(R0, Address(SP, +0 * target::kWordSize));
+  __ ldr(R1, Address(SP, +1 * target::kWordSize));
   __ orr(TMP, R0, Operand(R1));
   __ BranchIfNotSmi(TMP, normal_ir_body);
   // R1: Tagged left (dividend).
@@ -297,45 +271,30 @@
   __ Bind(normal_ir_body);
 }
 
-void AsmIntrinsifier::Integer_bitAndFromInteger(Assembler* assembler,
-                                                Label* normal_ir_body) {
+void AsmIntrinsifier::Integer_bitAnd(Assembler* assembler,
+                                     Label* normal_ir_body) {
   TestBothArgumentsSmis(assembler, normal_ir_body);  // Checks two smis.
   __ and_(R0, R0, Operand(R1));
   __ ret();
   __ Bind(normal_ir_body);
 }
 
-void AsmIntrinsifier::Integer_bitAnd(Assembler* assembler,
-                                     Label* normal_ir_body) {
-  Integer_bitAndFromInteger(assembler, normal_ir_body);
-}
-
-void AsmIntrinsifier::Integer_bitOrFromInteger(Assembler* assembler,
-                                               Label* normal_ir_body) {
+void AsmIntrinsifier::Integer_bitOr(Assembler* assembler,
+                                    Label* normal_ir_body) {
   TestBothArgumentsSmis(assembler, normal_ir_body);  // Checks two smis.
   __ orr(R0, R0, Operand(R1));
   __ ret();
   __ Bind(normal_ir_body);
 }
 
-void AsmIntrinsifier::Integer_bitOr(Assembler* assembler,
-                                    Label* normal_ir_body) {
-  Integer_bitOrFromInteger(assembler, normal_ir_body);
-}
-
-void AsmIntrinsifier::Integer_bitXorFromInteger(Assembler* assembler,
-                                                Label* normal_ir_body) {
+void AsmIntrinsifier::Integer_bitXor(Assembler* assembler,
+                                     Label* normal_ir_body) {
   TestBothArgumentsSmis(assembler, normal_ir_body);  // Checks two smis.
   __ eor(R0, R0, Operand(R1));
   __ ret();
   __ Bind(normal_ir_body);
 }
 
-void AsmIntrinsifier::Integer_bitXor(Assembler* assembler,
-                                     Label* normal_ir_body) {
-  Integer_bitXorFromInteger(assembler, normal_ir_body);
-}
-
 void AsmIntrinsifier::Integer_shl(Assembler* assembler, Label* normal_ir_body) {
   ASSERT(kSmiTagShift == 1);
   ASSERT(kSmiTag == 0);
@@ -382,14 +341,9 @@
   __ Bind(normal_ir_body);
 }
 
-void AsmIntrinsifier::Integer_greaterThanFromInt(Assembler* assembler,
-                                                 Label* normal_ir_body) {
-  CompareIntegers(assembler, normal_ir_body, LT);
-}
-
 void AsmIntrinsifier::Integer_lessThan(Assembler* assembler,
                                        Label* normal_ir_body) {
-  Integer_greaterThanFromInt(assembler, normal_ir_body);
+  CompareIntegers(assembler, normal_ir_body, LT);
 }
 
 void AsmIntrinsifier::Integer_greaterThan(Assembler* assembler,
@@ -505,11 +459,6 @@
   __ ret();
 }
 
-void AsmIntrinsifier::Smi_bitAndFromSmi(Assembler* assembler,
-                                        Label* normal_ir_body) {
-  Integer_bitAndFromInteger(assembler, normal_ir_body);
-}
-
 void AsmIntrinsifier::Bigint_lsh(Assembler* assembler, Label* normal_ir_body) {
   // static void _lsh(Uint32List x_digits, int x_used, int n,
   //                  Uint32List r_digits)
diff --git a/runtime/vm/compiler/asm_intrinsifier_ia32.cc b/runtime/vm/compiler/asm_intrinsifier_ia32.cc
index b06895c..a6d5e20 100644
--- a/runtime/vm/compiler/asm_intrinsifier_ia32.cc
+++ b/runtime/vm/compiler/asm_intrinsifier_ia32.cc
@@ -93,8 +93,7 @@
   __ j(NOT_ZERO, not_smi, Assembler::kNearJump);
 }
 
-void AsmIntrinsifier::Integer_addFromInteger(Assembler* assembler,
-                                             Label* normal_ir_body) {
+void AsmIntrinsifier::Integer_add(Assembler* assembler, Label* normal_ir_body) {
   TestBothArgumentsSmis(assembler, normal_ir_body);
   __ addl(EAX, Address(ESP, +2 * target::kWordSize));
   __ j(OVERFLOW, normal_ir_body, Assembler::kNearJump);
@@ -103,20 +102,6 @@
   __ Bind(normal_ir_body);
 }
 
-void AsmIntrinsifier::Integer_add(Assembler* assembler, Label* normal_ir_body) {
-  Integer_addFromInteger(assembler, normal_ir_body);
-}
-
-void AsmIntrinsifier::Integer_subFromInteger(Assembler* assembler,
-                                             Label* normal_ir_body) {
-  TestBothArgumentsSmis(assembler, normal_ir_body);
-  __ subl(EAX, Address(ESP, +2 * target::kWordSize));
-  __ j(OVERFLOW, normal_ir_body, Assembler::kNearJump);
-  // Result is in EAX.
-  __ ret();
-  __ Bind(normal_ir_body);
-}
-
 void AsmIntrinsifier::Integer_sub(Assembler* assembler, Label* normal_ir_body) {
   TestBothArgumentsSmis(assembler, normal_ir_body);
   __ movl(EBX, EAX);
@@ -128,8 +113,7 @@
   __ Bind(normal_ir_body);
 }
 
-void AsmIntrinsifier::Integer_mulFromInteger(Assembler* assembler,
-                                             Label* normal_ir_body) {
+void AsmIntrinsifier::Integer_mul(Assembler* assembler, Label* normal_ir_body) {
   TestBothArgumentsSmis(assembler, normal_ir_body);
   ASSERT(kSmiTag == 0);  // Adjust code below if not the case.
   __ SmiUntag(EAX);
@@ -140,10 +124,6 @@
   __ Bind(normal_ir_body);
 }
 
-void AsmIntrinsifier::Integer_mul(Assembler* assembler, Label* normal_ir_body) {
-  Integer_mulFromInteger(assembler, normal_ir_body);
-}
-
 // Optimizations:
 // - result is 0 if:
 //   - left is 0
@@ -192,11 +172,14 @@
 //      res = res + right;
 //    }
 //  }
-void AsmIntrinsifier::Integer_moduloFromInteger(Assembler* assembler,
-                                                Label* normal_ir_body) {
+void AsmIntrinsifier::Integer_mod(Assembler* assembler, Label* normal_ir_body) {
   Label subtract;
-  TestBothArgumentsSmis(assembler, normal_ir_body);
-  __ movl(EBX, Address(ESP, +2 * target::kWordSize));
+  __ movl(EAX, Address(ESP, +2 * target::kWordSize));
+  __ movl(EBX, Address(ESP, +1 * target::kWordSize));
+  __ orl(EBX, EAX);
+  __ testl(EBX, Immediate(kSmiTagMask));
+  __ j(NOT_ZERO, normal_ir_body);
+  __ movl(EBX, Address(ESP, +1 * target::kWordSize));
   // EAX: Tagged left (dividend).
   // EBX: Tagged right (divisor).
   // Check if modulo by zero -> exception thrown in main function.
@@ -262,8 +245,8 @@
   __ Bind(normal_ir_body);
 }
 
-void AsmIntrinsifier::Integer_bitAndFromInteger(Assembler* assembler,
-                                                Label* normal_ir_body) {
+void AsmIntrinsifier::Integer_bitAnd(Assembler* assembler,
+                                     Label* normal_ir_body) {
   TestBothArgumentsSmis(assembler, normal_ir_body);
   __ movl(EBX, Address(ESP, +2 * target::kWordSize));
   __ andl(EAX, EBX);
@@ -272,13 +255,8 @@
   __ Bind(normal_ir_body);
 }
 
-void AsmIntrinsifier::Integer_bitAnd(Assembler* assembler,
-                                     Label* normal_ir_body) {
-  Integer_bitAndFromInteger(assembler, normal_ir_body);
-}
-
-void AsmIntrinsifier::Integer_bitOrFromInteger(Assembler* assembler,
-                                               Label* normal_ir_body) {
+void AsmIntrinsifier::Integer_bitOr(Assembler* assembler,
+                                    Label* normal_ir_body) {
   TestBothArgumentsSmis(assembler, normal_ir_body);
   __ movl(EBX, Address(ESP, +2 * target::kWordSize));
   __ orl(EAX, EBX);
@@ -287,13 +265,8 @@
   __ Bind(normal_ir_body);
 }
 
-void AsmIntrinsifier::Integer_bitOr(Assembler* assembler,
-                                    Label* normal_ir_body) {
-  Integer_bitOrFromInteger(assembler, normal_ir_body);
-}
-
-void AsmIntrinsifier::Integer_bitXorFromInteger(Assembler* assembler,
-                                                Label* normal_ir_body) {
+void AsmIntrinsifier::Integer_bitXor(Assembler* assembler,
+                                     Label* normal_ir_body) {
   TestBothArgumentsSmis(assembler, normal_ir_body);
   __ movl(EBX, Address(ESP, +2 * target::kWordSize));
   __ xorl(EAX, EBX);
@@ -302,11 +275,6 @@
   __ Bind(normal_ir_body);
 }
 
-void AsmIntrinsifier::Integer_bitXor(Assembler* assembler,
-                                     Label* normal_ir_body) {
-  Integer_bitXorFromInteger(assembler, normal_ir_body);
-}
-
 void AsmIntrinsifier::Integer_shl(Assembler* assembler, Label* normal_ir_body) {
   ASSERT(kSmiTagShift == 1);
   ASSERT(kSmiTag == 0);
@@ -438,14 +406,9 @@
   __ Bind(normal_ir_body);
 }
 
-void AsmIntrinsifier::Integer_greaterThanFromInt(Assembler* assembler,
-                                                 Label* normal_ir_body) {
-  CompareIntegers(assembler, normal_ir_body, LESS);
-}
-
 void AsmIntrinsifier::Integer_lessThan(Assembler* assembler,
                                        Label* normal_ir_body) {
-  Integer_greaterThanFromInt(assembler, normal_ir_body);
+  CompareIntegers(assembler, normal_ir_body, LESS);
 }
 
 void AsmIntrinsifier::Integer_greaterThan(Assembler* assembler,
@@ -570,11 +533,6 @@
   __ ret();
 }
 
-void AsmIntrinsifier::Smi_bitAndFromSmi(Assembler* assembler,
-                                        Label* normal_ir_body) {
-  Integer_bitAndFromInteger(assembler, normal_ir_body);
-}
-
 void AsmIntrinsifier::Bigint_lsh(Assembler* assembler, Label* normal_ir_body) {
   // static void _lsh(Uint32List x_digits, int x_used, int n,
   //                  Uint32List r_digits)
diff --git a/runtime/vm/compiler/asm_intrinsifier_x64.cc b/runtime/vm/compiler/asm_intrinsifier_x64.cc
index 7df68fa..3254745 100644
--- a/runtime/vm/compiler/asm_intrinsifier_x64.cc
+++ b/runtime/vm/compiler/asm_intrinsifier_x64.cc
@@ -90,8 +90,7 @@
   __ j(NOT_ZERO, not_smi);
 }
 
-void AsmIntrinsifier::Integer_addFromInteger(Assembler* assembler,
-                                             Label* normal_ir_body) {
+void AsmIntrinsifier::Integer_add(Assembler* assembler, Label* normal_ir_body) {
   TestBothArgumentsSmis(assembler, normal_ir_body);
   // RAX contains right argument.
 #if !defined(DART_COMPRESSED_POINTERS)
@@ -107,27 +106,6 @@
   __ Bind(normal_ir_body);
 }
 
-void AsmIntrinsifier::Integer_add(Assembler* assembler, Label* normal_ir_body) {
-  Integer_addFromInteger(assembler, normal_ir_body);
-}
-
-void AsmIntrinsifier::Integer_subFromInteger(Assembler* assembler,
-                                             Label* normal_ir_body) {
-  TestBothArgumentsSmis(assembler, normal_ir_body);
-  // RAX contains right argument, which is the actual minuend of subtraction.
-#if !defined(DART_COMPRESSED_POINTERS)
-  __ subq(RAX, Address(RSP, +2 * target::kWordSize));
-  __ j(OVERFLOW, normal_ir_body, Assembler::kNearJump);
-#else
-  __ subl(RAX, Address(RSP, +2 * target::kWordSize));
-  __ j(OVERFLOW, normal_ir_body, Assembler::kNearJump);
-  __ movsxd(RAX, RAX);
-#endif
-  // Result is in RAX.
-  __ ret();
-  __ Bind(normal_ir_body);
-}
-
 void AsmIntrinsifier::Integer_sub(Assembler* assembler, Label* normal_ir_body) {
   TestBothArgumentsSmis(assembler, normal_ir_body);
   // RAX contains right argument, which is the actual subtrahend of subtraction.
@@ -146,8 +124,7 @@
   __ Bind(normal_ir_body);
 }
 
-void AsmIntrinsifier::Integer_mulFromInteger(Assembler* assembler,
-                                             Label* normal_ir_body) {
+void AsmIntrinsifier::Integer_mul(Assembler* assembler, Label* normal_ir_body) {
   TestBothArgumentsSmis(assembler, normal_ir_body);
   // RAX is the right argument.
   ASSERT(kSmiTag == 0);  // Adjust code below if not the case.
@@ -165,10 +142,6 @@
   __ Bind(normal_ir_body);
 }
 
-void AsmIntrinsifier::Integer_mul(Assembler* assembler, Label* normal_ir_body) {
-  Integer_mulFromInteger(assembler, normal_ir_body);
-}
-
 // Optimizations:
 // - result is 0 if:
 //   - left is 0
@@ -245,11 +218,15 @@
 //      res = res + right;
 //    }
 //  }
-void AsmIntrinsifier::Integer_moduloFromInteger(Assembler* assembler,
-                                                Label* normal_ir_body) {
+void AsmIntrinsifier::Integer_mod(Assembler* assembler, Label* normal_ir_body) {
   Label negative_result;
-  TestBothArgumentsSmis(assembler, normal_ir_body);
-  __ movq(RCX, Address(RSP, +2 * target::kWordSize));
+
+  __ movq(RAX, Address(RSP, +2 * target::kWordSize));
+  __ movq(RCX, Address(RSP, +1 * target::kWordSize));
+  __ orq(RCX, RAX);
+  __ testq(RCX, Immediate(kSmiTagMask));
+  __ j(NOT_ZERO, normal_ir_body);
+  __ movq(RCX, Address(RSP, +1 * target::kWordSize));
   // RAX: Tagged left (dividend).
   // RCX: Tagged right (divisor).
   __ cmpq(RCX, Immediate(0));
@@ -361,8 +338,8 @@
   __ Bind(normal_ir_body);
 }
 
-void AsmIntrinsifier::Integer_bitAndFromInteger(Assembler* assembler,
-                                                Label* normal_ir_body) {
+void AsmIntrinsifier::Integer_bitAnd(Assembler* assembler,
+                                     Label* normal_ir_body) {
   TestBothArgumentsSmis(assembler, normal_ir_body);
   // RAX is the right argument.
   __ andq(RAX, Address(RSP, +2 * target::kWordSize));
@@ -371,13 +348,8 @@
   __ Bind(normal_ir_body);
 }
 
-void AsmIntrinsifier::Integer_bitAnd(Assembler* assembler,
-                                     Label* normal_ir_body) {
-  Integer_bitAndFromInteger(assembler, normal_ir_body);
-}
-
-void AsmIntrinsifier::Integer_bitOrFromInteger(Assembler* assembler,
-                                               Label* normal_ir_body) {
+void AsmIntrinsifier::Integer_bitOr(Assembler* assembler,
+                                    Label* normal_ir_body) {
   TestBothArgumentsSmis(assembler, normal_ir_body);
   // RAX is the right argument.
   __ orq(RAX, Address(RSP, +2 * target::kWordSize));
@@ -386,13 +358,8 @@
   __ Bind(normal_ir_body);
 }
 
-void AsmIntrinsifier::Integer_bitOr(Assembler* assembler,
-                                    Label* normal_ir_body) {
-  Integer_bitOrFromInteger(assembler, normal_ir_body);
-}
-
-void AsmIntrinsifier::Integer_bitXorFromInteger(Assembler* assembler,
-                                                Label* normal_ir_body) {
+void AsmIntrinsifier::Integer_bitXor(Assembler* assembler,
+                                     Label* normal_ir_body) {
   TestBothArgumentsSmis(assembler, normal_ir_body);
   // RAX is the right argument.
   __ xorq(RAX, Address(RSP, +2 * target::kWordSize));
@@ -401,11 +368,6 @@
   __ Bind(normal_ir_body);
 }
 
-void AsmIntrinsifier::Integer_bitXor(Assembler* assembler,
-                                     Label* normal_ir_body) {
-  Integer_bitXorFromInteger(assembler, normal_ir_body);
-}
-
 void AsmIntrinsifier::Integer_shl(Assembler* assembler, Label* normal_ir_body) {
   ASSERT(kSmiTagShift == 1);
   ASSERT(kSmiTag == 0);
@@ -464,11 +426,6 @@
   CompareIntegers(assembler, normal_ir_body, LESS);
 }
 
-void AsmIntrinsifier::Integer_greaterThanFromInt(Assembler* assembler,
-                                                 Label* normal_ir_body) {
-  CompareIntegers(assembler, normal_ir_body, LESS);
-}
-
 void AsmIntrinsifier::Integer_greaterThan(Assembler* assembler,
                                           Label* normal_ir_body) {
   CompareIntegers(assembler, normal_ir_body, GREATER);
@@ -593,11 +550,6 @@
   __ ret();
 }
 
-void AsmIntrinsifier::Smi_bitAndFromSmi(Assembler* assembler,
-                                        Label* normal_ir_body) {
-  Integer_bitAndFromInteger(assembler, normal_ir_body);
-}
-
 void AsmIntrinsifier::Bigint_lsh(Assembler* assembler, Label* normal_ir_body) {
   // static void _lsh(Uint32List x_digits, int x_used, int n,
   //                  Uint32List r_digits)
diff --git a/runtime/vm/compiler/backend/il.cc b/runtime/vm/compiler/backend/il.cc
index ecf74ae..441120c 100644
--- a/runtime/vm/compiler/backend/il.cc
+++ b/runtime/vm/compiler/backend/il.cc
@@ -2774,9 +2774,9 @@
     case Slot::Kind::kFunction_data:
     case Slot::Kind::kFunction_kind_tag:
     case Slot::Kind::kFunction_packed_fields:
-    case Slot::Kind::kFunction_parameter_names:
     case Slot::Kind::kFunction_signature:
     case Slot::Kind::kFunctionType_packed_fields:
+    case Slot::Kind::kFunctionType_parameter_names:
     case Slot::Kind::kFunctionType_parameter_types:
     case Slot::Kind::kFunctionType_type_parameters:
     case Slot::Kind::kPointerBase_data_field:
diff --git a/runtime/vm/compiler/backend/inliner.cc b/runtime/vm/compiler/backend/inliner.cc
index 459aec0..e3e11b4 100644
--- a/runtime/vm/compiler/backend/inliner.cc
+++ b/runtime/vm/compiler/backend/inliner.cc
@@ -2764,31 +2764,6 @@
   return true;
 }
 
-static bool InlineSmiBitAndFromSmi(FlowGraph* flow_graph,
-                                   Instruction* call,
-                                   Definition* receiver,
-                                   GraphEntryInstr* graph_entry,
-                                   FunctionEntryInstr** entry,
-                                   Instruction** last,
-                                   Definition** result) {
-  Definition* left = receiver;
-  Definition* right = call->ArgumentAt(1);
-
-  *entry =
-      new (Z) FunctionEntryInstr(graph_entry, flow_graph->allocate_block_id(),
-                                 call->GetBlock()->try_index(), DeoptId::kNone);
-  (*entry)->InheritDeoptTarget(Z, call);
-  // Right arguments is known to be smi: other._bitAndFromSmi(this);
-  BinarySmiOpInstr* smi_op =
-      new (Z) BinarySmiOpInstr(Token::kBIT_AND, new (Z) Value(left),
-                               new (Z) Value(right), call->deopt_id());
-  flow_graph->AppendTo(*entry, smi_op, call->env(), FlowGraph::kValue);
-  *last = smi_op;
-  *result = smi_op->AsDefinition();
-
-  return true;
-}
-
 static bool InlineGrowableArraySetter(FlowGraph* flow_graph,
                                       const Slot& field,
                                       StoreBarrierType store_barrier_type,
@@ -3969,9 +3944,6 @@
       return InlineGrowableArraySetter(
           flow_graph, Slot::GrowableObjectArray_length(), kNoStoreBarrier, call,
           receiver, graph_entry, entry, last, result);
-    case MethodRecognizer::kSmi_bitAndFromSmi:
-      return InlineSmiBitAndFromSmi(flow_graph, call, receiver, graph_entry,
-                                    entry, last, result);
 
     case MethodRecognizer::kFloat32x4Abs:
     case MethodRecognizer::kFloat32x4Clamp:
diff --git a/runtime/vm/compiler/backend/range_analysis.cc b/runtime/vm/compiler/backend/range_analysis.cc
index 5f0ebc3..cac72cc 100644
--- a/runtime/vm/compiler/backend/range_analysis.cc
+++ b/runtime/vm/compiler/backend/range_analysis.cc
@@ -2799,7 +2799,7 @@
     case Slot::Kind::kClosureData_default_type_arguments:
     case Slot::Kind::kFunction_data:
     case Slot::Kind::kFunction_signature:
-    case Slot::Kind::kFunction_parameter_names:
+    case Slot::Kind::kFunctionType_parameter_names:
     case Slot::Kind::kFunctionType_parameter_types:
     case Slot::Kind::kFunctionType_type_parameters:
     case Slot::Kind::kPointerBase_data_field:
diff --git a/runtime/vm/compiler/backend/slot.h b/runtime/vm/compiler/backend/slot.h
index 1b554c5..3a2a1cd 100644
--- a/runtime/vm/compiler/backend/slot.h
+++ b/runtime/vm/compiler/backend/slot.h
@@ -85,7 +85,7 @@
   V(Closure, UntaggedClosure, hash, Context, VAR)                              \
   V(ClosureData, UntaggedClosureData, default_type_arguments_info, Smi, FINAL) \
   V(Function, UntaggedFunction, data, Dynamic, FINAL)                          \
-  V(Function, UntaggedFunction, parameter_names, Array, FINAL)                 \
+  V(FunctionType, UntaggedFunctionType, parameter_names, Array, FINAL)         \
   V(FunctionType, UntaggedFunctionType, parameter_types, Array, FINAL)         \
   V(GrowableObjectArray, UntaggedGrowableObjectArray, length, Smi, VAR)        \
   V(GrowableObjectArray, UntaggedGrowableObjectArray, data, Array, VAR)        \
diff --git a/runtime/vm/compiler/frontend/kernel_to_il.cc b/runtime/vm/compiler/frontend/kernel_to_il.cc
index abaedc1..db41553 100644
--- a/runtime/vm/compiler/frontend/kernel_to_il.cc
+++ b/runtime/vm/compiler/frontend/kernel_to_il.cc
@@ -2087,7 +2087,7 @@
   // Set up by BuildDynamicCallChecks() when needed. These values are
   // read-only, so they don't need real local variables and are created
   // using MakeTemporary().
-  LocalVariable* function = nullptr;
+  LocalVariable* signature = nullptr;
   LocalVariable* num_fixed_params = nullptr;
   LocalVariable* num_opt_params = nullptr;
   LocalVariable* num_max_params = nullptr;
@@ -2657,16 +2657,19 @@
   Fragment body;
   body += LoadLocal(info.closure);
   body += LoadNativeField(Slot::Closure_function());
-  info.function = MakeTemporary("function");
+  body += LoadNativeField(Slot::Function_signature());
+  info.signature = MakeTemporary("signature");
 
-  body += LoadLocal(info.function);
+  body += LoadLocal(info.signature);
   body += BuildExtractUnboxedSlotBitFieldIntoSmi<
-      Function::PackedNumFixedParameters>(Slot::Function_packed_fields());
+      FunctionType::PackedNumFixedParameters>(
+      Slot::FunctionType_packed_fields());
   info.num_fixed_params = MakeTemporary("num_fixed_params");
 
-  body += LoadLocal(info.function);
+  body += LoadLocal(info.signature);
   body += BuildExtractUnboxedSlotBitFieldIntoSmi<
-      Function::PackedNumOptionalParameters>(Slot::Function_packed_fields());
+      FunctionType::PackedNumOptionalParameters>(
+      Slot::FunctionType_packed_fields());
   info.num_opt_params = MakeTemporary("num_opt_params");
 
   body += LoadLocal(info.num_fixed_params);
@@ -2674,26 +2677,24 @@
   body += SmiBinaryOp(Token::kADD);
   info.num_max_params = MakeTemporary("num_max_params");
 
-  body += LoadLocal(info.function);
+  body += LoadLocal(info.signature);
   body += BuildExtractUnboxedSlotBitFieldIntoSmi<
-      Function::PackedHasNamedOptionalParameters>(
-      Slot::Function_packed_fields());
+      FunctionType::PackedHasNamedOptionalParameters>(
+      Slot::FunctionType_packed_fields());
 
   body += IntConstant(0);
   body += StrictCompare(Token::kNE_STRICT);
   info.has_named_params = MakeTemporary("has_named_params");
 
-  body += LoadLocal(info.function);
-  body += LoadNativeField(Slot::Function_parameter_names());
+  body += LoadLocal(info.signature);
+  body += LoadNativeField(Slot::FunctionType_parameter_names());
   info.parameter_names = MakeTemporary("parameter_names");
 
-  body += LoadLocal(info.function);
-  body += LoadNativeField(Slot::Function_signature());
+  body += LoadLocal(info.signature);
   body += LoadNativeField(Slot::FunctionType_parameter_types());
   info.parameter_types = MakeTemporary("parameter_types");
 
-  body += LoadLocal(info.function);
-  body += LoadNativeField(Slot::Function_signature());
+  body += LoadLocal(info.signature);
   body += LoadNativeField(Slot::FunctionType_type_parameters());
   info.type_parameters = MakeTemporary("type_parameters");
 
@@ -2722,7 +2723,8 @@
   // full set of function type arguments, then check the local function type
   // arguments against the closure function's type parameter bounds.
   Fragment generic;
-  generic += LoadLocal(info.function);
+  generic += LoadLocal(info.closure);
+  generic += LoadNativeField(Slot::Closure_function());
   generic += LoadNativeField(Slot::Function_data());
   info.closure_data = MakeTemporary("closure_data");
   generic += LoadLocal(info.closure_data);
@@ -2788,7 +2790,7 @@
   body += DropTemporary(&info.num_max_params);
   body += DropTemporary(&info.num_opt_params);
   body += DropTemporary(&info.num_fixed_params);
-  body += DropTemporary(&info.function);
+  body += DropTemporary(&info.signature);
 
   return body;
 }
diff --git a/runtime/vm/compiler/recognized_methods_list.h b/runtime/vm/compiler/recognized_methods_list.h
index 74ebc7c..c53fc34 100644
--- a/runtime/vm/compiler/recognized_methods_list.h
+++ b/runtime/vm/compiler/recognized_methods_list.h
@@ -204,7 +204,6 @@
 #define CORE_LIB_INTRINSIC_LIST(V)                                             \
   V(_Smi, ~, Smi_bitNegate, 0x8254f51b)                                        \
   V(_Smi, get:bitLength, Smi_bitLength, 0x7ab50ceb)                            \
-  V(_Smi, _bitAndFromSmi, Smi_bitAndFromSmi, 0xaf07a450)                       \
   V(_BigIntImpl, _lsh, Bigint_lsh, 0x3f8b105e)                                 \
   V(_BigIntImpl, _rsh, Bigint_rsh, 0x117ed3f3)                                 \
   V(_BigIntImpl, _absAdd, Bigint_absAdd, 0xd55235d1)                           \
@@ -254,30 +253,15 @@
   V(::, _setHash, Object_setHash, 0x8f2a5b0b)                                  \
 
 #define CORE_INTEGER_LIB_INTRINSIC_LIST(V)                                     \
-  V(_IntegerImplementation, _addFromInteger, Integer_addFromInteger,           \
-    0x2f20e46b)                                                                \
   V(_IntegerImplementation, +, Integer_add, 0xd561008f)                        \
-  V(_IntegerImplementation, _subFromInteger, Integer_subFromInteger,           \
-    0xf571525f)                                                                \
   V(_IntegerImplementation, -, Integer_sub, 0xc96a0f80)                        \
-  V(_IntegerImplementation, _mulFromInteger, Integer_mulFromInteger,           \
-    0xfcd889fe)                                                                \
   V(_IntegerImplementation, *, Integer_mul, 0xacd9641d)                        \
-  V(_IntegerImplementation, _moduloFromInteger, Integer_moduloFromInteger,     \
-    0x23d96e8b)                                                                \
+  V(_IntegerImplementation, %, Integer_mod, 0xfcf7cc13)                        \
   V(_IntegerImplementation, ~/, Integer_truncDivide, 0xdda49e7f)               \
   V(_IntegerImplementation, unary-, Integer_negate, 0xf7a9a696)                \
-  V(_IntegerImplementation, _bitAndFromInteger, Integer_bitAndFromInteger,     \
-    0x1f4a948f)                                                                \
   V(_IntegerImplementation, &, Integer_bitAnd, 0x8b9d7c33)                     \
-  V(_IntegerImplementation, _bitOrFromInteger, Integer_bitOrFromInteger,       \
-    0x10d87167)                                                                \
   V(_IntegerImplementation, |, Integer_bitOr, 0x8f47f5eb)                      \
-  V(_IntegerImplementation, _bitXorFromInteger, Integer_bitXorFromInteger,     \
-    0x0218412b)                                                                \
   V(_IntegerImplementation, ^, Integer_bitXor, 0xd838bef2)                     \
-  V(_IntegerImplementation, _greaterThanFromInteger,                           \
-    Integer_greaterThanFromInt, 0x6aa24b23)                                    \
   V(_IntegerImplementation, >, Integer_greaterThan, 0x402b12df)                \
   V(_IntegerImplementation, ==, Integer_equal, 0x509c9146)                     \
   V(_IntegerImplementation, _equalToInteger, Integer_equalToInteger,           \
diff --git a/runtime/vm/compiler/runtime_api.h b/runtime/vm/compiler/runtime_api.h
index bfc1343..3c934f6 100644
--- a/runtime/vm/compiler/runtime_api.h
+++ b/runtime/vm/compiler/runtime_api.h
@@ -506,7 +506,6 @@
   static word entry_point_offset(CodeEntryKind kind = CodeEntryKind::kNormal);
   static word kind_tag_offset();
   static word packed_fields_offset();
-  static word parameter_names_offset();
   static word signature_offset();
   static word usage_counter_offset();
   static word InstanceSize();
@@ -683,6 +682,7 @@
   static word hash_offset();
   static word type_state_offset();
   static word packed_fields_offset();
+  static word parameter_names_offset();
   static word parameter_types_offset();
   static word type_parameters_offset();
   static word nullability_offset();
diff --git a/runtime/vm/compiler/runtime_offsets_extracted.h b/runtime/vm/compiler/runtime_offsets_extracted.h
index 00bcf67..318cf08 100644
--- a/runtime/vm/compiler/runtime_offsets_extracted.h
+++ b/runtime/vm/compiler/runtime_offsets_extracted.h
@@ -145,8 +145,6 @@
 static constexpr dart::compiler::target::word Function_kind_tag_offset = 64;
 static constexpr dart::compiler::target::word Function_packed_fields_offset =
     68;
-static constexpr dart::compiler::target::word Function_parameter_names_offset =
-    20;
 static constexpr dart::compiler::target::word Function_signature_offset = 24;
 static constexpr dart::compiler::target::word FutureOr_type_arguments_offset =
     4;
@@ -404,6 +402,8 @@
 static constexpr dart::compiler::target::word
     FunctionType_parameter_types_offset = 20;
 static constexpr dart::compiler::target::word
+    FunctionType_parameter_names_offset = 24;
+static constexpr dart::compiler::target::word
     FunctionType_type_parameters_offset = 12;
 static constexpr dart::compiler::target::word
     TypeParameter_parameterized_class_id_offset = 28;
@@ -679,8 +679,6 @@
 static constexpr dart::compiler::target::word Function_kind_tag_offset = 104;
 static constexpr dart::compiler::target::word Function_packed_fields_offset =
     108;
-static constexpr dart::compiler::target::word Function_parameter_names_offset =
-    40;
 static constexpr dart::compiler::target::word Function_signature_offset = 48;
 static constexpr dart::compiler::target::word FutureOr_type_arguments_offset =
     8;
@@ -943,6 +941,8 @@
 static constexpr dart::compiler::target::word
     FunctionType_parameter_types_offset = 40;
 static constexpr dart::compiler::target::word
+    FunctionType_parameter_names_offset = 48;
+static constexpr dart::compiler::target::word
     FunctionType_type_parameters_offset = 24;
 static constexpr dart::compiler::target::word
     TypeParameter_parameterized_class_id_offset = 56;
@@ -1218,8 +1218,6 @@
 static constexpr dart::compiler::target::word Function_kind_tag_offset = 64;
 static constexpr dart::compiler::target::word Function_packed_fields_offset =
     68;
-static constexpr dart::compiler::target::word Function_parameter_names_offset =
-    20;
 static constexpr dart::compiler::target::word Function_signature_offset = 24;
 static constexpr dart::compiler::target::word FutureOr_type_arguments_offset =
     4;
@@ -1477,6 +1475,8 @@
 static constexpr dart::compiler::target::word
     FunctionType_parameter_types_offset = 20;
 static constexpr dart::compiler::target::word
+    FunctionType_parameter_names_offset = 24;
+static constexpr dart::compiler::target::word
     FunctionType_type_parameters_offset = 12;
 static constexpr dart::compiler::target::word
     TypeParameter_parameterized_class_id_offset = 28;
@@ -1749,8 +1749,6 @@
 static constexpr dart::compiler::target::word Function_kind_tag_offset = 104;
 static constexpr dart::compiler::target::word Function_packed_fields_offset =
     108;
-static constexpr dart::compiler::target::word Function_parameter_names_offset =
-    40;
 static constexpr dart::compiler::target::word Function_signature_offset = 48;
 static constexpr dart::compiler::target::word FutureOr_type_arguments_offset =
     8;
@@ -2013,6 +2011,8 @@
 static constexpr dart::compiler::target::word
     FunctionType_parameter_types_offset = 40;
 static constexpr dart::compiler::target::word
+    FunctionType_parameter_names_offset = 48;
+static constexpr dart::compiler::target::word
     FunctionType_type_parameters_offset = 24;
 static constexpr dart::compiler::target::word
     TypeParameter_parameterized_class_id_offset = 56;
@@ -2289,8 +2289,6 @@
 static constexpr dart::compiler::target::word Function_kind_tag_offset = 104;
 static constexpr dart::compiler::target::word Function_packed_fields_offset =
     108;
-static constexpr dart::compiler::target::word Function_parameter_names_offset =
-    40;
 static constexpr dart::compiler::target::word Function_signature_offset = 48;
 static constexpr dart::compiler::target::word FutureOr_type_arguments_offset =
     8;
@@ -2553,6 +2551,8 @@
 static constexpr dart::compiler::target::word
     FunctionType_parameter_types_offset = 40;
 static constexpr dart::compiler::target::word
+    FunctionType_parameter_names_offset = 48;
+static constexpr dart::compiler::target::word
     FunctionType_type_parameters_offset = 24;
 static constexpr dart::compiler::target::word
     TypeParameter_parameterized_class_id_offset = 56;
@@ -2828,8 +2828,6 @@
 static constexpr dart::compiler::target::word Function_kind_tag_offset = 104;
 static constexpr dart::compiler::target::word Function_packed_fields_offset =
     108;
-static constexpr dart::compiler::target::word Function_parameter_names_offset =
-    40;
 static constexpr dart::compiler::target::word Function_signature_offset = 48;
 static constexpr dart::compiler::target::word FutureOr_type_arguments_offset =
     8;
@@ -3092,6 +3090,8 @@
 static constexpr dart::compiler::target::word
     FunctionType_parameter_types_offset = 40;
 static constexpr dart::compiler::target::word
+    FunctionType_parameter_names_offset = 48;
+static constexpr dart::compiler::target::word
     FunctionType_type_parameters_offset = 24;
 static constexpr dart::compiler::target::word
     TypeParameter_parameterized_class_id_offset = 56;
@@ -3368,8 +3368,6 @@
 static constexpr dart::compiler::target::word Function_kind_tag_offset = 64;
 static constexpr dart::compiler::target::word Function_packed_fields_offset =
     68;
-static constexpr dart::compiler::target::word Function_parameter_names_offset =
-    20;
 static constexpr dart::compiler::target::word Function_signature_offset = 24;
 static constexpr dart::compiler::target::word FutureOr_type_arguments_offset =
     4;
@@ -3626,6 +3624,8 @@
 static constexpr dart::compiler::target::word
     FunctionType_parameter_types_offset = 20;
 static constexpr dart::compiler::target::word
+    FunctionType_parameter_names_offset = 24;
+static constexpr dart::compiler::target::word
     FunctionType_type_parameters_offset = 12;
 static constexpr dart::compiler::target::word
     TypeParameter_parameterized_class_id_offset = 28;
@@ -3896,8 +3896,6 @@
 static constexpr dart::compiler::target::word Function_kind_tag_offset = 104;
 static constexpr dart::compiler::target::word Function_packed_fields_offset =
     108;
-static constexpr dart::compiler::target::word Function_parameter_names_offset =
-    40;
 static constexpr dart::compiler::target::word Function_signature_offset = 48;
 static constexpr dart::compiler::target::word FutureOr_type_arguments_offset =
     8;
@@ -4159,6 +4157,8 @@
 static constexpr dart::compiler::target::word
     FunctionType_parameter_types_offset = 40;
 static constexpr dart::compiler::target::word
+    FunctionType_parameter_names_offset = 48;
+static constexpr dart::compiler::target::word
     FunctionType_type_parameters_offset = 24;
 static constexpr dart::compiler::target::word
     TypeParameter_parameterized_class_id_offset = 56;
@@ -4429,8 +4429,6 @@
 static constexpr dart::compiler::target::word Function_kind_tag_offset = 64;
 static constexpr dart::compiler::target::word Function_packed_fields_offset =
     68;
-static constexpr dart::compiler::target::word Function_parameter_names_offset =
-    20;
 static constexpr dart::compiler::target::word Function_signature_offset = 24;
 static constexpr dart::compiler::target::word FutureOr_type_arguments_offset =
     4;
@@ -4687,6 +4685,8 @@
 static constexpr dart::compiler::target::word
     FunctionType_parameter_types_offset = 20;
 static constexpr dart::compiler::target::word
+    FunctionType_parameter_names_offset = 24;
+static constexpr dart::compiler::target::word
     FunctionType_type_parameters_offset = 12;
 static constexpr dart::compiler::target::word
     TypeParameter_parameterized_class_id_offset = 28;
@@ -4954,8 +4954,6 @@
 static constexpr dart::compiler::target::word Function_kind_tag_offset = 104;
 static constexpr dart::compiler::target::word Function_packed_fields_offset =
     108;
-static constexpr dart::compiler::target::word Function_parameter_names_offset =
-    40;
 static constexpr dart::compiler::target::word Function_signature_offset = 48;
 static constexpr dart::compiler::target::word FutureOr_type_arguments_offset =
     8;
@@ -5217,6 +5215,8 @@
 static constexpr dart::compiler::target::word
     FunctionType_parameter_types_offset = 40;
 static constexpr dart::compiler::target::word
+    FunctionType_parameter_names_offset = 48;
+static constexpr dart::compiler::target::word
     FunctionType_type_parameters_offset = 24;
 static constexpr dart::compiler::target::word
     TypeParameter_parameterized_class_id_offset = 56;
@@ -5488,8 +5488,6 @@
 static constexpr dart::compiler::target::word Function_kind_tag_offset = 104;
 static constexpr dart::compiler::target::word Function_packed_fields_offset =
     108;
-static constexpr dart::compiler::target::word Function_parameter_names_offset =
-    40;
 static constexpr dart::compiler::target::word Function_signature_offset = 48;
 static constexpr dart::compiler::target::word FutureOr_type_arguments_offset =
     8;
@@ -5751,6 +5749,8 @@
 static constexpr dart::compiler::target::word
     FunctionType_parameter_types_offset = 40;
 static constexpr dart::compiler::target::word
+    FunctionType_parameter_names_offset = 48;
+static constexpr dart::compiler::target::word
     FunctionType_type_parameters_offset = 24;
 static constexpr dart::compiler::target::word
     TypeParameter_parameterized_class_id_offset = 56;
@@ -6021,8 +6021,6 @@
 static constexpr dart::compiler::target::word Function_kind_tag_offset = 104;
 static constexpr dart::compiler::target::word Function_packed_fields_offset =
     108;
-static constexpr dart::compiler::target::word Function_parameter_names_offset =
-    40;
 static constexpr dart::compiler::target::word Function_signature_offset = 48;
 static constexpr dart::compiler::target::word FutureOr_type_arguments_offset =
     8;
@@ -6284,6 +6282,8 @@
 static constexpr dart::compiler::target::word
     FunctionType_parameter_types_offset = 40;
 static constexpr dart::compiler::target::word
+    FunctionType_parameter_names_offset = 48;
+static constexpr dart::compiler::target::word
     FunctionType_type_parameters_offset = 24;
 static constexpr dart::compiler::target::word
     TypeParameter_parameterized_class_id_offset = 56;
@@ -6563,8 +6563,6 @@
 static constexpr dart::compiler::target::word AOT_Function_kind_tag_offset = 40;
 static constexpr dart::compiler::target::word
     AOT_Function_packed_fields_offset = 44;
-static constexpr dart::compiler::target::word
-    AOT_Function_parameter_names_offset = 20;
 static constexpr dart::compiler::target::word AOT_Function_signature_offset =
     24;
 static constexpr dart::compiler::target::word
@@ -6854,6 +6852,8 @@
 static constexpr dart::compiler::target::word
     AOT_FunctionType_parameter_types_offset = 20;
 static constexpr dart::compiler::target::word
+    AOT_FunctionType_parameter_names_offset = 24;
+static constexpr dart::compiler::target::word
     AOT_FunctionType_type_parameters_offset = 12;
 static constexpr dart::compiler::target::word
     AOT_TypeParameter_parameterized_class_id_offset = 28;
@@ -7158,8 +7158,6 @@
 static constexpr dart::compiler::target::word AOT_Function_kind_tag_offset = 80;
 static constexpr dart::compiler::target::word
     AOT_Function_packed_fields_offset = 84;
-static constexpr dart::compiler::target::word
-    AOT_Function_parameter_names_offset = 40;
 static constexpr dart::compiler::target::word AOT_Function_signature_offset =
     48;
 static constexpr dart::compiler::target::word
@@ -7450,6 +7448,8 @@
 static constexpr dart::compiler::target::word
     AOT_FunctionType_parameter_types_offset = 40;
 static constexpr dart::compiler::target::word
+    AOT_FunctionType_parameter_names_offset = 48;
+static constexpr dart::compiler::target::word
     AOT_FunctionType_type_parameters_offset = 24;
 static constexpr dart::compiler::target::word
     AOT_TypeParameter_parameterized_class_id_offset = 56;
@@ -7759,8 +7759,6 @@
 static constexpr dart::compiler::target::word AOT_Function_kind_tag_offset = 80;
 static constexpr dart::compiler::target::word
     AOT_Function_packed_fields_offset = 84;
-static constexpr dart::compiler::target::word
-    AOT_Function_parameter_names_offset = 40;
 static constexpr dart::compiler::target::word AOT_Function_signature_offset =
     48;
 static constexpr dart::compiler::target::word
@@ -8051,6 +8049,8 @@
 static constexpr dart::compiler::target::word
     AOT_FunctionType_parameter_types_offset = 40;
 static constexpr dart::compiler::target::word
+    AOT_FunctionType_parameter_names_offset = 48;
+static constexpr dart::compiler::target::word
     AOT_FunctionType_type_parameters_offset = 24;
 static constexpr dart::compiler::target::word
     AOT_TypeParameter_parameterized_class_id_offset = 56;
@@ -8358,8 +8358,6 @@
 static constexpr dart::compiler::target::word AOT_Function_kind_tag_offset = 80;
 static constexpr dart::compiler::target::word
     AOT_Function_packed_fields_offset = 84;
-static constexpr dart::compiler::target::word
-    AOT_Function_parameter_names_offset = 40;
 static constexpr dart::compiler::target::word AOT_Function_signature_offset =
     48;
 static constexpr dart::compiler::target::word
@@ -8650,6 +8648,8 @@
 static constexpr dart::compiler::target::word
     AOT_FunctionType_parameter_types_offset = 40;
 static constexpr dart::compiler::target::word
+    AOT_FunctionType_parameter_names_offset = 48;
+static constexpr dart::compiler::target::word
     AOT_FunctionType_type_parameters_offset = 24;
 static constexpr dart::compiler::target::word
     AOT_TypeParameter_parameterized_class_id_offset = 56;
@@ -8956,8 +8956,6 @@
 static constexpr dart::compiler::target::word AOT_Function_kind_tag_offset = 80;
 static constexpr dart::compiler::target::word
     AOT_Function_packed_fields_offset = 84;
-static constexpr dart::compiler::target::word
-    AOT_Function_parameter_names_offset = 40;
 static constexpr dart::compiler::target::word AOT_Function_signature_offset =
     48;
 static constexpr dart::compiler::target::word
@@ -9248,6 +9246,8 @@
 static constexpr dart::compiler::target::word
     AOT_FunctionType_parameter_types_offset = 40;
 static constexpr dart::compiler::target::word
+    AOT_FunctionType_parameter_names_offset = 48;
+static constexpr dart::compiler::target::word
     AOT_FunctionType_type_parameters_offset = 24;
 static constexpr dart::compiler::target::word
     AOT_TypeParameter_parameterized_class_id_offset = 56;
@@ -9554,8 +9554,6 @@
 static constexpr dart::compiler::target::word AOT_Function_kind_tag_offset = 40;
 static constexpr dart::compiler::target::word
     AOT_Function_packed_fields_offset = 44;
-static constexpr dart::compiler::target::word
-    AOT_Function_parameter_names_offset = 20;
 static constexpr dart::compiler::target::word AOT_Function_signature_offset =
     24;
 static constexpr dart::compiler::target::word
@@ -9843,6 +9841,8 @@
 static constexpr dart::compiler::target::word
     AOT_FunctionType_parameter_types_offset = 20;
 static constexpr dart::compiler::target::word
+    AOT_FunctionType_parameter_names_offset = 24;
+static constexpr dart::compiler::target::word
     AOT_FunctionType_type_parameters_offset = 12;
 static constexpr dart::compiler::target::word
     AOT_TypeParameter_parameterized_class_id_offset = 28;
@@ -10142,8 +10142,6 @@
 static constexpr dart::compiler::target::word AOT_Function_kind_tag_offset = 80;
 static constexpr dart::compiler::target::word
     AOT_Function_packed_fields_offset = 84;
-static constexpr dart::compiler::target::word
-    AOT_Function_parameter_names_offset = 40;
 static constexpr dart::compiler::target::word AOT_Function_signature_offset =
     48;
 static constexpr dart::compiler::target::word
@@ -10432,6 +10430,8 @@
 static constexpr dart::compiler::target::word
     AOT_FunctionType_parameter_types_offset = 40;
 static constexpr dart::compiler::target::word
+    AOT_FunctionType_parameter_names_offset = 48;
+static constexpr dart::compiler::target::word
     AOT_FunctionType_type_parameters_offset = 24;
 static constexpr dart::compiler::target::word
     AOT_TypeParameter_parameterized_class_id_offset = 56;
@@ -10736,8 +10736,6 @@
 static constexpr dart::compiler::target::word AOT_Function_kind_tag_offset = 80;
 static constexpr dart::compiler::target::word
     AOT_Function_packed_fields_offset = 84;
-static constexpr dart::compiler::target::word
-    AOT_Function_parameter_names_offset = 40;
 static constexpr dart::compiler::target::word AOT_Function_signature_offset =
     48;
 static constexpr dart::compiler::target::word
@@ -11026,6 +11024,8 @@
 static constexpr dart::compiler::target::word
     AOT_FunctionType_parameter_types_offset = 40;
 static constexpr dart::compiler::target::word
+    AOT_FunctionType_parameter_names_offset = 48;
+static constexpr dart::compiler::target::word
     AOT_FunctionType_type_parameters_offset = 24;
 static constexpr dart::compiler::target::word
     AOT_TypeParameter_parameterized_class_id_offset = 56;
@@ -11328,8 +11328,6 @@
 static constexpr dart::compiler::target::word AOT_Function_kind_tag_offset = 80;
 static constexpr dart::compiler::target::word
     AOT_Function_packed_fields_offset = 84;
-static constexpr dart::compiler::target::word
-    AOT_Function_parameter_names_offset = 40;
 static constexpr dart::compiler::target::word AOT_Function_signature_offset =
     48;
 static constexpr dart::compiler::target::word
@@ -11618,6 +11616,8 @@
 static constexpr dart::compiler::target::word
     AOT_FunctionType_parameter_types_offset = 40;
 static constexpr dart::compiler::target::word
+    AOT_FunctionType_parameter_names_offset = 48;
+static constexpr dart::compiler::target::word
     AOT_FunctionType_type_parameters_offset = 24;
 static constexpr dart::compiler::target::word
     AOT_TypeParameter_parameterized_class_id_offset = 56;
@@ -11919,8 +11919,6 @@
 static constexpr dart::compiler::target::word AOT_Function_kind_tag_offset = 80;
 static constexpr dart::compiler::target::word
     AOT_Function_packed_fields_offset = 84;
-static constexpr dart::compiler::target::word
-    AOT_Function_parameter_names_offset = 40;
 static constexpr dart::compiler::target::word AOT_Function_signature_offset =
     48;
 static constexpr dart::compiler::target::word
@@ -12209,6 +12207,8 @@
 static constexpr dart::compiler::target::word
     AOT_FunctionType_parameter_types_offset = 40;
 static constexpr dart::compiler::target::word
+    AOT_FunctionType_parameter_names_offset = 48;
+static constexpr dart::compiler::target::word
     AOT_FunctionType_type_parameters_offset = 24;
 static constexpr dart::compiler::target::word
     AOT_TypeParameter_parameterized_class_id_offset = 56;
diff --git a/runtime/vm/compiler/runtime_offsets_list.h b/runtime/vm/compiler/runtime_offsets_list.h
index e249228..e708265 100644
--- a/runtime/vm/compiler/runtime_offsets_list.h
+++ b/runtime/vm/compiler/runtime_offsets_list.h
@@ -113,7 +113,6 @@
         CodeEntryKind::kUnchecked, [](CodeEntryKind value) { return true; })   \
   FIELD(Function, kind_tag_offset)                                             \
   FIELD(Function, packed_fields_offset)                                        \
-  FIELD(Function, parameter_names_offset)                                      \
   FIELD(Function, signature_offset)                                            \
   FIELD(FutureOr, type_arguments_offset)                                       \
   FIELD(GrowableObjectArray, data_offset)                                      \
@@ -271,6 +270,7 @@
   FIELD(FunctionType, hash_offset)                                             \
   FIELD(FunctionType, packed_fields_offset)                                    \
   FIELD(FunctionType, parameter_types_offset)                                  \
+  FIELD(FunctionType, parameter_names_offset)                                  \
   FIELD(FunctionType, type_parameters_offset)                                  \
   FIELD(TypeParameter, parameterized_class_id_offset)                          \
   FIELD(TypeParameter, index_offset)                                           \
diff --git a/runtime/vm/object.h b/runtime/vm/object.h
index 17187ee..326cc5b 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.h
@@ -2554,9 +2554,6 @@
   StringPtr ParameterNameAt(intptr_t index) const;
   ArrayPtr parameter_names() const { return untag()->parameter_names(); }
   void SetParameterNamesFrom(const FunctionType& signature) const;
-  static intptr_t parameter_names_offset() {
-    return OFFSET_OF(UntaggedFunction, parameter_names_);
-  }
 
   // The required flags are stored at the end of the parameter_names. The flags
   // are packed into SMIs, but omitted if they're 0.
@@ -2932,13 +2929,6 @@
   // Returns the size of the source for this function.
   intptr_t SourceSize() const;
 
-  // Reexported so they can be used by the flow graph builders.
-  using PackedHasNamedOptionalParameters =
-      UntaggedFunction::PackedHasNamedOptionalParameters;
-  using PackedNumFixedParameters = UntaggedFunction::PackedNumFixedParameters;
-  using PackedNumOptionalParameters =
-      UntaggedFunction::PackedNumOptionalParameters;
-
   uint32_t packed_fields() const { return untag()->packed_fields_; }
   void set_packed_fields(uint32_t packed_fields) const;
   static intptr_t packed_fields_offset() {
@@ -8121,6 +8111,14 @@
     return OFFSET_OF(UntaggedFunctionType, packed_fields_);
   }
 
+  // Reexported so they can be used by the flow graph builders.
+  using PackedHasNamedOptionalParameters =
+      UntaggedFunctionType::PackedHasNamedOptionalParameters;
+  using PackedNumFixedParameters =
+      UntaggedFunctionType::PackedNumFixedParameters;
+  using PackedNumOptionalParameters =
+      UntaggedFunctionType::PackedNumOptionalParameters;
+
   AbstractTypePtr result_type() const { return untag()->result_type(); }
   void set_result_type(const AbstractType& value) const;
 
@@ -8145,6 +8143,9 @@
   void SetParameterNameAt(intptr_t index, const String& value) const;
   ArrayPtr parameter_names() const { return untag()->parameter_names(); }
   void set_parameter_names(const Array& value) const;
+  static intptr_t parameter_names_offset() {
+    return OFFSET_OF(UntaggedFunctionType, parameter_names_);
+  }
 
   // The required flags are stored at the end of the parameter_names. The flags
   // are packed into SMIs, but omitted if they're 0.
diff --git a/runtime/vm/raw_object.h b/runtime/vm/raw_object.h
index 160185c..21fe968 100644
--- a/runtime/vm/raw_object.h
+++ b/runtime/vm/raw_object.h
@@ -1147,7 +1147,6 @@
 
   // TODO(regis): Split packed_fields_ in 2 uint32_t if max values are too low.
 
-  // Keep in sync with corresponding constants in UntaggedFunctionType.
   static constexpr intptr_t kMaxOptimizableBits = 1;
   static constexpr intptr_t kMaxBackgroundOptimizableBits = 1;
   static constexpr intptr_t kMaxTypeParametersBits = 7;
@@ -1184,10 +1183,6 @@
   static_assert(PackedNumOptionalParameters::kNextBit <=
                     kBitsPerByte * sizeof(decltype(packed_fields_)),
                 "UntaggedFunction::packed_fields_ bitfields don't fit.");
-  static_assert(PackedNumOptionalParameters::kNextBit <=
-                    compiler::target::kSmiBits,
-                "In-place mask for number of optional parameters cannot fit in "
-                "a Smi on the target architecture");
 
 #define JIT_FUNCTION_COUNTERS(F)                                               \
   F(intptr_t, int32_t, usage_counter)                                          \
@@ -1205,6 +1200,8 @@
 #undef DECLARE
 
 #endif  // !defined(DART_PRECOMPILED_RUNTIME)
+
+  friend class UntaggedFunctionType;  // To use same constants for packing.
 };
 
 class UntaggedClosureData : public UntaggedObject {
@@ -2340,28 +2337,30 @@
   uint8_t type_state_;
   uint8_t nullability_;
 
-  // Keep in sync with corresponding constants in UntaggedFunction.
   static constexpr intptr_t kMaxParentTypeArgumentsBits = 8;
-  static constexpr intptr_t kMaxHasNamedOptionalParametersBits = 1;
   static constexpr intptr_t kMaxImplicitParametersBits = 1;
-  static constexpr intptr_t kMaxFixedParametersBits = 10;
-  static constexpr intptr_t kMaxOptionalParametersBits = 10;
+  static constexpr intptr_t kMaxHasNamedOptionalParametersBits =
+      UntaggedFunction::kMaxHasNamedOptionalParametersBits;
+  static constexpr intptr_t kMaxFixedParametersBits =
+      UntaggedFunction::kMaxFixedParametersBits;
+  static constexpr intptr_t kMaxOptionalParametersBits =
+      UntaggedFunction::kMaxOptionalParametersBits;
 
   typedef BitField<uint32_t, uint8_t, 0, kMaxParentTypeArgumentsBits>
       PackedNumParentTypeArguments;
   typedef BitField<uint32_t,
-                   bool,
-                   PackedNumParentTypeArguments::kNextBit,
-                   kMaxHasNamedOptionalParametersBits>
-      PackedHasNamedOptionalParameters;
-  typedef BitField<uint32_t,
                    uint8_t,
-                   PackedHasNamedOptionalParameters::kNextBit,
+                   PackedNumParentTypeArguments::kNextBit,
                    kMaxImplicitParametersBits>
       PackedNumImplicitParameters;
   typedef BitField<uint32_t,
-                   uint16_t,
+                   bool,
                    PackedNumImplicitParameters::kNextBit,
+                   kMaxHasNamedOptionalParametersBits>
+      PackedHasNamedOptionalParameters;
+  typedef BitField<uint32_t,
+                   uint16_t,
+                   PackedHasNamedOptionalParameters::kNextBit,
                    kMaxFixedParametersBits>
       PackedNumFixedParameters;
   typedef BitField<uint32_t,
@@ -2372,6 +2371,10 @@
   static_assert(PackedNumOptionalParameters::kNextBit <=
                     kBitsPerByte * sizeof(decltype(packed_fields_)),
                 "UntaggedFunctionType::packed_fields_ bitfields don't fit.");
+  static_assert(PackedNumOptionalParameters::kNextBit <=
+                    compiler::target::kSmiBits,
+                "In-place mask for number of optional parameters cannot fit in "
+                "a Smi on the target architecture");
 
   ObjectPtr* to_snapshot(Snapshot::Kind kind) { return to(); }
 
diff --git a/sdk/lib/_internal/vm/lib/integers.dart b/sdk/lib/_internal/vm/lib/integers.dart
index aefb957..123c964 100644
--- a/sdk/lib/_internal/vm/lib/integers.dart
+++ b/sdk/lib/_internal/vm/lib/integers.dart
@@ -32,7 +32,9 @@
     return this.toDouble() / other.toDouble();
   }
 
+  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:non-nullable-result-type")
+  @pragma("vm:never-inline")
   num operator %(num other) {
     if ((other is int) && (other == 0)) {
       throw const IntegerDivisionByZeroException();
@@ -67,14 +69,9 @@
   }
 
   @pragma("vm:non-nullable-result-type")
-  int _bitAndFromSmi(_Smi other) native "Integer_bitAndFromInteger";
-  @pragma("vm:recognized", "asm-intrinsic")
-  @pragma("vm:non-nullable-result-type")
   int _bitAndFromInteger(int other) native "Integer_bitAndFromInteger";
-  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:non-nullable-result-type")
   int _bitOrFromInteger(int other) native "Integer_bitOrFromInteger";
-  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:non-nullable-result-type")
   int _bitXorFromInteger(int other) native "Integer_bitXorFromInteger";
   @pragma("vm:non-nullable-result-type")
@@ -83,18 +80,14 @@
   int _ushrFromInteger(int other) native "Integer_ushrFromInteger";
   @pragma("vm:non-nullable-result-type")
   int _shlFromInteger(int other) native "Integer_shlFromInteger";
-  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:non-nullable-result-type")
   int _addFromInteger(int other) native "Integer_addFromInteger";
-  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:non-nullable-result-type")
   int _subFromInteger(int other) native "Integer_subFromInteger";
-  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:non-nullable-result-type")
   int _mulFromInteger(int other) native "Integer_mulFromInteger";
   @pragma("vm:non-nullable-result-type")
   int _truncDivFromInteger(int other) native "Integer_truncDivFromInteger";
-  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:non-nullable-result-type")
   int _moduloFromInteger(int other) native "Integer_moduloFromInteger";
   int _remainderFromInteger(int other) {
@@ -142,7 +135,6 @@
     return (this == other) || (this < other);
   }
 
-  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:exact-result-type", bool)
   bool _greaterThanFromInteger(int other)
       native "Integer_greaterThanFromInteger";
@@ -555,12 +547,6 @@
   @pragma("vm:exact-result-type", "dart:core#_Smi")
   int get bitLength native "Smi_bitLength";
 
-  int operator &(int other) => other._bitAndFromSmi(this);
-
-  @pragma("vm:recognized", "asm-intrinsic")
-  @pragma("vm:exact-result-type", "dart:core#_Smi")
-  int _bitAndFromSmi(_Smi other) native "Smi_bitAndFromSmi";
-
   /**
    * The digits of '00', '01', ... '99' as a single array.
    *
@@ -766,6 +752,4 @@
   int operator ~() native "Mint_bitNegate";
   @pragma("vm:exact-result-type", "dart:core#_Smi")
   int get bitLength native "Mint_bitLength";
-
-  int _bitAndFromSmi(_Smi other) => _bitAndFromInteger(other);
 }
diff --git a/sdk/lib/ffi/struct.dart b/sdk/lib/ffi/struct.dart
index 37fa93c..283d04c 100644
--- a/sdk/lib/ffi/struct.dart
+++ b/sdk/lib/ffi/struct.dart
@@ -58,10 +58,3 @@
 
   Struct._fromPointer(this._addressOf);
 }
-
-/// Extension on [Struct] specialized for its subtypes.
-extension StructAddressOf<T extends Struct> on T {
-  /// Returns the address backing the reference.
-  @Deprecated('Hold on to the pointer backing a struct instead.')
-  Pointer<T> get addressOf => _addressOf as Pointer<T>;
-}
diff --git a/tests/ffi/structs_nnbd_workaround_test.dart b/tests/ffi/structs_nnbd_workaround_test.dart
index cf8f672..635c877 100644
--- a/tests/ffi/structs_nnbd_workaround_test.dart
+++ b/tests/ffi/structs_nnbd_workaround_test.dart
@@ -98,8 +98,6 @@
   final pointer = calloc<Coordinate>();
   Coordinate c = pointer.ref;
   Expect.isTrue(c is Struct);
-  // TODO(https://dartbug.com/40667): Remove support for this.
-  Expect.isTrue(c.addressOf is Pointer<Coordinate>);
   calloc.free(pointer);
 }
 
diff --git a/tests/ffi/structs_test.dart b/tests/ffi/structs_test.dart
index 18448c0..cf37d16 100644
--- a/tests/ffi/structs_test.dart
+++ b/tests/ffi/structs_test.dart
@@ -128,8 +128,6 @@
   final pointer = calloc<Coordinate>();
   Coordinate c = pointer.ref;
   Expect.isTrue(c is Struct);
-  // TODO(https://dartbug.com/40667): Remove support for this.
-  Expect.isTrue(c.addressOf is Pointer<Coordinate>);
   calloc.free(pointer);
 }
 
diff --git a/tests/ffi_2/structs_test.dart b/tests/ffi_2/structs_test.dart
index 18448c0..cf37d16 100644
--- a/tests/ffi_2/structs_test.dart
+++ b/tests/ffi_2/structs_test.dart
@@ -128,8 +128,6 @@
   final pointer = calloc<Coordinate>();
   Coordinate c = pointer.ref;
   Expect.isTrue(c is Struct);
-  // TODO(https://dartbug.com/40667): Remove support for this.
-  Expect.isTrue(c.addressOf is Pointer<Coordinate>);
   calloc.free(pointer);
 }
 
diff --git a/tools/VERSION b/tools/VERSION
index f121dd3..d8acf1f 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 13
 PATCH 0
-PRERELEASE 91
+PRERELEASE 92
 PRERELEASE_PATCH 0
\ No newline at end of file
